mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-10-15 18:27:12 +00:00
gnome-keyring: upgrade 51.0 -> 51.1
0004-gkd-secret-session-drop-the-duplicate-session-unref.patch is removed, the fix is included upstream (!114). AI-Generated: Uses Claude Code (Claude Opus 5.5) Signed-off-by: Markus Volk <f_l_k@t-online.de> Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
1 parent
13915b76c5
commit
65cc5b8911
2 files changed
+1
-60
No files matched your search
-58
@@ -1,58 +0,0 @@
|
||||
From 011d89df54d0f441d17c449513ae0ef8aa21c4cd Mon Sep 17 00:00:00 2001
|
||||
From: Markus Volk <f_l_k@t-online.de>
|
||||
Date: Tue, 15 Sep 2026 19:22:41 +0200
|
||||
Subject: [PATCH] gkd-secret-session: drop the duplicate session unref
|
||||
|
||||
gkd_secret_session_get_item_secret() unrefs the session returned by
|
||||
gck_object_get_session() twice: once right after
|
||||
gck_session_wrap_key_full(), and once more below with a comment claiming
|
||||
the reference would otherwise leak. gck_object_get_session() hands out a
|
||||
single new reference, so the second unref drops one reference too many
|
||||
on every GetSecret call.
|
||||
|
||||
The GckSession is freed while client->pkcs11_session and the GckObject
|
||||
of the session key still point at it. The daemon dies when the client
|
||||
leaves the bus and its dispatch table is torn down:
|
||||
|
||||
service_name_owner_changed daemon/dbus/gkd-secret-service.c:944
|
||||
free_client daemon/dbus/gkd-secret-service.c:264
|
||||
dispose_and_unref daemon/dbus/gkd-secret-service.c:245
|
||||
gkd_secret_session_dispose daemon/dbus/gkd-secret-session.c:357
|
||||
gck_object_finalize gck/gck-object.c:135
|
||||
g_object_unref -> SIGSEGV, rax = 0xaaaaaaaaaaaaaaaa
|
||||
|
||||
Reproduced on a running system with a single "secret-tool lookup",
|
||||
symbolized against /usr/src/debug. The older crashes reported as
|
||||
"segfault at f00dface in libgck-1.so" are the same use after free caught
|
||||
at an earlier point.
|
||||
|
||||
gkd-secret-lock.c:49 and gkd-secret-unlock.c:726 do it correctly, with
|
||||
exactly one unref per gck_object_get_session().
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Still present in gnome-keyring main as of 2026-09-15.
|
||||
|
||||
AI-Generated: Uses Claude Code (Claude Opus 5)
|
||||
---
|
||||
daemon/dbus/gkd-secret-session.c | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/daemon/dbus/gkd-secret-session.c b/daemon/dbus/gkd-secret-session.c
|
||||
index 16bb368..6799b4c 100644
|
||||
--- a/daemon/dbus/gkd-secret-session.c
|
||||
+++ b/daemon/dbus/gkd-secret-session.c
|
||||
@@ -609,13 +609,6 @@ gkd_secret_session_get_item_secret (GkdSecretSession *self, GckObject *item,
|
||||
NULL, &error);
|
||||
g_object_unref (session);
|
||||
|
||||
- /*
|
||||
- * gck_object_get_session() returns a new reference, so drop it again.
|
||||
- * Not doing so leaks a GckSession on every GetSecret call, which in turn
|
||||
- * keeps the client's PKCS#11 session alive after the client is gone.
|
||||
- */
|
||||
- g_object_unref (session);
|
||||
-
|
||||
if (error != NULL) {
|
||||
if (g_error_matches (error, GCK_ERROR, CKR_USER_NOT_LOGGED_IN)) {
|
||||
g_set_error_literal (error_out, GKD_SECRET_ERROR,
|
||||
+1
-2
@@ -20,11 +20,10 @@ DEPENDS = " \
|
||||
|
||||
inherit gnomebase gsettings gettext
|
||||
|
||||
SRC_URI[archive.sha256sum] = "2aebaa2d474cc31507c87a7bbbdb3e16dbe26b1cfef9f206457f3f9df43558b0"
|
||||
SRC_URI[archive.sha256sum] = "dfe7adc5876ef0670e7eba2907799bdbb8875ce58bb4208e1a52169bd16a47ca"
|
||||
SRC_URI += "file://0001-meson-allow-setting-the-paths-to-ssh-agent-and-ssh-add-by-option.patch \
|
||||
file://0002-gkd-secret-service-destroy-the-dispatch-table-before.patch \
|
||||
file://0003-gkd-secret-unlock-do-not-use-the-service-after-dispo.patch \
|
||||
file://0004-gkd-secret-session-drop-the-duplicate-session-unref.patch \
|
||||
"
|
||||
|
||||
PACKAGECONFIG ??= " \
|
||||
Reference in new issue
Block a user