Messages in this thread | | | Date | Thu, 7 Jan 2010 18:56:10 +0100 | From | Jarek Poplawski <> | Subject | Re: [PATCH] af_packet: Don't use skb after dev_queue_xmit() |
| |
On Thu, Jan 07, 2010 at 10:03:51AM -0500, Michael Breuer wrote: > On 1/7/2010 3:21 AM, Jarek Poplawski wrote: > >On Thu, Jan 07, 2010 at 02:55:20AM -0500, Michael Breuer wrote: > >>Unless I misread the code, I think that in some cases e skb is actually > >>freed if the cfq (among others perhaps) scheduler returns an error on > >>enqueue (flow control perhaps). Thus with alternative 1, it is possible > >>that the skb is acted upon after being freed - this would be consistent > >>with the DMAR errors I saw. > >I can't see your point: could you give some scenario? > > > >Jarek P. > With NET_CLS_ACT set, net_dev_enqueue can return an error after > freeing the skb. Alternative 1 disregards the error and assumes the > skb is still valid. The original code and alternative 2 exit the > loop assuming the skb has been freed.
Not exactly: alternative 1 disregards the error, and tries to send next skbs if the message was longer. After consuming all the message it returns without err code (at least wrt. dev_queue_xmit). This is quite often practice to skip dev_queue_xmit() return (try to grep in net\). It should never touch any part of an earlier sent skb.
Jarek P.
| |