On Monday 19 January 2009 19:15:09 Artur Skawina wrote: > Christian Lamparter wrote: > > On Monday 19 January 2009 00:27:02 Artur Skawina wrote: > >> Artur Skawina wrote: > >>> didn't trigger anything here, just the usual: > >>> > >>> BUG kmalloc-4096: Poison overwritten > > >> This is almost 100% reproducible; sometimes the machine freezes instead. > > Here's an interesting sequence: > > 1) a TX urb is submitted. > 2) p54u_rx_cb() => p54_rx_frame_sent(), which does kfree_skb( the_skb_in_(1) ). > 3) p54u_tx_cb() for (1) is called with the same, now freed, skb. kaboom. > > IOW the skb is freed before the usb completion runs. Well, the sequence should be: 1) p54_tx gets called 1.1) one IRQ urb is submitted 1.2) one BULK urb is submitted 2) the firmware acks that it got the urbs 2.1) p54u_tx_cb is called for the IRQ urb. which frees the small buffer 2.2) p54u_tx_cb is called for the BULK urb. which only removes the net2280_tx_hdr from the skb. [time passes] 3) firmware is finished sending. 3.1) p54u_rx_cb gets called => p54_rx_frame_sent passed the feedback to mac80211 > Somehow i don't think this is the reason for the corruption, but it certainly > seems to be responsible for some, if not all, of the crashes/panics. dunno... we should see a bit more fallout, because skb_pull changes skb->data and skb->len. Regards, Chr -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html