linux/net/core
David S. Miller 69cc64d8d9 [NDISC]: Fix race in generic address resolution
Frank Blaschka provided the bug report and the initial suggested fix
for this bug.  He also validated this version of this fix.

The problem is that the access to neigh->arp_queue is inconsistent, we
grab references when dropping the lock lock to call
neigh->ops->solicit() but this does not prevent other threads of
control from trying to send out that packet at the same time causing
corruptions because both code paths believe they have exclusive access
to the skb.

The best option seems to be to hold the write lock on neigh->lock
during the ->solicit() call.  I looked at all of the ndisc_ops
implementations and this seems workable.  The only case that needs
special care is the IPV4 ARP implementation of arp_solicit().  It
wants to take neigh->lock as a reader to protect the header entry in
neigh->ha during the emission of the soliciation.  We can simply
remove the read lock calls to take care of that since holding the lock
as a writer at the caller providers a superset of the protection
afforded by the existing read locking.

The rest of the ->solicit() implementations don't care whether the
neigh is locked or not.

Signed-off-by: David S. Miller <davem@davemloft.net>
2008-02-12 17:54:17 -08:00
..
datagram.c [NET] CORE: Introducing new memory accounting interface. 2008-01-28 15:00:18 -08:00
dev_mcast.c [VLAN]: set_rx_mode support for unicast address list 2008-01-31 19:28:24 -08:00
dev.c [AUDIT] Add uid, gid fields to ANOM_PROMISCUOUS message 2008-02-01 14:25:10 -05:00
dst.c [NETNS][DST] dst: pass the dst_ops as parameter to the gc functions 2008-01-28 15:02:46 -08:00
ethtool.c [ETHTOOL] Provide default behaviors for a few ethtool sub-ioctls 2007-10-10 16:51:17 -07:00
fib_rules.c [NETNS]: Process FIB rule action in the context of the namespace. 2008-01-28 15:08:14 -08:00
filter.c [NET]: Fix bug in sk_filter race cures. 2007-10-18 21:48:39 -07:00
flow.c [IPSEC] flow: reorder "struct flow_cache_entry" and remove SLAB_HWCACHE_ALIGN 2008-02-07 23:30:42 -08:00
gen_estimator.c [NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API 2008-01-28 15:11:10 -08:00
gen_stats.c [NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API 2008-01-28 15:11:10 -08:00
iovec.c
kmap_skb.h
link_watch.c [NET] link_watch: Always schedule urgent events 2007-05-10 23:45:28 -07:00
Makefile [NET]: Fix running without sysfs 2007-10-10 16:52:46 -07:00
neighbour.c [NDISC]: Fix race in generic address resolution 2008-02-12 17:54:17 -08:00
net_namespace.c typo fixes in net/core/net_namespace.c 2008-02-03 17:56:48 +02:00
net-sysfs.c [ETH]: Combine format_addr() with print_mac(). 2008-01-28 15:00:05 -08:00
net-sysfs.h [NET]: Remove in-code externs for some functions from net/core/dev.c 2007-10-23 21:27:56 -07:00
netevent.c [NET]: net/core/netevent.c should #include <net/netevent.h> 2007-07-05 17:40:27 -07:00
netpoll.c [IPV4] net/core: Use ipv4_is_<type> 2008-01-28 14:58:15 -08:00
pktgen.c [PKTGEN]: pktgen should not print info that it is spinning 2008-01-31 19:28:26 -08:00
request_sock.c [NET] net/core/request_sock.c: Remove unused exports. 2008-01-28 14:54:33 -08:00
rtnetlink.c [NET] rtnetlink.c: remove no longer used functions 2008-02-05 03:17:22 -08:00
scm.c [NET]: Fix function put_cmsg() which may cause usr application memory overflow 2007-12-20 14:36:44 -08:00
skbuff.c virtio: Implement skb_partial_csum_set, for setting partial csums on untrusted packets. 2008-02-04 23:49:56 +11:00
sock.c [NET]: Introducing socket mark socket option. 2008-01-31 19:27:19 -08:00
stream.c [NET] CORE: Introducing new memory accounting interface. 2008-01-28 15:00:18 -08:00
sysctl_net_core.c [NET] sysctl: make sysctl_somaxconn per-namespace 2008-01-28 14:56:57 -08:00
user_dma.c [NET]: Revert sk_buff walker cleanups. 2007-04-27 15:21:23 -07:00
utils.c [NET] core/utils.c: digit2bin is dead static inline 2008-01-28 15:01:58 -08:00