linux-stable/drivers/net
Jeff Kirsher 2d0bb1c1f4 e100/e1000*/igb*/ixgb*: Add missing read memory barrier
Based on patches from Sonny Rao and Milton Miller...

Combined the patches to fix up clean_tx_irq and clean_rx_irq.

The PowerPC architecture does not require loads to independent bytes
to be ordered without adding an explicit barrier.

In ixgbe_clean_rx_irq we load the status bit then load the packet data.
With packet split disabled if these loads go out of order we get a
stale packet, but we will notice the bad sequence numbers and drop it.

The problem occurs with packet split enabled where the TCP/IP header
and data are in different descriptors. If the reads go out of order
we may have data that doesn't match the TCP/IP header. Since we use
hardware checksumming this bad data is never verified and it makes it
all the way to the application.

This bug was found during stress testing and adding this barrier has
been shown to fix it.  The bug can manifest as a data integrity issue
(bad payload data) or as a BUG in skb_pull().

This was a nasty bug to hunt down, if people agree with the fix I think
it's a candidate for stable.

Previously Submitted to e1000-devel only for ixgbe

http://marc.info/?l=e1000-devel&m=126593062701537&w=3

We've now seen this problem hit with other device drivers (e1000e mostly)
So I'm resubmitting with fixes for other Intel Device Drivers with
similar issues.

CC: Milton Miller <miltonm@bga.com>
CC: Anton Blanchard <anton@samba.org>
CC: Sonny Rao <sonnyrao@us.ibm.com>
CC: stable <stable@kernel.org>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-08-08 20:02:45 -07:00
..
appletalk
arcnet arcnet: fix signed bug in probe function 2010-07-18 15:07:15 -07:00
arm net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
atl1c
atl1e
atlx
benet Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
bnx2x net: bnx2x_cmn.c needs net/ip6_checksum.h for csum_ipv6_magic 2010-07-28 22:20:34 -07:00
bonding bonding: prevent sysfs from allowing arp monitoring with alb/tlb 2010-07-30 23:27:57 -07:00
caif caif: handle snprintf() return 2010-07-26 21:05:03 -07:00
can can: Add driver for esd CAN-USB/2 device 2010-08-03 16:37:58 -07:00
chelsio
cris eth_v10: Removing dead ETRAX_NETWORK_RED_ON_NO_CONNECTION 2010-07-14 13:41:53 -07:00
cxgb3 cxgb3: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:02 -07:00
cxgb4 cxgb4: update driver version 2010-08-02 16:26:44 -07:00
cxgb4vf cxgb4vf: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:02 -07:00
e1000 e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
e1000e e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ehea ehea: Allocate stats buffer with GFP_KERNEL 2010-07-01 22:45:52 -07:00
enic drivers/net/enic: Use %pUB to format a UUID 2010-08-04 16:18:04 -07:00
fs_enet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-08-04 11:47:58 -07:00
hamradio
ibm_newemac
igb e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
igbvf e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
irda drivers/net/irda: use for_each_pci_dev() 2010-07-21 14:44:28 -07:00
ixgb e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixgbe e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixgbevf e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixp2000
mlx4 drivers/net/mlx4: Use %pV, pr_<level>, printk_once 2010-07-15 19:05:17 -07:00
myri10ge ethtool: Change ethtool_op_set_flags to validate flags 2010-06-30 14:09:35 -07:00
netxen netxen: protect tx timeout recovery by rtnl lock 2010-08-07 23:05:23 -07:00
octeon net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
pcmcia axnet_cs: use spin_lock_irqsave in ax_interrupt 2010-07-12 20:13:02 -07:00
phy Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-08-04 11:47:58 -07:00
qlcnic qlcnic: fix diag resource allocation 2010-07-25 16:32:41 -07:00
qlge drivers/net/qlge: Use pr_<level>, shrink text a bit 2010-07-21 14:44:18 -07:00
sfc sfc: Remove unused field left from mis-merge 2010-07-08 23:12:29 -07:00
skfp
stmmac stmmac: fix automatic PAD/FCS stripping 2010-07-27 20:43:50 -07:00
tokenring
tulip Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
usb usbnet: remove noisy and hardly useful printk 2010-08-05 13:21:24 -07:00
vmxnet3 net-next: Fix an overflow bug in vmxnet3 Tx descriptor 2010-07-25 17:06:52 -07:00
vxge drivers/net/vxge/vxge-main.c: Use pr_<level> and netdev_<level> 2010-07-30 23:27:57 -07:00
wan drivers/net/wan/farsync.c: Use standard pr_<level> 2010-08-02 16:01:35 -07:00
wimax Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
wireless Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2010-08-06 13:30:43 -07:00
3c59x.c 3c59x: Add ethtool WOL support 2010-07-25 16:48:44 -07:00
3c501.c
3c501.h
3c503.c
3c503.h
3c505.c
3c505.h
3c507.c
3c509.c
3c515.c
3c523.c
3c523.h
3c527.c
3c527.h
7990.c
7990.h
8139cp.c
8139too.c
8390.c
8390.h
8390p.c
82596.c drivers/net/82596.c: fix warning 2010-07-19 15:27:13 -07:00
a2065.c
a2065.h
ac3200.c ac3200: fix error path 2010-07-11 18:15:08 -07:00
acenic.c
acenic.h
amd8111e.c
amd8111e.h
apne.c
ariadne.c
ariadne.h
at1700.c at1700: fix double free_irq 2010-07-11 18:15:08 -07:00
atarilance.c
atp.c
atp.h
au1000_eth.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
au1000_eth.h
ax88796.c ax88796: free irq on error 2010-07-08 23:42:40 -07:00
b44.c b44: remove unused dma_desc_align_mask 2010-07-07 18:24:29 -07:00
b44.h
bcm63xx_enet.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
bcm63xx_enet.h
bfin_mac.c
bfin_mac.h
bmac.c
bmac.h
bnx2.c bnx2: Update version to 2.0.17. 2010-07-19 20:30:07 -07:00
bnx2.h bnx2: Call pci_enable_msix() with actual number of vectors. 2010-07-19 20:30:06 -07:00
bnx2_fw.h
bsd_comp.c
cassini.c cassini: Removing dead CASSINI_NAPI 2010-07-14 13:36:18 -07:00
cassini.h cassini: Removing dead CASSINI_QGE_DEBUG 2010-07-14 12:18:31 -07:00
cnic.c bnx2x: Create separate folder for bnx2x driver 2010-07-27 20:35:39 -07:00
cnic.h cnic: Unify kcq allocation for all devices. 2010-06-25 20:37:19 -07:00
cnic_defs.h
cnic_if.h cnic: Update version to 2.1.3. 2010-06-25 20:37:21 -07:00
cpmac.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
cs89x0.c net: Removing dead ARCH_PNX010X 2010-07-19 13:32:57 -07:00
cs89x0.h cs89x0: Removing dead SH_HICOSH4 2010-07-14 13:40:36 -07:00
davinci_emac.c davinci_emac: Fix use after free in davinci_emac_remove 2010-08-04 16:18:03 -07:00
de600.c
de600.h
de620.c
de620.h
declance.c NET: declance: Fix section mismatches 2010-07-26 19:08:14 +01:00
defxx.c
defxx.h
depca.c depca: fix leaks in depca_module_init() 2010-07-12 20:21:40 -07:00
depca.h
dl2k.c
dl2k.h
dm9000.c
dm9000.h
dnet.c dnet: fixup error handling in initialization 2010-07-30 23:27:58 -07:00
dnet.h
dummy.c
e100.c e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
e2100.c
eepro.c
eexpress.c
eexpress.h
enc28j60.c
enc28j60_hw.h
epic100.c epic100: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:14 -07:00
eql.c
es3210.c
eth16i.c eth16i: fix memory leak 2010-07-14 17:57:19 -07:00
ethoc.c ethoc: add devinit/devexit section initializers 2010-07-26 18:45:05 -07:00
ewrk3.c
ewrk3.h
fealnx.c fealnx: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:13 -07:00
fec.c net/fec: restore interrupt mask after software-reset in fec_stop() 2010-07-22 14:14:46 -07:00
fec.h
fec_mpc52xx.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
fec_mpc52xx.h
fec_mpc52xx_phy.c
forcedeth.c forcedeth: Fix different hardware statistics versions. 2010-07-25 21:54:28 -07:00
fsl_pq_mdio.c
fsl_pq_mdio.h
gianfar.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
gianfar.h gianfar: Implement workaround for eTSEC-A002 erratum 2010-06-30 11:35:43 -07:00
gianfar_ethtool.c
gianfar_sysfs.c
greth.c
greth.h
hamachi.c hamachi: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:15 -07:00
hp-plus.c
hp.c
hp100.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
hp100.h
hplance.c
hplance.h
hydra.c
ibmlana.c
ibmlana.h
ibmveth.c ibmveth: lost IRQ while closing/opening device leads to service loss 2010-07-16 13:03:23 -07:00
ibmveth.h
ifb.c
ioc3-eth.c ioc3-eth: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:12 -07:00
ipg.c
ipg.h
iseries_veth.c
jazzsonic.c jazzsonic: free irq if sonic_open() fails 2010-07-12 20:21:44 -07:00
jme.c
jme.h
Kconfig net: ks8842 depends on DMA_ENGINE 2010-07-30 22:10:01 -07:00
korina.c
ks8842.c ks8842: Fix warnings on 64-bit. 2010-07-27 22:24:37 -07:00
ks8851.c
ks8851.h
ks8851_mll.c
ksz884x.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
lance.c lance: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:16 -07:00
lasi_82596.c
lib8390.c
lib82596.c lasi82596: fix netdev_mc_count conversion 2010-06-21 13:50:18 -07:00
LICENSE.SRC
ll_temac.h
ll_temac_main.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
ll_temac_mdio.c
lne390.c
loopback.c net: fix 64 bit counters on 32 bit arches 2010-07-07 14:58:56 -07:00
lp486e.c
mac89x0.c mac89x0: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:18 -07:00
mac8390.c
macb.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
macb.h
mace.c
mace.h
macmace.c
macsonic.c macsonic: free irqs if sonic_open() fails 2010-07-12 20:21:44 -07:00
macvlan.c macvlan: Fix rx counters update in macvlan_handle_frame() 2010-07-27 21:02:42 -07:00
macvtap.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-27 21:01:35 -07:00
Makefile bnx2x: Create separate folder for bnx2x driver 2010-07-27 20:35:39 -07:00
mdio.c
meth.c
meth.h
mii.c
mipsnet.c NET: MIPSsim: Fix modpost warning. 2010-06-21 13:40:25 -07:00
mv643xx_eth.c mv643xx_eth: potential null dereference 2010-07-23 13:05:12 -07:00
mvme147.c
myri_sbus.c
myri_sbus.h
natsemi.c natsemi: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:17 -07:00
ne-h8300.c
ne.c net/ne: fix memory leak in ne_drv_probe() 2010-07-05 20:08:05 -07:00
ne2.c
ne2k-pci.c
ne3210.c
netconsole.c
netx-eth.c
ni52.c ni52: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:19 -07:00
ni52.h
ni65.c
ni65.h
ni5010.c
ni5010.h
niu.c niu: BUG on inability to find page in rx page hashes. 2010-07-07 18:20:30 -07:00
niu.h
ns83820.c ns83820: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:18 -07:00
pasemi_mac.c
pasemi_mac.h
pasemi_mac_ethtool.c
pci-skeleton.c
pcnet32.c
plip.c
ppp_async.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
ppp_deflate.c
ppp_generic.c net: autoconvert trivial BKL users to private mutex 2010-07-12 20:21:47 -07:00
ppp_mppe.c
ppp_mppe.h
ppp_synctty.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
pppoe.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
pppox.c
ps3_gelic_net.c
ps3_gelic_net.h
ps3_gelic_wireless.c
ps3_gelic_wireless.h
qla3xxx.c drivers/net/qla3xxx.c: Checkpatch cleanups 2010-07-26 13:15:21 -07:00
qla3xxx.h
r6040.c r6040: Fix args to phy_mii_ioctl(). 2010-07-21 21:10:49 -07:00
r8169.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-20 18:25:24 -07:00
rionet.c
rrunner.c
rrunner.h
s2io-regs.h vxge: Update copyright information 2010-07-15 20:46:22 -07:00
s2io.c net: s2io: fix buffer overflow 2010-07-23 13:05:13 -07:00
s2io.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-27 21:01:35 -07:00
s6gmac.c
sb1000.c
sb1250-mac.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
sc92031.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
sh_eth.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
sh_eth.h
sis190.c
sis900.c
sis900.h
skge.c
skge.h
sky2.c sky2: Code style fixes 2010-07-30 23:59:04 -07:00
sky2.h
slhc.c
slip.c
slip.h
smc-mca.c
smc-ultra.c
smc-ultra32.c
smc91x.c
smc91x.h
smc911x.c
smc911x.h
smc9194.c
smc9194.h
smsc911x.c smsc911x: Add spinlocks around registers access 2010-07-19 13:36:21 -07:00
smsc911x.h
smsc9420.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
smsc9420.h
sni_82596.c
sonic.c
sonic.h
Space.c net: Removing dead {AR,WAVE}LAN 2010-07-14 12:17:35 -07:00
spider_net.c
spider_net.h
spider_net_ethtool.c
starfire.c starfire: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:15 -07:00
stnic.c
sun3_82586.c sun3_82586: Use the instance of net_device_stats from net_device. 2010-07-05 19:41:11 -07:00
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c
sungem.c
sungem.h
sungem_phy.c
sungem_phy.h
sunhme.c
sunhme.h
sunlance.c
sunqe.c
sunqe.h
sunvnet.c
sunvnet.h
tc35815.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
tehuti.c
tehuti.h
tg3.c tg3: Update version to 3.113 2010-08-02 15:46:33 -07:00
tg3.h tg3: Migrate tg3_flags to phy_flags 2010-08-02 15:46:33 -07:00
tlan.c
tlan.h
tsi108_eth.c
tsi108_eth.h
tun.c tun: keep link (carrier) state up to date 2010-07-30 22:06:41 -07:00
typhoon.c
typhoon.h
ucc_geth.c ucc_geth: fix UCC device number in debug message 2010-07-30 22:08:50 -07:00
ucc_geth.h
ucc_geth_ethtool.c
veth.c
via-rhine.c
via-velocity.c via-velocity: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:03 -07:00
via-velocity.h
virtio_net.c virtio_net: implements ethtool_ops.get_drvinfo 2010-08-04 21:53:17 -07:00
wd.c wd: fix memory leak 2010-07-14 17:53:18 -07:00
xen-netfront.c
xilinx_emaclite.c
xtsonic.c xtsonic: free irq if sonic_open() fails 2010-07-12 20:21:45 -07:00
yellowfin.c
znet.c
zorro8390.c