]> git.itanic.dy.fi Git - linux-stable/commitdiff
s390/archrandom: add parameter check for s390_arch_random_generate
authorHarald Freudenberger <freude@linux.ibm.com>
Tue, 20 Apr 2021 06:23:12 +0000 (08:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 May 2021 12:04:13 +0000 (14:04 +0200)
[ Upstream commit 28096067686c5a5cbd4c35b079749bd805df5010 ]

A review of the code showed, that this function which is exposed
within the whole kernel should do a parameter check for the
amount of bytes requested. If this requested bytes is too high
an unsigned int overflow could happen causing this function to
try to memcpy a really big memory chunk.

This is not a security issue as there are only two invocations
of this function from arch/s390/include/asm/archrandom.h and both
are not exposed to userland.

Reported-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/crypto/arch_random.c

index dd95cdbd22ce8a1f931d6876ad4c26b88cbcf1a0..4cbb4b6d85a83a184ed553ab89001d1cabb3a82b 100644 (file)
@@ -53,6 +53,10 @@ static DECLARE_DELAYED_WORK(arch_rng_work, arch_rng_refill_buffer);
 
 bool s390_arch_random_generate(u8 *buf, unsigned int nbytes)
 {
+       /* max hunk is ARCH_RNG_BUF_SIZE */
+       if (nbytes > ARCH_RNG_BUF_SIZE)
+               return false;
+
        /* lock rng buffer */
        if (!spin_trylock(&arch_rng_lock))
                return false;