On Tue Sep 10, 2024 at 2:18 PM EEST, Roman Smirnov wrote: > In find_asymmetric_key(), if all NULLs are passed in id_{0,1,2} parameters > the kernel will first emit WARN and then have an oops because id_2 gets > dereferenced anyway. > > Found by Linux Verification Center (linuxtesting.org) with Svace static > analysis tool. Weird, I recall that I've either sent a patch to address the same site OR have commented a patch with similar reasoning. Well, it does not matter, I think it this makes sense to me. You could further add to the motivation that given the panic_on_warn kernel command-line parameter, it is for the best limit the scope and use of the WARN-macro. > > Fixes: 7d30198ee24f ("keys: X.509 public key issuer lookup without AKID") I would still call this an improvement. It overuses warn but I don't think this a bug. > Suggested-by: Sergey Shtylyov <s.shtylyov@xxxxxx> > Signed-off-by: Roman Smirnov <r.smirnov@xxxxxx> > Reviewed-by: Sergey Shtylyov <s.shtylyov@xxxxxx> > --- > crypto/asymmetric_keys/asymmetric_type.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > index a5da8ccd353e..43af5fa510c0 100644 > --- a/crypto/asymmetric_keys/asymmetric_type.c > +++ b/crypto/asymmetric_keys/asymmetric_type.c > @@ -60,17 +60,18 @@ struct key *find_asymmetric_key(struct key *keyring, > char *req, *p; > int len; > > - WARN_ON(!id_0 && !id_1 && !id_2); > - > if (id_0) { > lookup = id_0->data; > len = id_0->len; > } else if (id_1) { > lookup = id_1->data; > len = id_1->len; > - } else { > + } else if (id_2) { > lookup = id_2->data; > len = id_2->len; > + } else { > + WARN_ON(1); This is totally fine. It is an improvement to the current situation. > + return ERR_PTR(-EINVAL); > } > > /* Construct an identifier "id:<keyid>". */ Can be applied as an improvement and with the added bits about panic_on_warn to the commit message. BR, Jarkko