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)
committerChuck Lever <chuck.lever@oracle.com>
Tue, 15 Mar 2022 16:24:18 +0000 (12:24 -0400)
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>
include/linux/sunrpc/xdr.h

index b519609..4417f66 100644 (file)
@@ -731,6 +731,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;