android_kernel_xiaomi_sdm845/net/bridge
Herbert Xu 6b0d6a9b42 bridge: Fix mglist corruption that leads to memory corruption
The list mp->mglist is used to indicate whether a multicast group
is active on the bridge interface itself as opposed to one of the
constituent interfaces in the bridge.

Unfortunately the operation that adds the mp->mglist node to the
list neglected to check whether it has already been added.  This
leads to list corruption in the form of nodes pointing to itself.

Normally this would be quite obvious as it would cause an infinite
loop when walking the list.  However, as this list is never actually
walked (which means that we don't really need it, I'll get rid of
it in a subsequent patch), this instead is hidden until we perform
a delete operation on the affected nodes.

As the same node may now be pointed to by more than one node, the
delete operations can then cause modification of freed memory.

This was observed in practice to cause corruption in 512-byte slabs,
most commonly leading to crashes in jbd2.

Thanks to Josef Bacik for pointing me in the right direction.

Reported-by: Ian Page Hands <ihands@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-02-11 21:59:37 -08:00
..
netfilter net/bridge: fix trivial sparse errors 2011-01-03 13:29:18 -08:00
br_device.c net: Abstract away all dst_entry metrics accesses. 2010-12-09 10:46:36 -08:00
br_fdb.c bridge: Don't put partly initialized fdb into hash 2011-02-04 13:02:36 -08:00
br_forward.c net: bridge: check the length of skb after nf_bridge_maybe_copy_header() 2011-01-06 11:33:05 -08:00
br_if.c bridge: add RCU annotations to bridge port lookup 2010-11-15 11:13:18 -08:00
br_input.c bridge: add proper RCU annotation to should_route_hook 2010-11-15 11:13:16 -08:00
br_ioctl.c bridge: change console message interface 2010-05-15 23:10:02 -07:00
br_multicast.c bridge: Fix mglist corruption that leads to memory corruption 2011-02-11 21:59:37 -08:00
br_netfilter.c bridge: Use consistent NF_DROP returns in nf_pre_routing 2010-12-10 16:04:53 -08:00
br_netlink.c bridge: add RCU annotations to bridge port lookup 2010-11-15 11:13:18 -08:00
br_notify.c bridge: add RCU annotations to bridge port lookup 2010-11-15 11:13:18 -08:00
br_private_stp.h net: remove CVS keywords 2008-06-11 21:00:38 -07:00
br_private.h bridge: add RCU annotations to bridge port lookup 2010-11-15 11:13:18 -08:00
br_stp_bpdu.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-01-04 11:57:25 -08:00
br_stp_if.c net/bridge: fix trivial sparse errors 2011-01-03 13:29:18 -08:00
br_stp_timer.c bridge: change console message interface 2010-05-15 23:10:02 -07:00
br_stp.c bridge: change console message interface 2010-05-15 23:10:02 -07:00
br_sysfs_br.c bridge: add per bridge device controls for invoking iptables 2010-07-02 09:32:57 +02:00
br_sysfs_if.c bridge: update sysfs link names if port device names have changed 2010-05-15 23:10:15 -07:00
br.c bridge: add proper RCU annotation to should_route_hook 2010-11-15 11:13:16 -08:00
Kconfig bridge br_multicast: IPv6 MLD support. 2010-04-23 13:35:56 +09:00
Makefile bridge: Add core IGMP snooping support 2010-02-28 00:48:45 -08:00