On Wed, Nov 29, 2017 at 01:18:57AM -0800, Eric Biggers wrote: > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > All the ChaCha20 algorithms as well as the ARM bit-sliced AES-XTS > algorithms call skcipher_walk_virt(), then access the IV (walk.iv) > before checking whether any bytes need to be processed (walk.nbytes). > > But if the input is empty, then skcipher_walk_virt() doesn't set the IV, > and the algorithms crash trying to use the uninitialized IV pointer. > > Fix it by setting the IV earlier in skcipher_walk_virt(). Also fix it > for the AEAD walk functions. > > This isn't a perfect solution because we can't actually align the IV to > ->cra_alignmask unless there are bytes to process, for one because the > temporary buffer for the aligned IV is freed by skcipher_walk_done(), > which is only called when there are bytes to process. Thus, algorithms > that require aligned IVs will still need to avoid accessing the IV when > walk.nbytes == 0. Still, many algorithms/architectures are fine with > IVs having any alignment, and even for those that aren't, a misaligned > pointer bug is much less severe than an uninitialized pointer bug. > > This change also matches the behavior of the older blkcipher_walk API. > > Fixes: 0cabf2af6f5a ("crypto: skcipher - Fix crash on zero-length input") > Reported-by: syzbot <syzkaller@xxxxxxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # v4.14+ > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> Patch applied. Thanks. -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt