]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: prevent integer overflow on 32 bit systems
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 15 Mar 2022 15:34:06 +0000 (18:34 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Apr 2022 12:14:39 +0000 (14:14 +0200)
commit 23a9dbbe0faf124fc4c139615633b9d12a3a89ef upstream.

On a 32 bit system, the "len * sizeof(*p)" operation can have an
integer overflow.

Cc: stable@vger.kernel.org
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/sunrpc/xdr.h

index 33580cc72a43d02f6e2b9edc0e4397e73ae5e3c6..8e3d35189bf89f644960b397f9f67fb825fb470b 100644 (file)
@@ -509,6 +509,8 @@ xdr_stream_decode_uint32_array(struct xdr_stream *xdr,
 
        if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0))
                return -EBADMSG;
+       if (len > SIZE_MAX / sizeof(*p))
+               return -EBADMSG;
        p = xdr_inline_decode(xdr, len * sizeof(*p));
        if (unlikely(!p))
                return -EBADMSG;