SUNRPC: clean up integer overflow check
authorDan Carpenter <dan.carpenter@linaro.org>
Fri, 30 Jun 2023 09:46:53 +0000 (12:46 +0300)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 24 Aug 2023 17:24:15 +0000 (13:24 -0400)
This integer overflow check works as intended but Clang and GCC and warn
about it when compiling with W=1.

    include/linux/sunrpc/xdr.h:539:17: error: comparison is always false
    due to limited range of data type [-Werror=type-limits]

Use size_mul() to prevent the integer overflow.  It silences the warning
and it's cleaner as well.

Reported-by: Dmitry Antipov <dmantipov@yandex.ru>
Closes: https://lore.kernel.org/all/20230601143332.255312-1-dmantipov@yandex.ru/
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Acked-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/linux/sunrpc/xdr.h

index adc844d..6891518 100644 (file)
@@ -777,9 +777,7 @@ 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));
+       p = xdr_inline_decode(xdr, size_mul(len, sizeof(*p)));
        if (unlikely(!p))
                return -EBADMSG;
        if (array == NULL)