]> git.itanic.dy.fi Git - linux-stable/commitdiff
cifs: fix underflow in parse_server_interfaces()
authorDan Carpenter <dan.carpenter@linaro.org>
Thu, 8 Feb 2024 10:18:46 +0000 (13:18 +0300)
committerSteve French <stfrench@microsoft.com>
Mon, 12 Feb 2024 01:07:08 +0000 (19:07 -0600)
In this loop, we step through the buffer and after each item we check
if the size_left is greater than the minimum size we need.  However,
the problem is that "bytes_left" is type ssize_t while sizeof() is type
size_t.  That means that because of type promotion, the comparison is
done as an unsigned and if we have negative bytes left the loop
continues instead of ending.

Fixes: fe856be475f7 ("CIFS: parse and store info on iface queries")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smb2ops.c

index 83c898afc8354bf04c7a86ee57e4343ad3618319..755f1c66b573aa15d1274b02323c8ccd5ca20099 100644 (file)
@@ -619,7 +619,7 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
                goto out;
        }
 
-       while (bytes_left >= sizeof(*p)) {
+       while (bytes_left >= (ssize_t)sizeof(*p)) {
                memset(&tmp_iface, 0, sizeof(tmp_iface));
                tmp_iface.speed = le64_to_cpu(p->LinkSpeed);
                tmp_iface.rdma_capable = le32_to_cpu(p->Capability & RDMA_CAPABLE) ? 1 : 0;