Message ID | 20210525113628.2682248-1-andrew.zaborowski@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [RESEND,1/2] keys: crypto: Replace BUG_ON() with WARN() in find_asymmetric_key() | expand |
On Tue, May 25, 2021 at 01:36:27PM +0200, Andrew Zaborowski wrote: > From: Jarkko Sakkinen <jarkko@kernel.org> > > BUG_ON() should not be used in the kernel code, unless there are > exceptional reasons to do so. Replace BUG_ON() with WARN() and > return. > > Cc: stable@vger.kernel.org > Fixes: b3811d36a3e7 ("KEYS: checking the input id parameters before finding asymmetric key") > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > --- > No changes from original submission by Jarkko. > > crypto/asymmetric_keys/asymmetric_type.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > index ad8af3d70ac..a00bed3e04d 100644 > --- a/crypto/asymmetric_keys/asymmetric_type.c > +++ b/crypto/asymmetric_keys/asymmetric_type.c > @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, > char *req, *p; > int len; > > - BUG_ON(!id_0 && !id_1); > + if (!id_0 && !id_1) { > + WARN(1, "All ID's are NULL\n"); You still just rebooted a machine (panic-on-warn is commonly set). Please just handle this properly, print an error message with dev_err() or pr_err() and move on, don't crash things. thanks, greg k-h
On Tue, May 25, 2021 at 01:53:49PM +0200, Greg KH wrote: > On Tue, May 25, 2021 at 01:36:27PM +0200, Andrew Zaborowski wrote: > > From: Jarkko Sakkinen <jarkko@kernel.org> > > > > BUG_ON() should not be used in the kernel code, unless there are > > exceptional reasons to do so. Replace BUG_ON() with WARN() and > > return. > > > > Cc: stable@vger.kernel.org > > Fixes: b3811d36a3e7 ("KEYS: checking the input id parameters before finding asymmetric key") > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > --- > > No changes from original submission by Jarkko. > > > > crypto/asymmetric_keys/asymmetric_type.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > > index ad8af3d70ac..a00bed3e04d 100644 > > --- a/crypto/asymmetric_keys/asymmetric_type.c > > +++ b/crypto/asymmetric_keys/asymmetric_type.c > > @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, > > char *req, *p; > > int len; > > > > - BUG_ON(!id_0 && !id_1); > > + if (!id_0 && !id_1) { > > + WARN(1, "All ID's are NULL\n"); > > You still just rebooted a machine (panic-on-warn is commonly set). > > Please just handle this properly, print an error message with dev_err() > or pr_err() and move on, don't crash things. > If this case is a kernel bug (which looks to be the case here), then WARN() is correct. The whole point of panic_on_warn is to panic the kernel when it encounters something that has been flagged as a kernel bug, even if it would otherwise be recoverable. - Eric
Hi Greg, On Tue, 25 May 2021 at 13:53, Greg KH <greg@kroah.com> wrote: > On Tue, May 25, 2021 at 01:36:27PM +0200, Andrew Zaborowski wrote: > > From: Jarkko Sakkinen <jarkko@kernel.org> > > > > BUG_ON() should not be used in the kernel code, unless there are > > exceptional reasons to do so. Replace BUG_ON() with WARN() and > > return. > > > > Cc: stable@vger.kernel.org > > Fixes: b3811d36a3e7 ("KEYS: checking the input id parameters before finding asymmetric key") > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > --- > > No changes from original submission by Jarkko. > > > > crypto/asymmetric_keys/asymmetric_type.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > > index ad8af3d70ac..a00bed3e04d 100644 > > --- a/crypto/asymmetric_keys/asymmetric_type.c > > +++ b/crypto/asymmetric_keys/asymmetric_type.c > > @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, > > char *req, *p; > > int len; > > > > - BUG_ON(!id_0 && !id_1); > > + if (!id_0 && !id_1) { > > + WARN(1, "All ID's are NULL\n"); > > You still just rebooted a machine (panic-on-warn is commonly set). > > Please just handle this properly, print an error message with dev_err() > or pr_err() and move on, don't crash things. Like Eric Biggers said, a panic is probably what you want here since this would be a basic bug, if you even want to check this. You can't be looking for a key if you don't have any of the identifiers. There a 4 current callers, 2 that have checks right before the call and 2 where this could be triggered by a bug in an ASN.1 parser or corruption. What's the right way to get this change merged? There's clearly no need to coordinate with whoever would merge 2/2 of the series. Best regards
On Mon, Jun 14, 2021 at 10:54:00AM +0200, Andrew Zaborowski wrote: > Hi Greg, > > On Tue, 25 May 2021 at 13:53, Greg KH <greg@kroah.com> wrote: > > On Tue, May 25, 2021 at 01:36:27PM +0200, Andrew Zaborowski wrote: > > > From: Jarkko Sakkinen <jarkko@kernel.org> > > > > > > BUG_ON() should not be used in the kernel code, unless there are > > > exceptional reasons to do so. Replace BUG_ON() with WARN() and > > > return. > > > > > > Cc: stable@vger.kernel.org > > > Fixes: b3811d36a3e7 ("KEYS: checking the input id parameters before finding asymmetric key") > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > --- > > > No changes from original submission by Jarkko. > > > > > > crypto/asymmetric_keys/asymmetric_type.c | 5 ++++- > > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > > > index ad8af3d70ac..a00bed3e04d 100644 > > > --- a/crypto/asymmetric_keys/asymmetric_type.c > > > +++ b/crypto/asymmetric_keys/asymmetric_type.c > > > @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, > > > char *req, *p; > > > int len; > > > > > > - BUG_ON(!id_0 && !id_1); > > > + if (!id_0 && !id_1) { > > > + WARN(1, "All ID's are NULL\n"); > > > > You still just rebooted a machine (panic-on-warn is commonly set). > > > > Please just handle this properly, print an error message with dev_err() > > or pr_err() and move on, don't crash things. > > Like Eric Biggers said, a panic is probably what you want here since > this would be a basic bug, if you even want to check this. Ok, then keep the BUG_ON(), no change needed. > You can't > be looking for a key if you don't have any of the identifiers. There > a 4 current callers, 2 that have checks right before the call and 2 > where this could be triggered by a bug in an ASN.1 parser or > corruption. > > What's the right way to get this change merged? There's clearly no > need to coordinate with whoever would merge 2/2 of the series. Why do you need to change this if BUG_ON() is the correct thing to do here? thanks, greg k-h
On Mon, 14 Jun 2021 at 10:59, Greg KH <greg@kroah.com> wrote: > On Mon, Jun 14, 2021 at 10:54:00AM +0200, Andrew Zaborowski wrote: > > Hi Greg, > > > > On Tue, 25 May 2021 at 13:53, Greg KH <greg@kroah.com> wrote: > > > On Tue, May 25, 2021 at 01:36:27PM +0200, Andrew Zaborowski wrote: > > > > From: Jarkko Sakkinen <jarkko@kernel.org> > > > > > > > > BUG_ON() should not be used in the kernel code, unless there are > > > > exceptional reasons to do so. Replace BUG_ON() with WARN() and > > > > return. > > > > > > > > Cc: stable@vger.kernel.org > > > > Fixes: b3811d36a3e7 ("KEYS: checking the input id parameters before finding asymmetric key") > > > > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > > > > --- > > > > No changes from original submission by Jarkko. > > > > > > > > crypto/asymmetric_keys/asymmetric_type.c | 5 ++++- > > > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c > > > > index ad8af3d70ac..a00bed3e04d 100644 > > > > --- a/crypto/asymmetric_keys/asymmetric_type.c > > > > +++ b/crypto/asymmetric_keys/asymmetric_type.c > > > > @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, > > > > char *req, *p; > > > > int len; > > > > > > > > - BUG_ON(!id_0 && !id_1); > > > > + if (!id_0 && !id_1) { > > > > + WARN(1, "All ID's are NULL\n"); > > > > > > You still just rebooted a machine (panic-on-warn is commonly set). > > > > > > Please just handle this properly, print an error message with dev_err() > > > or pr_err() and move on, don't crash things. > > > > Like Eric Biggers said, a panic is probably what you want here since > > this would be a basic bug, if you even want to check this. > > Ok, then keep the BUG_ON(), no change needed. > > > You can't > > be looking for a key if you don't have any of the identifiers. There > > a 4 current callers, 2 that have checks right before the call and 2 > > where this could be triggered by a bug in an ASN.1 parser or > > corruption. > > > > What's the right way to get this change merged? There's clearly no > > need to coordinate with whoever would merge 2/2 of the series. > > Why do you need to change this if BUG_ON() is the correct thing to do > here? At this function's level the situation is easily recoverable, I guess the idea is to allow the kernel to continue in the "continue at any cost" type scenario where you'd have panic_on_* set false. Best regards
diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c index ad8af3d70ac..a00bed3e04d 100644 --- a/crypto/asymmetric_keys/asymmetric_type.c +++ b/crypto/asymmetric_keys/asymmetric_type.c @@ -54,7 +54,10 @@ struct key *find_asymmetric_key(struct key *keyring, char *req, *p; int len; - BUG_ON(!id_0 && !id_1); + if (!id_0 && !id_1) { + WARN(1, "All ID's are NULL\n"); + return ERR_PTR(-EINVAL); + } if (id_0) { lookup = id_0->data;