Oops. I forgot to put commentary on this one. See below. On Fri, Apr 21, 2017 at 11:11:05PM +0300, Dan Carpenter wrote: > Hello Ming Lei, > > The patch e6c6d33cb7d1: "ath9k-htc:respect usb buffer cacheline > alignment in reg in path" from Apr 13, 2010, leads to the following > static checker warning: > > drivers/net/wireless/ath/ath9k/hif_usb.c:745 ath9k_hif_usb_reg_in_cb() > warn: 'skb' was already freed. > > drivers/net/wireless/ath/ath9k/hif_usb.c > 712 if (likely(urb->actual_length != 0)) { > 713 skb_put(skb, urb->actual_length); > 714 > 715 /* Process the command first */ > 716 ath9k_htc_rx_msg(hif_dev->htc_handle, skb, ^^^ Pretty sure "skb" gets freed here. > 717 skb->len, USB_REG_IN_PIPE); > 718 > 719 > 720 nskb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_ATOMIC); > 721 if (!nskb) { > 722 dev_err(&hif_dev->udev->dev, > 723 "ath9k_htc: REG_IN memory allocation failure\n"); > 724 urb->context = NULL; > 725 return; > 726 } > 727 > 728 usb_fill_int_urb(urb, hif_dev->udev, > 729 usb_rcvintpipe(hif_dev->udev, > 730 USB_REG_IN_PIPE), > 731 nskb->data, MAX_REG_IN_BUF_SIZE, > 732 ath9k_hif_usb_reg_in_cb, nskb, 1); > 733 } > 734 > 735 resubmit: > 736 usb_anchor_urb(urb, &hif_dev->reg_in_submitted); > 737 ret = usb_submit_urb(urb, GFP_ATOMIC); > 738 if (ret) { > 739 usb_unanchor_urb(urb); > 740 goto free; ^^^^^^^^^ Assume we hit this goto. > 741 } > 742 > 743 return; > 744 free: > 745 kfree_skb(skb); ^^^ Double free. > 746 urb->context = NULL; > 747 } > regards, dan carpenter