Hello Debian GNOME maintainers,

I now have a deterministic, isolated source-level reproducer and a
successful before/after comparison for the GNOME gnome-keyring
OpenSession missing-client abort described in upstream MR !112:

  https://gitlab.gnome.org/GNOME/gnome-keyring/-/merge_requests/112

Environment: clean Ubuntu 26.10 Docker container, unprivileged test
user, private HOME/XDG_RUNTIME_DIR and dbus-run-session, official
gnome-keyring 51.1 source tarball SHA256
dfe7adc5876ef0670e7eba2907799bdbb8875ce58bb4208e1a52169bd16a47ca.

Fault injection (TEST-ONLY, not for production patch):
In service_method_open_session(), immediately after
  caller = g_dbus_method_invocation_get_sender (invocation);
I inserted:
  g_hash_table_remove (self->clients, caller);
This deliberately forces the exact missing-client state while leaving
the incoming D-Bus call intact.

The probe starts the built daemon on a *private* session bus and calls
  org.freedesktop.Secret.Service.OpenSession("plain", variant(""))
using gdbus. No stored credentials or user keyrings are mounted.

BEFORE, official 51.1 source + test-only fault injection:
  OpenSession CALL_RC=1
  gdbus: org.freedesktop.DBus.Error.NoReply
  daemon: terminated (SIGABRT)
  stderr:
    gkd_secret_service_get_pkcs11_session: assertion 'client' failed
    plain_negotiate: assertion 'session' failed
    gkd_secret_service_publish_dispatch: assertion 'client' failed
    GLib: g_variant_new: expected GVariant of type 'v' but received
value has type '(null)'

AFTER, identical fault injection + reconstructed five functional edits
from upstream MR !112:
  OpenSession CALL_RC=0
  daemon still alive
  returned (<''>, objectpath '/org/freedesktop/secrets/session/s1')
  no corresponding critical error.

In a separate independent Ubuntu 26.10 build, the five-site MR !112
reconstruction compiled and passed all 61/61 Meson tests as an
unprivileged user. Neither test touched the production host's secret
store or modified its gnome-keyring daemon.

Caveats: this is deterministic *fault injection* reproducing the
missing-client condition, not proof that a naturally scheduled D-Bus
race was triggered. The candidate was reconstructed from MR !112 diff,
not installed from its exact Git commit. This addresses the
OpenSession abort path and should not be confused with the separate
property-GET issue associated with Debian #1147303.

Please review/forward this evidence to the appropriate GNOME upstream
MR discussion and consider bringing the completed MR into the
Debian/Ubuntu packages after upstream acceptance.

Regards,
Alexander Stepanov

Reply via email to