usbip: Fix seqnum sign extension issue in vhci_tx_urb
authorXiong Nandi <xndchn@gmail.com>
Tue, 31 Dec 2024 16:15:37 +0000 (00:15 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Jan 2025 11:38:01 +0000 (12:38 +0100)
The atomic_inc_return function returns an int, while priv->seqnum is an
unsigned long. So we must cast the result to u32 to prevent potential
sign extension and size mismatch issues.

Signed-off-by: Xiong Nandi <xndchn@gmail.com>
Acked-by: Shuah Khan <skhan@linuxfoundation.org>
Link: https://lore.kernel.org/r/20241231161539.20192-2-xndchn@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/usbip/vhci_hcd.c

index f4843ea5080c03cade2a77657701731af7dbf8b0..e70fba9f55d6a0edf3c5fde56a614dd3799406a1 100644 (file)
@@ -676,7 +676,7 @@ static void vhci_tx_urb(struct urb *urb, struct vhci_device *vdev)
 
        spin_lock_irqsave(&vdev->priv_lock, flags);
 
-       priv->seqnum = atomic_inc_return(&vhci_hcd->seqnum);
+       priv->seqnum = (u32)atomic_inc_return(&vhci_hcd->seqnum);
        if (priv->seqnum == 0xffff)
                dev_info(&urb->dev->dev, "seqnum max\n");