<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/net/bridge, branch v3.10.26</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/net/bridge?h=v3.10.26</id>
<link rel='self' href='https://git.amat.us/linux/atom/net/bridge?h=v3.10.26'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2013-12-08T15:29:26Z</updated>
<entry>
<title>bridge: flush br's address entry in fdb when remove the bridge dev</title>
<updated>2013-12-08T15:29:26Z</updated>
<author>
<name>Ding Tianhong</name>
<email>dingtianhong@huawei.com</email>
</author>
<published>2013-12-07T14:12:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=1acb97aeff84a72999eeb9cbea523a0079c5ce6d'/>
<id>urn:sha1:1acb97aeff84a72999eeb9cbea523a0079c5ce6d</id>
<content type='text'>
[ Upstream commit f873042093c0b418d2351fe142222b625c740149 ]

When the following commands are executed:

brctl addbr br0
ifconfig br0 hw ether &lt;addr&gt;
rmmod bridge

The calltrace will occur:

[  563.312114] device eth1 left promiscuous mode
[  563.312188] br0: port 1(eth1) entered disabled state
[  563.468190] kmem_cache_destroy bridge_fdb_cache: Slab cache still has objects
[  563.468197] CPU: 6 PID: 6982 Comm: rmmod Tainted: G           O 3.12.0-0.7-default+ #9
[  563.468199] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
[  563.468200]  0000000000000880 ffff88010f111e98 ffffffff814d1c92 ffff88010f111eb8
[  563.468204]  ffffffff81148efd ffff88010f111eb8 0000000000000000 ffff88010f111ec8
[  563.468206]  ffffffffa062a270 ffff88010f111ed8 ffffffffa063ac76 ffff88010f111f78
[  563.468209] Call Trace:
[  563.468218]  [&lt;ffffffff814d1c92&gt;] dump_stack+0x6a/0x78
[  563.468234]  [&lt;ffffffff81148efd&gt;] kmem_cache_destroy+0xfd/0x100
[  563.468242]  [&lt;ffffffffa062a270&gt;] br_fdb_fini+0x10/0x20 [bridge]
[  563.468247]  [&lt;ffffffffa063ac76&gt;] br_deinit+0x4e/0x50 [bridge]
[  563.468254]  [&lt;ffffffff810c7dc9&gt;] SyS_delete_module+0x199/0x2b0
[  563.468259]  [&lt;ffffffff814e0922&gt;] system_call_fastpath+0x16/0x1b
[  570.377958] Bridge firewalling registered

--------------------------- cut here -------------------------------

The reason is that when the bridge dev's address is changed, the
br_fdb_change_mac_address() will add new address in fdb, but when
the bridge was removed, the address entry in the fdb did not free,
the bridge_fdb_cache still has objects when destroy the cache, Fix
this by flushing the bridge address entry when removing the bridge.

v2: according to the Toshiaki Makita and Vlad's suggestion, I only
    delete the vlan0 entry, it still have a leak here if the vlan id
    is other number, so I need to call fdb_delete_by_port(br, NULL, 1)
    to flush all entries whose dst is NULL for the bridge.

Suggested-by: Toshiaki Makita &lt;toshiaki.makita1@gmail.com&gt;
Suggested-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
Signed-off-by: Ding Tianhong &lt;dingtianhong@huawei.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: Correctly clamp MAX forward_delay when enabling STP</title>
<updated>2013-11-04T12:31:03Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vyasevic@redhat.com</email>
</author>
<published>2013-10-15T18:57:45Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d14db2327635ac00aa7332bf26759d13ff39e2a5'/>
<id>urn:sha1:d14db2327635ac00aa7332bf26759d13ff39e2a5</id>
<content type='text'>
[ Upstream commit 4b6c7879d84ad06a2ac5b964808ed599187a188d ]

Commit be4f154d5ef0ca147ab6bcd38857a774133f5450
	bridge: Clamp forward_delay when enabling STP
had a typo when attempting to clamp maximum forward delay.

It is possible to set bridge_forward_delay to be higher then
permitted maximum when STP is off.  When turning STP on, the
higher then allowed delay has to be clamed down to max value.

Signed-off-by: Vlad Yasevich &lt;vyasevic@redhat.com&gt;
CC: Herbert Xu &lt;herbert@gondor.apana.org.au&gt;
CC: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Reviewed-by: Veaceslav Falico &lt;vfalico@redhat.com&gt;
Acked-by: Herbert Xu &lt;herbert@gondor.apana.org.au&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: fix NULL pointer deref of br_port_get_rcu</title>
<updated>2013-10-13T23:08:29Z</updated>
<author>
<name>Hong Zhiguo</name>
<email>zhiguohong@tencent.com</email>
</author>
<published>2013-09-14T14:42:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=960b8e5018a552f62cfbc0dfe94be7b6ba178f13'/>
<id>urn:sha1:960b8e5018a552f62cfbc0dfe94be7b6ba178f13</id>
<content type='text'>
[ Upstream commit 716ec052d2280d511e10e90ad54a86f5b5d4dcc2 ]

The NULL deref happens when br_handle_frame is called between these
2 lines of del_nbp:
	dev-&gt;priv_flags &amp;= ~IFF_BRIDGE_PORT;
	/* --&gt; br_handle_frame is called at this time */
	netdev_rx_handler_unregister(dev);

In br_handle_frame the return of br_port_get_rcu(dev) is dereferenced
without check but br_port_get_rcu(dev) returns NULL if:
	!(dev-&gt;priv_flags &amp; IFF_BRIDGE_PORT)

Eric Dumazet pointed out the testing of IFF_BRIDGE_PORT is not necessary
here since we're in rcu_read_lock and we have synchronize_net() in
netdev_rx_handler_unregister. So remove the testing of IFF_BRIDGE_PORT
and by the previous patch, make sure br_port_get_rcu is called in
bridging code.

Signed-off-by: Hong Zhiguo &lt;zhiguohong@tencent.com&gt;
Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: use br_port_get_rtnl within rtnl lock</title>
<updated>2013-10-13T23:08:29Z</updated>
<author>
<name>Hong Zhiguo</name>
<email>zhiguohong@tencent.com</email>
</author>
<published>2013-09-14T14:42:27Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=97ddc3e1f9d6637c81aaa470fde5669ffb854d14'/>
<id>urn:sha1:97ddc3e1f9d6637c81aaa470fde5669ffb854d14</id>
<content type='text'>
[ Upstream commit 1fb1754a8c70d69ab480763c423e0a74369c4a67 ]

current br_port_get_rcu is problematic in bridging path
(NULL deref). Change these calls in netlink path first.

Signed-off-by: Hong Zhiguo &lt;zhiguohong@tencent.com&gt;
Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: Clamp forward_delay when enabling STP</title>
<updated>2013-10-13T23:08:29Z</updated>
<author>
<name>Herbert Xu</name>
<email>herbert@gondor.apana.org.au</email>
</author>
<published>2013-09-12T07:12:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=dc45b846e96d5a656ddd926334b6496e6916b446'/>
<id>urn:sha1:dc45b846e96d5a656ddd926334b6496e6916b446</id>
<content type='text'>
[ Upstream commit be4f154d5ef0ca147ab6bcd38857a774133f5450 ]

At some point limits were added to forward_delay.  However, the
limits are only enforced when STP is enabled.  This created a
scenario where you could have a value outside the allowed range
while STP is disabled, which then stuck around even after STP
is enabled.

This patch fixes this by clamping the value when we enable STP.

I had to move the locking around a bit to ensure that there is
no window where someone could insert a value outside the range
while we're in the middle of enabling STP.

Signed-off-by: Herbert Xu &lt;herbert@gondor.apana.org.au&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>resubmit bridge: fix message_age_timer calculation</title>
<updated>2013-10-13T23:08:29Z</updated>
<author>
<name>Chris Healy</name>
<email>cphealy@gmail.com</email>
</author>
<published>2013-09-12T04:37:47Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=10a559a0df3eaa0c3cfbf780f88caf7f85c47106'/>
<id>urn:sha1:10a559a0df3eaa0c3cfbf780f88caf7f85c47106</id>
<content type='text'>
[ Upstream commit 9a0620133ccce9dd35c00a96405c8d80938c2cc0 ]

This changes the message_age_timer calculation to use the BPDU's max age as
opposed to the local bridge's max age.  This is in accordance with section
8.6.2.3.2 Step 2 of the 802.1D-1998 sprecification.

With the current implementation, when running with very large bridge
diameters, convergance will not always occur even if a root bridge is
configured to have a longer max age.

Tested successfully on bridge diameters of ~200.

Signed-off-by: Chris Healy &lt;cphealy@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay</title>
<updated>2013-09-14T13:54:56Z</updated>
<author>
<name>Daniel Borkmann</name>
<email>dborkman@redhat.com</email>
</author>
<published>2013-08-29T21:55:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=00897febb83864e2dd388d719b256cb362198e27'/>
<id>urn:sha1:00897febb83864e2dd388d719b256cb362198e27</id>
<content type='text'>
[ Upstream commit 2d98c29b6fb3de44d9eaa73c09f9cf7209346383 ]

While looking into MLDv1/v2 code, I noticed that bridging code does
not convert it's max delay into jiffies for MLDv2 messages as we do
in core IPv6' multicast code.

RFC3810, 5.1.3. Maximum Response Code says:

  The Maximum Response Code field specifies the maximum time allowed
  before sending a responding Report. The actual time allowed, called
  the Maximum Response Delay, is represented in units of milliseconds,
  and is derived from the Maximum Response Code as follows: [...]

As we update timers that work with jiffies, we need to convert it.

Signed-off-by: Daniel Borkmann &lt;dborkman@redhat.com&gt;
Cc: Linus Lüssing &lt;linus.luessing@web.de&gt;
Cc: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: Use the correct bit length for bitmap functions in the VLAN code</title>
<updated>2013-09-14T13:54:55Z</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2013-08-20T08:10:18Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=9f0bd377e1210501cd11eef80159e5d7f6160fef'/>
<id>urn:sha1:9f0bd377e1210501cd11eef80159e5d7f6160fef</id>
<content type='text'>
[ Upstream commit ef40b7ef181b7b1a24df2ef2d1ef84956bffa635 ]

The VLAN code needs to know the length of the per-port VLAN bitmap to
perform its most basic operations (retrieving VLAN informations, removing
VLANs, forwarding database manipulation, etc). Unfortunately, in the
current implementation we are using a macro that indicates the bitmap
size in longs in places where the size in bits is expected, which in
some cases can cause what appear to be random failures.
Use the correct macro.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: don't try to update timers in case of broken MLD queries</title>
<updated>2013-09-14T13:54:54Z</updated>
<author>
<name>Linus Lüssing</name>
<email>linus.luessing@web.de</email>
</author>
<published>2013-08-05T22:32:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=5ddf771720b5761435133058842f274072afa8ed'/>
<id>urn:sha1:5ddf771720b5761435133058842f274072afa8ed</id>
<content type='text'>
[ Upstream commit 248ba8ec05a2c3b118c2224e57eb10c128176ab1 ]

Currently we are reading an uninitialized value for the max_delay
variable when snooping an MLD query message of invalid length and would
update our timers with that.

Fixing this by simply ignoring such broken MLD queries (just like we do
for IGMP already).

This is a regression introduced by:
"bridge: disable snooping if there is no querier" (b00589af3b04)

Reported-by: Paul Bolle &lt;pebolle@tiscali.nl&gt;
Signed-off-by: Linus Lüssing &lt;linus.luessing@web.de&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bridge: fix switched interval for MLD Query types</title>
<updated>2013-06-18T00:11:22Z</updated>
<author>
<name>Linus Lüssing</name>
<email>linus.luessing@web.de</email>
</author>
<published>2013-06-16T21:20:34Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=32de868cbc6bee010d2cee95b5071b25ecbec8c3'/>
<id>urn:sha1:32de868cbc6bee010d2cee95b5071b25ecbec8c3</id>
<content type='text'>
General Queries (the one with the Multicast Address field
set to zero / '::') are supposed to have a Maximum Response Delay
of [Query Response Interval], while for Multicast-Address-Specific
Queries it is [Last Listener Query Interval] - not the other way
round. (see RFC2710, section 7.3+7.8)

Signed-off-by: Linus Lüssing &lt;linus.luessing@web.de&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
