summaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorNiklas Neronin <niklas.neronin@linux.intel.com>2024-04-29 17:02:32 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-05-01 08:47:14 +0200
commit5adc1cc038f4446b11dd260e0a848fdeaac12306 (patch)
tree1499e5033bc3ad9cfda98d7cd50d0ef8e43f2c4e /drivers/usb
parent577c867cf8f638b05f5676ed06a1ffe9afbba896 (diff)
downloadlinux-5adc1cc038f4446b11dd260e0a848fdeaac12306.tar.gz
linux-5adc1cc038f4446b11dd260e0a848fdeaac12306.tar.bz2
linux-5adc1cc038f4446b11dd260e0a848fdeaac12306.zip
usb: xhci: address off-by-one in xhci_num_trbs_free()
Reduce the number of do-while loops by 1. The number of loops should be number of segment + 1, the +1 is in case deq and enq are on the same segment. But due to the use of a do-while loop, the expression is evaluated after executing the loop, thus the loop is executed 1 extra time. Changing the do-while loop expression from "<=" to "<", reduces the loop amount by 1. The expression "<=" would also work if it was a while loop instead of a do-while loop. Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20240429140245.3955523-6-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/host/xhci-ring.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 3cc5c70d54c7..0a7c70ae5edc 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -308,7 +308,7 @@ static unsigned int xhci_num_trbs_free(struct xhci_hcd *xhci, struct xhci_ring *
free += last_on_seg - enq;
enq_seg = enq_seg->next;
enq = enq_seg->trbs;
- } while (i++ <= ring->num_segs);
+ } while (i++ < ring->num_segs);
return free;
}