1
linux/drivers/net
Jiri Slaby 3a0f2c8718 Ath5k: fix memory corruption
When signal is noisy, hardware can use all RX buffers and since the last
entry in the list is self-linked, it overwrites the entry until we link
new buffers.

Ensure that we don't free this last one until we are 100% sure that it
is not used by the hardware anymore to not cause memory curruption as
can be seen below.

This is done by checking next buffer in the list. Even after that we
know that the hardware refetched the new link and proceeded further
(the next buffer is ready) we can finally free the overwritten buffer.

We discard it since the status in its descriptor is overwritten (OR-ed
by new status) too.

=============================================================================
BUG kmalloc-4096: Poison overwritten
-----------------------------------------------------------------------------

INFO: 0xffff810067419060-0xffff810067419667. First byte 0x8 instead of 0x6b
INFO: Allocated in dev_alloc_skb+0x18/0x30 age=1118 cpu=1 pid=0
INFO: Freed in skb_release_data+0x85/0xd0 age=1105 cpu=1 pid=3718
INFO: Slab 0xffffe200019d0600 objects=7 used=0 fp=0xffff810067419048 flags=0x40000000000020c3
INFO: Object 0xffff810067419048 @offset=4168 fp=0xffff81006741c120

Bytes b4 0xffff810067419038:  4f 0b 02 00 01 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a O.......ZZZZZZZZ
  Object 0xffff810067419048:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk
  Object 0xffff810067419058:  6b 6b 6b 6b 6b 6b 6b 6b 08 42 30 00 00 0b 6b 80 kkkkkkkk.B0...k.
  Object 0xffff810067419068:  f0 5d 00 4f 62 08 a3 64 00 0c 42 16 52 e4 f0 5a 360].Ob.243d..B.R344360Z
  Object 0xffff810067419078:  68 81 00 00 7b a5 b4 be 7d 3b 8f 53 cd d5 de 12 h...{245264276};.S315325336.
  Object 0xffff810067419088:  96 10 0b 89 48 54 23 41 0f 4e 2d b9 37 c3 cb 29 ....HT#A.N-2717303313)
  Object 0xffff810067419098:  d1 e0 de 14 8a 57 2a cc 3b 44 0d 78 7a 19 12 15 321340336..W*314;D.xz...
  Object 0xffff8100674190a8:  a9 ec d4 35 a8 10 ec 8c 40 a7 06 0a 51 a7 48 bb 2513543245250.354.@247..Q247H273
  Object 0xffff8100674190b8:  3e cf a1 c7 38 60 63 3f 51 15 c7 20 eb ba 65 30 >ϡ3078`c?Q.307.353272e0
 Redzone 0xffff81006741a048:  bb bb bb bb bb bb bb bb                         273273273273273273273273
 Padding 0xffff81006741a088:  5a 5a 5a 5a 5a 5a 5a 5a                         ZZZZZZZZ
Pid: 3297, comm: ath5k_pci Not tainted 2.6.26-rc8-mm1_64 #427

Call Trace:
 [<ffffffff802a7306>] print_trailer+0xf6/0x150
 [<ffffffff802a7485>] check_bytes_and_report+0x125/0x180
 [<ffffffff802a75dc>] check_object+0xac/0x260
 [<ffffffff802a9308>] __slab_alloc+0x368/0x6d0
 [<ffffffff80544f82>] ? wireless_send_event+0x142/0x310
 [<ffffffff804b1bd4>] ? __alloc_skb+0x44/0x150
 [<ffffffff80544f82>] ? wireless_send_event+0x142/0x310
 [<ffffffff802aa853>] __kmalloc_track_caller+0xc3/0xf0
 [<ffffffff804b1bfe>] __alloc_skb+0x6e/0x150
[... stack snipped]

FIX kmalloc-4096: Restoring 0xffff810067419060-0xffff810067419667=0x6b

FIX kmalloc-4096: Marking all objects used

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Acked-by: Nick Kossifidis <mickflemm@gmail.com>
Cc: Luis R. Rodriguez <mcgrof@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2008-07-29 16:36:25 -04:00
..
appletalk
arcnet
arm dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
atl1e [netdrvr] atl1d: fix !CONFIG_PM build 2008-07-22 21:17:38 -04:00
atlx atl1: Do not wake queue before queue has been started. 2008-07-21 08:28:37 -07:00
bonding netdev: Handle ->addr_list_lock just like ->_xmit_lock for lockdep. 2008-07-22 14:16:42 -07:00
can
chelsio cxgb: delete non NAPI code from the driver. 2008-07-11 01:11:42 -04:00
cris
cxgb3 dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
e1000 e1000: make ioport free 2008-07-22 19:39:14 -04:00
e1000e dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
ehea ehea: Access iph->tot_len with correct endianness 2008-07-04 08:15:28 -04:00
fs_enet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-22 19:09:51 -07:00
hamradio netdev: Handle ->addr_list_lock just like ->_xmit_lock for lockdep. 2008-07-22 14:16:42 -07:00
ibm_newemac Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-07-18 02:39:39 -07:00
igb net: igb_main.c fix sparse integer as NULL pointer warning 2008-07-22 17:54:12 -04:00
irda Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-20 17:43:29 -07:00
ixgb netdrv intel: always enable VLAN filtering except in promiscous mode 2008-07-16 20:16:14 -07:00
ixgbe ixgbe: remove device ID for unsupported device 2008-07-22 19:31:00 -04:00
ixp2000
mlx4 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2008-07-26 20:40:36 -07:00
myri10ge myri10ge: use ioremap_wc 2008-07-22 16:09:13 -04:00
netxen netxen: Needs to include linux/vmalloc.h 2008-07-22 18:29:10 -07:00
pcmcia
phy net/phy: Fix 88e1111 copper/fiber selection in RGMII mode 2008-07-22 17:59:12 -04:00
sfc dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
skfp
tokenring Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-07-18 02:39:39 -07:00
tulip de4x5: Remove developer debug feature about set/clear promisc 2008-07-22 16:09:09 -04:00
usb rndis_host: support WM6 devices as modems 2008-07-22 19:45:49 -04:00
wan device create: net: convert device_create to device_create_drvdata 2008-07-21 21:54:44 -07:00
wireless Ath5k: fix memory corruption 2008-07-29 16:36:25 -04:00
3c59x.c 3c59x: handle pci_name() being const 2008-07-21 21:55:03 -07:00
3c501.c
3c501.h
3c503.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
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 [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
8139too.c 8139too: Fall back to PIO when MMIO fails. 2008-07-22 17:59:30 -04:00
8390.c
8390.h 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
8390p.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
82596.c
a2065.c
a2065.h
ac3200.c
acenic_firmware.h
acenic.c
acenic.h
amd8111e.c amd8111e: delete non NAPI code from the driver. 2008-07-07 22:40:58 -07:00
amd8111e.h
apne.c
ariadne.c ariadne: use netstats in net_device structure 2008-07-20 17:24:38 -07:00
ariadne.h
at1700.c
atarilance.c
atp.c
atp.h
au1000_eth.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
au1000_eth.h
ax88796.c
b44.c
b44.h
bfin_mac.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
bfin_mac.h
bmac.c
bmac.h
bnx2_fw2.h bnx2: Update TPAT firmware 2008-07-18 17:54:17 -07:00
bnx2_fw.h
bnx2.c bnx2: Update version to 1.7.9. 2008-07-18 17:58:57 -07:00
bnx2.h bnx2: Add TX multiqueue support. 2008-07-18 17:55:11 -07:00
bnx2x_fw_defs.h
bnx2x_hsi.h
bnx2x_init_values.h
bnx2x_init.h
bnx2x_link.c
bnx2x_link.h
bnx2x_main.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-26 20:17:56 -07:00
bnx2x_reg.h
bnx2x.h
bsd_comp.c
cassini.c mm: speculative page references 2008-07-26 12:00:06 -07:00
cassini.h
cpmac.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
cs89x0.c
cs89x0.h
de600.c
de600.h
de620.c
de620.h
declance.c
defxx.c
defxx.h
depca.c
depca.h
dl2k.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
dl2k.h
dm9000.c DM9000: Remove magic numbers 2008-07-22 17:54:07 -04:00
dm9000.h
dummy.c
e100.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
e2100.c
eepro100.c
eepro.c
eexpress.c
eexpress.h
enc28j60_hw.h
enc28j60.c
epic100.c
eql.c
es3210.c
eth16i.c
ewrk3.c
ewrk3.h
fealnx.c [netdrvr] fealnx: clean up nasty mess of arch ifdefs 2008-06-28 10:23:37 -04:00
fec_mpc52xx_phy.c
fec_mpc52xx.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
fec_mpc52xx.h
fec.c m68knommu: remove last use of CONFIG_FADS and CONFIG_RPXCLASSIC 2008-07-23 15:11:29 +10:00
fec.h
forcedeth.c netdev: Add netdev->addr_list_lock protection. 2008-07-15 00:13:44 -07:00
gianfar_ethtool.c gianfar: Add magic packet and suspend/resume support. 2008-07-16 17:57:47 -05:00
gianfar_mii.c
gianfar_mii.h
gianfar_sysfs.c
gianfar.c Merge commit 'origin/master' 2008-07-22 17:12:37 +10:00
gianfar.h Merge commit 'origin/master' 2008-07-22 17:12:37 +10:00
hamachi.c
hp100.c
hp100.h
hp-plus.c net 8390p: fix interface usage 2008-07-22 17:50:44 -04:00
hp.c net 8390p: fix interface usage 2008-07-22 17:50:44 -04:00
hplance.c
hplance.h
hydra.c
ibmlana.c
ibmlana.h
ibmveth.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
ibmveth.h ibmveth: enable driver for CMO 2008-07-25 15:44:44 +10:00
ifb.c pkt_sched: Kill netdev_queue lock. 2008-07-17 19:21:30 -07:00
ioc3-eth.c
ipg.c ipg: run-time configurable jumbo frame support 2008-07-04 08:46:54 -04:00
ipg.h ipg: run-time configurable jumbo frame support 2008-07-04 08:46:54 -04:00
isa-skeleton.c
iseries_veth.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
jazzsonic.c
Kconfig e1000: delete non NAPI code from the driver 2008-07-22 19:39:11 -04:00
korina.c
lance.c
lasi_82596.c
lib8390.c
lib82596.c
LICENSE.SRC
lne390.c
loopback.c netdev: netdev_priv() can now be sane again. 2008-07-17 19:21:09 -07:00
lp486e.c
mac89x0.c
mac8390.c
macb.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
macb.h
mace.c
mace.h
macmace.c
macsonic.c
macvlan.c netdev: Handle ->addr_list_lock just like ->_xmit_lock for lockdep. 2008-07-22 14:16:42 -07:00
Makefile atl1e: Atheros L1E Gigabit Ethernet driver 2008-07-22 19:31:04 -04:00
meth.c Fix typo in meth driver 2008-07-22 19:34:21 -04:00
meth.h
mii.c
mipsnet.c
mv643xx_eth.c mv643xx_eth: fix NETPOLL build 2008-07-22 19:56:37 -04:00
mvme147.c
myri_code.h
myri_sbus.c
myri_sbus.h
natsemi.c
ne2.c net 8390p: fix interface usage 2008-07-22 17:50:44 -04:00
ne2k-pci.c
ne3210.c
ne-h8300.c
ne.c net 8390p: fix interface usage 2008-07-22 17:50:44 -04:00
netconsole.c configfs: Allow ->make_item() and ->make_group() to return detailed errors. 2008-07-17 15:21:29 -07:00
netx-eth.c
ni52.c
ni52.h
ni65.c
ni65.h
ni5010.c
ni5010.h
niu.c niu: Add TX multiqueue support. 2008-07-17 19:21:17 -07:00
niu.h
ns83820.c
pasemi_mac_ethtool.c
pasemi_mac.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
pasemi_mac.h
pci-skeleton.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
pcnet32.c
plip.c
ppp_async.c tty: Ldisc revamp 2008-07-20 17:12:34 -07:00
ppp_deflate.c
ppp_generic.c [PATCH] f_count may wrap around 2008-07-26 20:53:40 -04:00
ppp_mppe.c
ppp_mppe.h
ppp_synctty.c tty: Ldisc revamp 2008-07-20 17:12:34 -07:00
pppoe.c
pppol2tp.c
pppox.c
ps3_gelic_net.c
ps3_gelic_net.h
ps3_gelic_wireless.c
ps3_gelic_wireless.h
qla3xxx.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
qla3xxx.h
r6040.c r6040: rework init_one error handling 2008-07-22 20:00:01 -04:00
r8169.c r8169: avoid thrashing PCI conf space above RTL_GIGA_MAC_VER_06 2008-07-20 19:49:30 +02:00
rionet.c
rrunner.c
rrunner.h
s2io-regs.h
s2io.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
s2io.h S2io: Enable msi-x link interrupts. 2008-07-11 01:11:40 -04:00
sb1000.c
sb1250-mac.c
sc92031.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
sh_eth.c netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328 2008-07-22 15:41:24 -07:00
sh_eth.h net: sh_eth: Fix compile error sh_eth 2008-06-28 10:23:33 -04:00
sis190.c
sis900.c
sis900.h
skge.c
skge.h
sky2.c sky2: don't stop queue on shutdown 2008-07-22 21:53:40 -07:00
sky2.h
slhc.c
slip.c tty: Ldisc revamp 2008-07-20 17:12:34 -07:00
slip.h
smc91x.c [NET] smc91x: prepare SMC_USE_PXA_DMA to be specified in platform data 2008-07-12 21:52:41 +01:00
smc91x.h [ARM] pxa: make littleton to use the new smc91x platform data 2008-07-12 21:52:41 +01:00
smc911x.c
smc911x.h
smc9194.c
smc9194.h
smc-mca.c
smc-ultra32.c
smc-ultra.c
sni_82596.c
sonic.c
sonic.h
Space.c
spider_net_ethtool.c
spider_net.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
spider_net.h
starfire_firmware.h
starfire_firmware.pl
starfire.c starfire: delete non NAPI code from the driver. 2008-07-07 22:40:42 -07:00
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c
sungem_phy.c
sungem_phy.h
sungem.c
sungem.h
sunhme.c sunhme: Remove stop/wake TX queue calls in set-multicast-list handler. 2008-07-21 08:34:49 -07:00
sunhme.h
sunlance.c
sunqe.c
sunqe.h
sunvnet.c
sunvnet.h
tc35815.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
tehuti_fw.h
tehuti.c netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
tehuti.h netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
tg3.c
tg3.h
tlan.c
tlan.h
tsi108_eth.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
tsi108_eth.h
tun.c net: tun.c fix cast 2008-07-22 17:54:17 -04:00
typhoon-firmware.h
typhoon.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
typhoon.h
ucc_geth_ethtool.c
ucc_geth_mii.c drivers/net: Use linux/of_{device,platform}.h instead of asm 2008-06-30 22:30:36 +10:00
ucc_geth_mii.h
ucc_geth.c ucc_geth: do not touch net queue in adjust_link phylib callback 2008-07-21 08:30:36 -07:00
ucc_geth.h
veth.c
via-rhine.c via-rhine: delete non NAPI code from the driver. 2008-07-11 01:11:43 -04:00
via-velocity.c via-velocity: add velocity_set_rxbufsize helper 2008-07-11 01:10:15 -04:00
via-velocity.h via-velocity: remove the bounce buffers 2008-07-11 01:10:13 -04:00
virtio_net.c virtio: Recycle unused recv buffer pages for large skbs in net driver 2008-07-25 12:06:02 +10:00
wd.c
xen-netfront.c xen-netfront: fix xennet_release_tx_bufs() 2008-07-16 10:55:36 +02:00
yellowfin.c
znet.c
zorro8390.c