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)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 21 Apr 2021 10:32:12 +0000 (12:32 +0200)
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>
arch/s390/crypto/arch_random.c

index 7b94772..56007c7 100644 (file)
@@ -54,6 +54,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;