From: "Daniel Martí" <mvdan@mvdan.cc>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Daniel Martí via GitGitGadget" <gitgitgadget@gmail.com>,
git@vger.kernel.org, "M Hickford" <mirth.hickford@gmail.com>,
"Mantas Mikulėnas" <grawity@gmail.com>,
"Patrick Steinhardt" <ps@pks.im>
Subject: Re: [PATCH] credential/libsecret: load secrets explicitly
Date: Sat, 22 Aug 2026 21:47:12 +0100 [thread overview]
Message-ID: <a60afe54-7059-4827-8c3b-dfe01a0cde9c@mvdan.cc> (raw)
In-Reply-To: <xmqq33w8sjcg.fsf@gitster.g>
Hi Junio, thanks very much for your review. I also do not program Gnome,
so this is just based on my best effort research :)
Junio C Hamano <gitster@pobox.com> writes:
> The above makes it sound like we can just request with
> secret_service_search_sync() exactly the same way as before (i.e.,
> with LOAD_SECRETS), and then check with secret_item_get_secret()
> to see if it has secret value in it. The problem with the current
> code is that we do not validate what that secrete value is (iow, we
> do not say "ah, NULL, we should not assume we do have secret already
> obtained here").
>
> So does the first hunk to drop _LOAD_SECRETS really needed?
Not strictly; your version would avoid the assertion failures too.
I dropped the flag because it isn't the single call it appears to be:
libsecret implements SECRET_SEARCH_LOAD_SECRETS as the SearchItems
D-Bus call followed by a separate GetSecrets call covering the matched
items, with any error from that second step discarded. It also skips
locked items on the client side without even asking the daemon, so
SECRET_SEARCH_UNLOCK having silently failed is one way to end up with
a NULL secret. The patch does SearchItems plus one GetSecret for the
one item we use, so the common case is the same two round trips either
way; it is your fallback version that would add a third in the rare
case. That is what the "cost is unchanged" paragraph in the commit
message is trying to say.
Keeping the flag with a fallback load would also mean the explicit
load only runs during the rare race, so that path would go essentially
unexercised, and load errors on the common path would still be
silently discarded. With the unconditional load there is one code
path, taken on every run, and any failure produces a real error
message.
> I am also assuming that this is a race condition that is not very
> easy to reliably reproduce in the test, so I wouldn't expect it to
> come with a test to ensure that the fix will not regress in the
> future (in other words, lack of patch to t/ directory is fine).
Right, it needs a concurrently-racing process (or a locked keyring)
to trigger, so I don't see a way to test it reliably.
Thanks!
prev parent reply other threads:[~2026-08-22 20:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-04 22:40 [PATCH] credential/libsecret: load secrets explicitly Daniel Martí via GitGitGadget
2026-08-20 15:00 ` Daniel Martí
2026-08-20 19:05 ` Junio C Hamano
2026-08-22 20:47 ` Daniel Martí [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a60afe54-7059-4827-8c3b-dfe01a0cde9c@mvdan.cc \
--to=mvdan@mvdan.cc \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=grawity@gmail.com \
--cc=mirth.hickford@gmail.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox