lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <1268725224.2824.22.camel@edumazet-laptop> Date: Tue, 16 Mar 2010 08:40:24 +0100 From: Eric Dumazet <eric.dumazet@...il.com> To: cooldavid@...ldavid.org Cc: David Miller <davem@...emloft.net>, chavey@...gle.com, ethanhsiao@...cron.com, netdev@...r.kernel.org Subject: Re: [PATCH v2.6.33 2/2] jme: Adding lock to protect vlgrp structure. Le mardi 16 mars 2010 à 15:15 +0800, Guo-Fu Tseng a écrit : > On Mon, 15 Mar 2010 15:53:50 -0700 (PDT), David Miller wrote > > From: "Guo-Fu Tseng" <cooldavid@...ldavid.org> > > Date: Tue, 16 Mar 2010 03:13:33 +0800 > > > > > The vlan_rx_register is called through ioctl. > > > And the packet feeding is called in the tasklet. > > > I see no lock in register_vlan_dev(), register_vlan_device(), and vlan_ioctl_handler() > > > which is related to the vlan_hwaccel_receive_skb(), vlan_hwaccel_rx(). > > > > > > It prevents the vlgrp pointer be modified while trying to feed the packet. > > > > This is not how you fix this. Adding a new lock to your hot code > > path of packet receiving is the last thing you should be doing. > > > > Instead, do what other drivers do, take down the device and bring it > > back up again when changing the ->vlgrp pointer. > > > > See drivers/net/tg3.c:tg3_vlan_rx_register() for an example. > I see. I'll work on it. Then if driver is NAPI enabled, another possibility would be to rely on RCU, since vgrp are already freed after a RCU grace period. Completely untested patch, for ease of discussion diff --git a/drivers/net/jme.c b/drivers/net/jme.c index 0f31497..e19de8d 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c @@ -942,8 +942,10 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) skb->ip_summed = CHECKSUM_NONE; if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) { - if (jme->vlgrp) { - jme->jme_vlan_rx(skb, jme->vlgrp, + struct vlan_group *grp = rcu_dereference(jme->vlgrp); + + if (grp) { + jme->jme_vlan_rx(skb, grp, le16_to_cpu(rxdesc->descwb.vlan)); NET_STAT(jme).rx_bytes += 4; } -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists