iseries_veth: Don't leak skbs in RX path
Subsystems (2)
PATCH 3/4 iseries_veth: Don't leak skbs in RX path
Hi Andrew, Jeff,
Under some strange circumstances the iseries_veth driver can leak skbs.
Fix is simply to call dev_kfree_skb() in the right place. Fix up the comment as well.
Signed-off-by Michael Ellerman <[email protected]>
--
iseries_veth.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-)
drivers/net/iseries_veth.c +11 -6
@@ -1264,13 +1264,18 @@ static void veth_receive(struct veth_lpa vlan = skb->data[9 ]; dev = veth_dev[vlan]; -if (! dev) -/* Some earlier versions of the driver sent -broadcasts down all connections, even to -lpars that weren't on the relevant vlan. -So ignore packets belonging to a vlan we're -not on. */ +if (! dev) { +/* +* Some earlier versions of the driver sent +* broadcasts down all connections, even to lpars +* that weren't on the relevant vlan. So ignore +* packets belonging to a vlan we're not on. +* We can also be here if we receive packets while +* the driver is going down, because then dev is NULL. +*/ +dev_kfree_skb_irq (skb);continue ; + } port = (struct veth_port *)dev->priv; dest = *((u64 *) skb->data) &0xFFFFFFFFFFFF0000 ;