![]() | |||||||||||||
Messages in this thread |
On Sat, 2006-09-23 at 14:56 -0700, David Miller wrote: > From: mostrows@earthlink.net > Date: Sat, 23 Sep 2006 12:30:23 -0500 > > > __pppoe_xmit must free any skb it allocates if there is an error > > submitting the skb downstream. > > This isn't right, dev_queue_xmit() can return -ENETDOWN and still > free the SKB, so your change will cause the SKB to be freed up > twice in that case, from dev_queue_xmit(): > > rc = -ENETDOWN; > rcu_read_unlock_bh(); > > out_kfree_skb: > kfree_skb(skb); > return rc; > > dev_queue_xmit() is basically expected to consume the packet, > error or not. > > What case of calling dev_queue_xmit() did you discover that did not > kfree the SKB on error? We should fix that. On a quick scan on the > entire dev_queue_xmit() implmentation, I cannot find such a case. > I think the call path via dev->hard_start_xmit, if it fails, may result in an skb not being freed. This appears to be the case with the e100.c driver. The qdisc_restart path to dev->hard_start_xmit also appears susceptible to this. It appears that not all devices agree as to who should clean-up an skb on error. -- Michal Ostrowski <mostrows@earthlink.net> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ | ||||||||||||
| Last update: 2006-09-24 12:33 [W:0.196 / U:0.050 seconds] ©2003-2008 Jasper Spaans | |||||||||||||