Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

SUNRPC: Don't use variable length automatic arrays in kernel code

Replace the variable length array in the RPCSEC_GSS crypto code with
a fixed length one. The size should be bounded by the variable
GSS_KRB5_MAX_BLOCKSIZE, so use that.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

+5 -2
+5 -2
net/sunrpc/auth_gss/gss_krb5_crypto.c
··· 600 600 u32 ret; 601 601 struct scatterlist sg[1]; 602 602 struct blkcipher_desc desc = { .tfm = cipher, .info = iv }; 603 - u8 data[crypto_blkcipher_blocksize(cipher) * 2]; 603 + u8 data[GSS_KRB5_MAX_BLOCKSIZE * 2]; 604 604 struct page **save_pages; 605 605 u32 len = buf->len - offset; 606 606 607 - BUG_ON(len > crypto_blkcipher_blocksize(cipher) * 2); 607 + if (len > ARRAY_SIZE(data)) { 608 + WARN_ON(0); 609 + return -ENOMEM; 610 + } 608 611 609 612 /* 610 613 * For encryption, we want to read from the cleartext