Message ID | 1581583476-60155-2-git-send-email-chi-hsien.lin@cypress.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Kalle Valo |
Headers | show |
Series | brcmfmac: USB change series | expand |
Chi-Hsien Lin <chi-hsien.lin@cypress.com> wrote: > From: Raveendran Somu <raveendran.somu@cypress.com> > > When the control transfer gets timed out, the error status > was returned without killing that urb, this leads to using > the same urb. This issue causes the kernel crash as the same > urb is sumbitted multiple times. The fix is to kill the > urb for timeout transfer before returning error > > Signed-off-by: Raveendran Somu <raveendran.somu@cypress.com> > Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com> I assume there will be v2 based on comments. 6 patches set to Changes Requested. 11380001 [1/6] brcmfmac: Fix driver crash on USB control transfer timeout 11380003 [2/6] brcmfmac: Fix double freeing in the fmac usb data path 11380005 [3/6] brcmfmac: fix the incorrect return value in brcmf_inform_single_bss(). 11380007 [4/6] brcmfmac: increase max hanger slots from 1K to 3K in fws layer 11380009 [5/6] brcmfmac: add USB autosuspend feature support 11380011 [6/6] brcmfmac: To support printing USB console messages
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c index 575ed19e9195..10387a7f5d56 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c @@ -328,11 +328,12 @@ static int brcmf_usb_tx_ctlpkt(struct device *dev, u8 *buf, u32 len) return err; } timeout = brcmf_usb_ioctl_resp_wait(devinfo); - clear_bit(0, &devinfo->ctl_op); if (!timeout) { brcmf_err("Txctl wait timed out\n"); + usb_kill_urb(devinfo->ctl_urb); err = -EIO; } + clear_bit(0, &devinfo->ctl_op); return err; } @@ -358,11 +359,12 @@ static int brcmf_usb_rx_ctlpkt(struct device *dev, u8 *buf, u32 len) } timeout = brcmf_usb_ioctl_resp_wait(devinfo); err = devinfo->ctl_urb_status; - clear_bit(0, &devinfo->ctl_op); if (!timeout) { brcmf_err("rxctl wait timed out\n"); + usb_kill_urb(devinfo->ctl_urb); err = -EIO; } + clear_bit(0, &devinfo->ctl_op); if (!err) return devinfo->ctl_urb_actual_length; else