From: Eric Biggers <ebiggers@kernel.org>
To: Ard Biesheuvel <ardb+git@google.com>
Cc: linux-crypto@vger.kernel.org, herbert@gondor.apana.org.au,
Ard Biesheuvel <ardb@kernel.org>,
stable@vger.kernel.org,
syzbot+f1ceaa1a09ab891e1934@syzkaller.appspotmail.com
Subject: Re: [PATCH] crypto: arm64/neonbs - fix out-of-bounds access on short input
Date: Wed, 21 Feb 2024 22:34:33 -0800 [thread overview]
Message-ID: <20240222063433.GA37580@sol.localdomain> (raw)
In-Reply-To: <20240217161151.3987164-2-ardb+git@google.com>
On Sat, Feb 17, 2024 at 05:11:52PM +0100, Ard Biesheuvel wrote:
> From: Ard Biesheuvel <ardb@kernel.org>
>
> The bit-sliced implementation of AES-CTR operates on blocks of 128
> bytes, and will fall back to the plain NEON version for tail blocks or
> inputs that are shorter than 128 bytes to begin with.
>
> It will call straight into the plain NEON asm helper, which performs all
> memory accesses in granules of 16 bytes (the size of a NEON register).
> For this reason, the associated plain NEON glue code will copy inputs
> shorter than 16 bytes into a temporary buffer, given that this is a rare
> occurrence and it is not worth the effort to work around this in the asm
> code.
>
> The fallback from the bit-sliced NEON version fails to take this into
> account, potentially resulting in out-of-bounds accesses. So clone the
> same workaround, and use a temp buffer for short in/outputs.
>
> Cc: <stable@vger.kernel.org>
> Reported-by: syzbot+f1ceaa1a09ab891e1934@syzkaller.appspotmail.com
> Tested-by: syzbot+f1ceaa1a09ab891e1934@syzkaller.appspotmail.com
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Looks like this could use:
Fixes: fc074e130051 ("crypto: arm64/aes-neonbs-ctr - fallback to plain NEON for final chunk")
> + if (unlikely(nbytes < AES_BLOCK_SIZE))
> + src = dst = memcpy(buf + sizeof(buf) - nbytes,
> + src, nbytes);
> +
> neon_aes_ctr_encrypt(dst, src, ctx->enc, ctx->key.rounds,
> nbytes, walk.iv);
> +
> + if (unlikely(nbytes < AES_BLOCK_SIZE))
> + memcpy(d, buf + sizeof(buf) - nbytes, nbytes);
The second one could use 'dst' instead of 'buf + sizeof(buf) - nbytes', right?
Otherwise this looks good.
Reviewed-by: Eric Biggers <ebiggers@google.com>
- Eric
next prev parent reply other threads:[~2024-02-22 6:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 16:11 [PATCH] crypto: arm64/neonbs - fix out-of-bounds access on short input Ard Biesheuvel
2024-02-21 23:37 ` Ard Biesheuvel
2024-02-22 6:08 ` Herbert Xu
2024-02-22 6:34 ` Eric Biggers [this message]
2024-02-22 8:18 ` Ard Biesheuvel
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=20240222063433.GA37580@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=ardb+git@google.com \
--cc=ardb@kernel.org \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=syzbot+f1ceaa1a09ab891e1934@syzkaller.appspotmail.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.