]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.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)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 13:18:19 +0000 (15:18 +0200)
BugLink: https://bugs.launchpad.net/bugs/1971497
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>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
include/linux/sunrpc/xdr.h

index a8d68c5a4ca61f01bfdbe7e25e25c746077b30a1..fb0a6d6c91e489b7959ec6167722563b0b4cac99 100644 (file)
@@ -536,6 +536,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;