From: Eric Biggers <ebiggers@kernel.org>
To: "Michal Suchánek" <msuchanek@suse.de>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
linux-crypto@vger.kernel.org, chetjain@in.ibm.com,
"David S . Miller" <davem@davemloft.net>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Steffen Klassert <steffen.klassert@secunet.com>
Subject: Re: [PATCH] crypto: user - prevent operating on larval algorithms
Date: Wed, 3 Jul 2019 13:31:29 -0700 [thread overview]
Message-ID: <20190703203128.GC10080@gmail.com> (raw)
In-Reply-To: <20190703222108.467ec204@kitsune.suse.cz>
Hi Michal,
On Wed, Jul 03, 2019 at 10:21:08PM +0200, Michal Suchánek wrote:
> On Wed, 3 Jul 2019 22:30:57 +0800
> Herbert Xu <herbert@gondor.apana.org.au> wrote:
>
> > On Tue, Jul 02, 2019 at 02:17:00PM -0700, Eric Biggers wrote:
> > > From: Eric Biggers <ebiggers@google.com>
> > >
> > > Michal Suchanek reported [1] that running the pcrypt_aead01 test from
> > > LTP [2] in a loop and holding Ctrl-C causes a NULL dereference of
> > > alg->cra_users.next in crypto_remove_spawns(), via crypto_del_alg().
> > > The test repeatedly uses CRYPTO_MSG_NEWALG and CRYPTO_MSG_DELALG.
> > >
> > > The crash occurs when the instance that CRYPTO_MSG_DELALG is trying to
> > > unregister isn't a real registered algorithm, but rather is a "test
> > > larval", which is a special "algorithm" added to the algorithms list
> > > while the real algorithm is still being tested. Larvals don't have
> > > initialized cra_users, so that causes the crash. Normally pcrypt_aead01
> > > doesn't trigger this because CRYPTO_MSG_NEWALG waits for the algorithm
> > > to be tested; however, CRYPTO_MSG_NEWALG returns early when interrupted.
> > >
>
> Do you have some way to reproduce this reliably?
>
> I suppose you would have to send a signal to the process for the call
> to get interrupted, right?
>
It reproduced pretty reliably for me with what you suggested. Just typing in
terminal:
while true; do pcrypt_aead01; done
and then holding Ctrl-C.
If I have time I'll try writing an LTP test that specifically reproduces it.
Yes, it would involve sending a signal to a thread or process that's executing
CRYPTO_MSG_NEWALG (unless I find a better way).
- Eric
next prev parent reply other threads:[~2019-07-03 20:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-25 7:16 [PATCH] crypto: algapi - guard against uninitialized spawn list in crypto_remove_spawns Michal Suchanek
2019-06-25 16:40 ` Eric Biggers
2019-06-25 16:48 ` Michal Suchánek
2019-07-01 13:31 ` Michal Suchánek
2019-07-02 21:17 ` [PATCH] crypto: user - prevent operating on larval algorithms Eric Biggers
2019-07-03 14:30 ` Herbert Xu
2019-07-03 20:21 ` Michal Suchánek
2019-07-03 20:31 ` Eric Biggers [this message]
2019-07-03 21:10 ` Michal Suchánek
2019-07-02 22:11 ` [PATCH] crypto: algapi - guard against uninitialized spawn list in crypto_remove_spawns Eric Biggers
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=20190703203128.GC10080@gmail.com \
--to=ebiggers@kernel.org \
--cc=chetjain@in.ibm.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=msuchanek@suse.de \
--cc=stable@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
/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.