All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: linux-crypto@vger.kernel.org, Herbert Xu <herbert@gondor.apana.org.au>
Cc: stable@vger.kernel.org,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	"Mike Gerow" <gerow@google.com>, "Kai Lüke" <kai@kinvolk.io>
Subject: Re: [PATCH] crypto: algboss - don't wait during notifier callback
Date: Thu, 4 Jun 2020 13:08:51 -0700	[thread overview]
Message-ID: <20200604200851.GB147774@gmail.com> (raw)
In-Reply-To: <20200604185253.5119-1-ebiggers@kernel.org>

On Thu, Jun 04, 2020 at 11:52:53AM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
> 
> When a crypto template needs to be instantiated, CRYPTO_MSG_ALG_REQUEST
> is sent to crypto_chain.  cryptomgr_schedule_probe() handles this by
> starting a thread to instantiate the template, then waiting for this
> thread to complete via crypto_larval::completion.
> 
> This can deadlock because instantiating the template may require loading
> modules, and this (apparently depending on userspace) may need to wait
> for the crc-t10dif module (lib/crc-t10dif.c) to be loaded.  But
> crc-t10dif's module_init function uses crypto_register_notifier() and
> therefore takes crypto_chain.rwsem for write.  That can't proceed until
> the notifier callback has finished, as it holds this semaphore for read.
> 
> Fix this by removing the wait on crypto_larval::completion from within
> cryptomgr_schedule_probe().  It's actually unnecessary because
> crypto_alg_mod_lookup() calls crypto_larval_wait() itself after sending
> CRYPTO_MSG_ALG_REQUEST.
> 
> This only actually became a problem in v4.20 due to commit b76377543b73
> ("crc-t10dif: Pick better transform if one becomes available"), but the
> unnecessary wait was much older.
> 
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207159
> Reported-by: Mike Gerow <gerow@google.com>

I forgot about the person who originally filed the bugzilla bug.
Kai, if you're okay with it, let's also add:

Reported-by: Kai Lüke <kai@kinvolk.io>

> Fixes: 398710379f51 ("crypto: algapi - Move larval completion into algboss")
> Cc: <stable@vger.kernel.org> # v3.6+
> Cc: Martin K. Petersen <martin.petersen@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>  crypto/algboss.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/crypto/algboss.c b/crypto/algboss.c
> index 535f1f87e6c1..5ebccbd6b74e 100644
> --- a/crypto/algboss.c
> +++ b/crypto/algboss.c
> @@ -178,8 +178,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
>  	if (IS_ERR(thread))
>  		goto err_put_larval;
>  
> -	wait_for_completion_interruptible(&larval->completion);
> -
>  	return NOTIFY_STOP;
>  
>  err_put_larval:
> -- 
> 2.27.0.rc2.251.g90737beb825-goog
> 

  reply	other threads:[~2020-06-04 20:08 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-04 18:52 [PATCH] crypto: algboss - don't wait during notifier callback Eric Biggers
2020-06-04 20:08 ` Eric Biggers [this message]
2020-06-12  6:48 ` Herbert Xu

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=20200604200851.GB147774@gmail.com \
    --to=ebiggers@kernel.org \
    --cc=gerow@google.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kai@kinvolk.io \
    --cc=linux-crypto@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=stable@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.