mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
usb: isp1760: do not shift in uninitialized slot
Even though it is not expected, and would trigger a WARN_ON, killing a transfer in a uninitialized slot this sequence is warned by clang analyzer, twice: drivers/usb/isp1760/isp1760-hcd.c:1976:18: warning: The result of the left shift is undefined because the right operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] skip_map |= (1 << qh->slot); drivers/usb/isp1760/isp1760-hcd.c:1983:18: warning: The result of the left shift is undefined because the right operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] skip_map |= (1 << qh->slot); Only set skip map if slot is active. Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Link: https://lore.kernel.org/r/20210819180929.1327349-5-rui.silva@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5e4cd1b655
commit
7d1d3882fd
1 changed files with 11 additions and 7 deletions
|
@ -1974,16 +1974,20 @@ static void kill_transfer(struct usb_hcd *hcd, struct urb *urb,
|
|||
/* We need to forcefully reclaim the slot since some transfers never
|
||||
return, e.g. interrupt transfers and NAKed bulk transfers. */
|
||||
if (usb_pipecontrol(urb->pipe) || usb_pipebulk(urb->pipe)) {
|
||||
skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP);
|
||||
skip_map |= (1 << qh->slot);
|
||||
isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map);
|
||||
ndelay(100);
|
||||
if (qh->slot != -1) {
|
||||
skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP);
|
||||
skip_map |= (1 << qh->slot);
|
||||
isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map);
|
||||
ndelay(100);
|
||||
}
|
||||
priv->atl_slots[qh->slot].qh = NULL;
|
||||
priv->atl_slots[qh->slot].qtd = NULL;
|
||||
} else {
|
||||
skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP);
|
||||
skip_map |= (1 << qh->slot);
|
||||
isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map);
|
||||
if (qh->slot != -1) {
|
||||
skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP);
|
||||
skip_map |= (1 << qh->slot);
|
||||
isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map);
|
||||
}
|
||||
priv->int_slots[qh->slot].qh = NULL;
|
||||
priv->int_slots[qh->slot].qtd = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue