<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/git/stable/linux.git/net/bridge, branch linux-4.11.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<id>https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/atom?h=linux-4.11.y</id>
<link rel='self' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/atom?h=linux-4.11.y'/>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/'/>
<updated>2017-07-21T05:00:08+00:00</updated>
<entry>
<title>bridge: mdb: fix leak on complete_info ptr on fail path</title>
<updated>2017-07-21T05:00:08+00:00</updated>
<author>
<name>Eduardo Valentin</name>
<email>eduval@amazon.com</email>
</author>
<published>2017-07-11T21:55:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=a470f5fb25accb0cd4a9675960a8b5fd4e5bfdf1'/>
<id>urn:sha1:a470f5fb25accb0cd4a9675960a8b5fd4e5bfdf1</id>
<content type='text'>
[ Upstream commit 1bfb159673957644951ab0a8d2aec44b93ddb1ae ]

We currently get the following kmemleak report:
unreferenced object 0xffff8800039d9820 (size 32):
  comm "softirq", pid 0, jiffies 4295212383 (age 792.416s)
  hex dump (first 32 bytes):
    00 0c e0 03 00 88 ff ff ff 02 00 00 00 00 00 00  ................
    00 00 00 01 ff 11 00 02 86 dd 00 00 ff ff ff ff  ................
  backtrace:
    [&lt;ffffffff8152b4aa&gt;] kmemleak_alloc+0x4a/0xa0
    [&lt;ffffffff811d8ec8&gt;] kmem_cache_alloc_trace+0xb8/0x1c0
    [&lt;ffffffffa0389683&gt;] __br_mdb_notify+0x2a3/0x300 [bridge]
    [&lt;ffffffffa038a0ce&gt;] br_mdb_notify+0x6e/0x70 [bridge]
    [&lt;ffffffffa0386479&gt;] br_multicast_add_group+0x109/0x150 [bridge]
    [&lt;ffffffffa0386518&gt;] br_ip6_multicast_add_group+0x58/0x60 [bridge]
    [&lt;ffffffffa0387fb5&gt;] br_multicast_rcv+0x1d5/0xdb0 [bridge]
    [&lt;ffffffffa037d7cf&gt;] br_handle_frame_finish+0xcf/0x510 [bridge]
    [&lt;ffffffffa03a236b&gt;] br_nf_hook_thresh.part.27+0xb/0x10 [br_netfilter]
    [&lt;ffffffffa03a3738&gt;] br_nf_hook_thresh+0x48/0xb0 [br_netfilter]
    [&lt;ffffffffa03a3fb9&gt;] br_nf_pre_routing_finish_ipv6+0x109/0x1d0 [br_netfilter]
    [&lt;ffffffffa03a4400&gt;] br_nf_pre_routing_ipv6+0xd0/0x14c [br_netfilter]
    [&lt;ffffffffa03a3c27&gt;] br_nf_pre_routing+0x197/0x3d0 [br_netfilter]
    [&lt;ffffffff814a2952&gt;] nf_iterate+0x52/0x60
    [&lt;ffffffff814a29bc&gt;] nf_hook_slow+0x5c/0xb0
    [&lt;ffffffffa037ddf4&gt;] br_handle_frame+0x1a4/0x2c0 [bridge]

This happens when switchdev_port_obj_add() fails. This patch
frees complete_info object in the fail path.

Reviewed-by: Vallish Vaidyeshwara &lt;vallish@amazon.com&gt;
Signed-off-by: Eduardo Valentin &lt;eduval@amazon.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: Fix inconsistent teardown and release of private netdev state.</title>
<updated>2017-07-05T12:41:34+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2017-05-08T16:52:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=95876855a55072572895a236b156ffb357fd5538'/>
<id>urn:sha1:95876855a55072572895a236b156ffb357fd5538</id>
<content type='text'>
[ Upstream commit cf124db566e6b036b8bcbe8decbed740bdfac8c6 ]

Network devices can allocate reasources and private memory using
netdev_ops-&gt;ndo_init().  However, the release of these resources
can occur in one of two different places.

Either netdev_ops-&gt;ndo_uninit() or netdev-&gt;destructor().

The decision of which operation frees the resources depends upon
whether it is necessary for all netdev refs to be released before it
is safe to perform the freeing.

netdev_ops-&gt;ndo_uninit() presumably can occur right after the
NETDEV_UNREGISTER notifier completes and the unicast and multicast
address lists are flushed.

netdev-&gt;destructor(), on the other hand, does not run until the
netdev references all go away.

Further complicating the situation is that netdev-&gt;destructor()
almost universally does also a free_netdev().

This creates a problem for the logic in register_netdevice().
Because all callers of register_netdevice() manage the freeing
of the netdev, and invoke free_netdev(dev) if register_netdevice()
fails.

If netdev_ops-&gt;ndo_init() succeeds, but something else fails inside
of register_netdevice(), it does call ndo_ops-&gt;ndo_uninit().  But
it is not able to invoke netdev-&gt;destructor().

This is because netdev-&gt;destructor() will do a free_netdev() and
then the caller of register_netdevice() will do the same.

However, this means that the resources that would normally be released
by netdev-&gt;destructor() will not be.

Over the years drivers have added local hacks to deal with this, by
invoking their destructor parts by hand when register_netdevice()
fails.

Many drivers do not try to deal with this, and instead we have leaks.

Let's close this hole by formalizing the distinction between what
private things need to be freed up by netdev-&gt;destructor() and whether
the driver needs unregister_netdevice() to perform the free_netdev().

netdev-&gt;priv_destructor() performs all actions to free up the private
resources that used to be freed by netdev-&gt;destructor(), except for
free_netdev().

netdev-&gt;needs_free_netdev is a boolean that indicates whether
free_netdev() should be done at the end of unregister_netdevice().

Now, register_netdevice() can sanely release all resources after
ndo_ops-&gt;ndo_init() succeeds, by invoking both ndo_ops-&gt;ndo_uninit()
and netdev-&gt;priv_destructor().

And at the end of unregister_netdevice(), we invoke
netdev-&gt;priv_destructor() and optionally call free_netdev().

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>netfilter: xtables: zero padding in data_to_user</title>
<updated>2017-06-29T11:02:55+00:00</updated>
<author>
<name>Willem de Bruijn</name>
<email>willemb@google.com</email>
</author>
<published>2017-05-09T20:17:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=865cdeeae70ae9f9a0ecce183401cc61ee756287'/>
<id>urn:sha1:865cdeeae70ae9f9a0ecce183401cc61ee756287</id>
<content type='text'>
commit 324318f0248c31be8a08984146e7e4dd7cdd091d upstream.

When looking up an iptables rule, the iptables binary compares the
aligned match and target data (XT_ALIGN). In some cases this can
exceed the actual data size to include padding bytes.

Before commit f77bc5b23fb1 ("iptables: use match, target and data
copy_to_user helpers") the malloc()ed bytes were overwritten by the
kernel with kzalloced contents, zeroing the padding and making the
comparison succeed. After this patch, the kernel copies and clears
only data, leaving the padding bytes undefined.

Extend the clear operation from data size to aligned data size to
include the padding bytes, if any.

Padding bytes can be observed in both match and target, and the bug
triggered, by issuing a rule with match icmp and target ACCEPT:

  iptables -t mangle -A INPUT -i lo -p icmp --icmp-type 1 -j ACCEPT
  iptables -t mangle -D INPUT -i lo -p icmp --icmp-type 1 -j ACCEPT

Fixes: f77bc5b23fb1 ("iptables: use match, target and data copy_to_user helpers")
Reported-by: Paul Moore &lt;pmoore@redhat.com&gt;
Reported-by: Richard Guy Briggs &lt;rgb@redhat.com&gt;
Signed-off-by: Willem de Bruijn &lt;willemb@google.com&gt;
Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
Cc: Florian Westphal &lt;fw@strlen.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>net: bridge: fix a null pointer dereference in br_afspec</title>
<updated>2017-06-14T13:07:35+00:00</updated>
<author>
<name>Nikolay Aleksandrov</name>
<email>nikolay@cumulusnetworks.com</email>
</author>
<published>2017-06-05T22:26:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=9719e31a96e8212d99f2e82210d559f06d53d91c'/>
<id>urn:sha1:9719e31a96e8212d99f2e82210d559f06d53d91c</id>
<content type='text'>
[ Upstream commit 1020ce3108cc26fbf09d70550ea2937cb1a211d2 ]

We might call br_afspec() with p == NULL which is a valid use case if
the action is on the bridge device itself, but the bridge tunnel code
dereferences the p pointer without checking, so check if p is null
first.

Reported-by: Gustavo A. R. Silva &lt;garsilva@embeddedor.com&gt;
Fixes: efa5356b0d97 ("bridge: per vlan dst_metadata netlink support")
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Acked-by: Roopa Prabhu &lt;roopa@cumulusnetworks.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: start hello timer only if device is up</title>
<updated>2017-06-14T13:07:32+00:00</updated>
<author>
<name>Nikolay Aleksandrov</name>
<email>nikolay@cumulusnetworks.com</email>
</author>
<published>2017-06-01T15:07:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=8b8fd1831b0172a54f33b17b5d719e17a8cf9770'/>
<id>urn:sha1:8b8fd1831b0172a54f33b17b5d719e17a8cf9770</id>
<content type='text'>
[ Upstream commit aeb073241fe7a2b932e04e20c60e47718332877f ]

When the transition of NO_STP -&gt; KERNEL_STP was fixed by always calling
mod_timer in br_stp_start, it introduced a new regression which causes
the timer to be armed even when the bridge is down, and since we stop
the timers in its ndo_stop() function, they never get disabled if the
device is destroyed before it's upped.

To reproduce:
$ while :; do ip l add br0 type bridge hello_time 100; brctl stp br0 on;
ip l del br0; done;

CC: Xin Long &lt;lucien.xin@gmail.com&gt;
CC: Ivan Vecera &lt;cera@cera.cz&gt;
CC: Sebastian Ott &lt;sebott@linux.vnet.ibm.com&gt;
Reported-by: Sebastian Ott &lt;sebott@linux.vnet.ibm.com&gt;
Fixes: 6d18c732b95c ("bridge: start hello_timer when enabling KERNEL_STP in br_stp_start")
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.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: start hello_timer when enabling KERNEL_STP in br_stp_start</title>
<updated>2017-06-07T10:10:02+00:00</updated>
<author>
<name>Xin Long</name>
<email>lucien.xin@gmail.com</email>
</author>
<published>2017-05-19T14:20:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=99c971a56d764f6f3bb7c6a2581b2d33cacc702a'/>
<id>urn:sha1:99c971a56d764f6f3bb7c6a2581b2d33cacc702a</id>
<content type='text'>
[ Upstream commit 6d18c732b95c0a9d35e9f978b4438bba15412284 ]

Since commit 76b91c32dd86 ("bridge: stp: when using userspace stp stop
kernel hello and hold timers"), bridge would not start hello_timer if
stp_enabled is not KERNEL_STP when br_dev_open.

The problem is even if users set stp_enabled with KERNEL_STP later,
the timer will still not be started. It causes that KERNEL_STP can
not really work. Users have to re-ifup the bridge to avoid this.

This patch is to fix it by starting br-&gt;hello_timer when enabling
KERNEL_STP in br_stp_start.

As an improvement, it's also to start hello_timer again only when
br-&gt;stp_enabled is KERNEL_STP in br_hello_timer_expired, there is
no reason to start the timer again when it's NO_STP.

Fixes: 76b91c32dd86 ("bridge: stp: when using userspace stp stop kernel hello and hold timers")
Reported-by: Haidong Li &lt;haili@redhat.com&gt;
Signed-off-by: Xin Long &lt;lucien.xin@gmail.com&gt;
Acked-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Reviewed-by: Ivan Vecera &lt;cera@cera.cz&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: netlink: check vlan_default_pvid range</title>
<updated>2017-06-07T10:10:02+00:00</updated>
<author>
<name>Tobias Jungel</name>
<email>tobias.jungel@bisdn.de</email>
</author>
<published>2017-05-17T07:29:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7b570175b3da6cb7f6e99e46eb04b1f8eb1ad220'/>
<id>urn:sha1:7b570175b3da6cb7f6e99e46eb04b1f8eb1ad220</id>
<content type='text'>
[ Upstream commit a285860211bf257b0e6d522dac6006794be348af ]

Currently it is allowed to set the default pvid of a bridge to a value
above VLAN_VID_MASK (0xfff). This patch adds a check to br_validate and
returns -EINVAL in case the pvid is out of bounds.

Reproduce by calling:

[root@test ~]# ip l a type bridge
[root@test ~]# ip l a type dummy
[root@test ~]# ip l s bridge0 type bridge vlan_filtering 1
[root@test ~]# ip l s bridge0 type bridge vlan_default_pvid 9999
[root@test ~]# ip l s dummy0 master bridge0
[root@test ~]# bridge vlan
port	vlan ids
bridge0	 9999 PVID Egress Untagged

dummy0	 9999 PVID Egress Untagged

Fixes: 0f963b7592ef ("bridge: netlink: add support for default_pvid")
Acked-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Signed-off-by: Tobias Jungel &lt;tobias.jungel@bisdn.de&gt;
Acked-by: Sabrina Dubroca &lt;sd@queasysnail.net&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: move bridge multicast cleanup to ndo_uninit</title>
<updated>2017-04-25T18:02:39+00:00</updated>
<author>
<name>Xin Long</name>
<email>lucien.xin@gmail.com</email>
</author>
<published>2017-04-25T14:58:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=b1b9d366028ff580e6dd80b48a69c473361456f1'/>
<id>urn:sha1:b1b9d366028ff580e6dd80b48a69c473361456f1</id>
<content type='text'>
During removing a bridge device, if the bridge is still up, a new mdb entry
still can be added in br_multicast_add_group() after all mdb entries are
removed in br_multicast_dev_del(). Like the path:

  mld_ifc_timer_expire -&gt;
    mld_sendpack -&gt; ...
      br_multicast_rcv -&gt;
        br_multicast_add_group

The new mp's timer will be set up. If the timer expires after the bridge
is freed, it may cause use-after-free panic in br_multicast_group_expired.

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048
IP: [&lt;ffffffffa07ed2c8&gt;] br_multicast_group_expired+0x28/0xb0 [bridge]
Call Trace:
 &lt;IRQ&gt;
 [&lt;ffffffff81094536&gt;] call_timer_fn+0x36/0x110
 [&lt;ffffffffa07ed2a0&gt;] ? br_mdb_free+0x30/0x30 [bridge]
 [&lt;ffffffff81096967&gt;] run_timer_softirq+0x237/0x340
 [&lt;ffffffff8108dcbf&gt;] __do_softirq+0xef/0x280
 [&lt;ffffffff8169889c&gt;] call_softirq+0x1c/0x30
 [&lt;ffffffff8102c275&gt;] do_softirq+0x65/0xa0
 [&lt;ffffffff8108e055&gt;] irq_exit+0x115/0x120
 [&lt;ffffffff81699515&gt;] smp_apic_timer_interrupt+0x45/0x60
 [&lt;ffffffff81697a5d&gt;] apic_timer_interrupt+0x6d/0x80

Nikolay also found it would cause a memory leak - the mdb hash is
reallocated and not freed due to the mdb rehash.

unreferenced object 0xffff8800540ba800 (size 2048):
  backtrace:
    [&lt;ffffffff816e2287&gt;] kmemleak_alloc+0x67/0xc0
    [&lt;ffffffff81260bea&gt;] __kmalloc+0x1ba/0x3e0
    [&lt;ffffffffa05c60ee&gt;] br_mdb_rehash+0x5e/0x340 [bridge]
    [&lt;ffffffffa05c74af&gt;] br_multicast_new_group+0x43f/0x6e0 [bridge]
    [&lt;ffffffffa05c7aa3&gt;] br_multicast_add_group+0x203/0x260 [bridge]
    [&lt;ffffffffa05ca4b5&gt;] br_multicast_rcv+0x945/0x11d0 [bridge]
    [&lt;ffffffffa05b6b10&gt;] br_dev_xmit+0x180/0x470 [bridge]
    [&lt;ffffffff815c781b&gt;] dev_hard_start_xmit+0xbb/0x3d0
    [&lt;ffffffff815c8743&gt;] __dev_queue_xmit+0xb13/0xc10
    [&lt;ffffffff815c8850&gt;] dev_queue_xmit+0x10/0x20
    [&lt;ffffffffa02f8d7a&gt;] ip6_finish_output2+0x5ca/0xac0 [ipv6]
    [&lt;ffffffffa02fbfc6&gt;] ip6_finish_output+0x126/0x2c0 [ipv6]
    [&lt;ffffffffa02fc245&gt;] ip6_output+0xe5/0x390 [ipv6]
    [&lt;ffffffffa032b92c&gt;] NF_HOOK.constprop.44+0x6c/0x240 [ipv6]
    [&lt;ffffffffa032bd16&gt;] mld_sendpack+0x216/0x3e0 [ipv6]
    [&lt;ffffffffa032d5eb&gt;] mld_ifc_timer_expire+0x18b/0x2b0 [ipv6]

This could happen when ip link remove a bridge or destroy a netns with a
bridge device inside.

With Nikolay's suggestion, this patch is to clean up bridge multicast in
ndo_uninit after bridge dev is shutdown, instead of br_dev_delete, so
that netif_running check in br_multicast_add_group can avoid this issue.

v1-&gt;v2:
  - fix this issue by moving br_multicast_dev_del to ndo_uninit, instead
    of calling dev_close in br_dev_delete.

(NOTE: Depends upon b6fe0440c637 ("bridge: implement missing ndo_uninit()"))

Fixes: e10177abf842 ("bridge: multicast: fix handling of temp and perm entries")
Reported-by: Jianwen Ji &lt;jiji@redhat.com&gt;
Signed-off-by: Xin Long &lt;lucien.xin@gmail.com&gt;
Reviewed-by: Stephen Hemminger &lt;stephen@networkplumber.org&gt;
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bridge: netlink: register netdevice before executing changelink</title>
<updated>2017-04-12T02:22:44+00:00</updated>
<author>
<name>Ido Schimmel</name>
<email>idosch@mellanox.com</email>
</author>
<published>2017-04-10T11:59:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=5b8d5429daa05bebef6ffd3297df3b502cc6f184'/>
<id>urn:sha1:5b8d5429daa05bebef6ffd3297df3b502cc6f184</id>
<content type='text'>
Peter reported a kernel oops when executing the following command:

$ ip link add name test type bridge vlan_default_pvid 1

[13634.939408] BUG: unable to handle kernel NULL pointer dereference at
0000000000000190
[13634.939436] IP: __vlan_add+0x73/0x5f0
[...]
[13634.939783] Call Trace:
[13634.939791]  ? pcpu_next_unpop+0x3b/0x50
[13634.939801]  ? pcpu_alloc+0x3d2/0x680
[13634.939810]  ? br_vlan_add+0x135/0x1b0
[13634.939820]  ? __br_vlan_set_default_pvid.part.28+0x204/0x2b0
[13634.939834]  ? br_changelink+0x120/0x4e0
[13634.939844]  ? br_dev_newlink+0x50/0x70
[13634.939854]  ? rtnl_newlink+0x5f5/0x8a0
[13634.939864]  ? rtnl_newlink+0x176/0x8a0
[13634.939874]  ? mem_cgroup_commit_charge+0x7c/0x4e0
[13634.939886]  ? rtnetlink_rcv_msg+0xe1/0x220
[13634.939896]  ? lookup_fast+0x52/0x370
[13634.939905]  ? rtnl_newlink+0x8a0/0x8a0
[13634.939915]  ? netlink_rcv_skb+0xa1/0xc0
[13634.939925]  ? rtnetlink_rcv+0x24/0x30
[13634.939934]  ? netlink_unicast+0x177/0x220
[13634.939944]  ? netlink_sendmsg+0x2fe/0x3b0
[13634.939954]  ? _copy_from_user+0x39/0x40
[13634.939964]  ? sock_sendmsg+0x30/0x40
[13634.940159]  ? ___sys_sendmsg+0x29d/0x2b0
[13634.940326]  ? __alloc_pages_nodemask+0xdf/0x230
[13634.940478]  ? mem_cgroup_commit_charge+0x7c/0x4e0
[13634.940592]  ? mem_cgroup_try_charge+0x76/0x1a0
[13634.940701]  ? __handle_mm_fault+0xdb9/0x10b0
[13634.940809]  ? __sys_sendmsg+0x51/0x90
[13634.940917]  ? entry_SYSCALL_64_fastpath+0x1e/0xad

The problem is that the bridge's VLAN group is created after setting the
default PVID, when registering the netdevice and executing its
ndo_init().

Fix this by changing the order of both operations, so that
br_changelink() is only processed after the netdevice is registered,
when the VLAN group is already initialized.

Fixes: b6677449dff6 ("bridge: netlink: call br_changelink() during br_dev_newlink()")
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Signed-off-by: Ido Schimmel &lt;idosch@mellanox.com&gt;
Reported-by: Peter V. Saveliev &lt;peter@svinota.eu&gt;
Tested-by: Peter V. Saveliev &lt;peter@svinota.eu&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bridge: implement missing ndo_uninit()</title>
<updated>2017-04-12T02:22:44+00:00</updated>
<author>
<name>Ido Schimmel</name>
<email>idosch@mellanox.com</email>
</author>
<published>2017-04-10T11:59:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=b6fe0440c63716e09cfc0d1484e3898a0f29d1d1'/>
<id>urn:sha1:b6fe0440c63716e09cfc0d1484e3898a0f29d1d1</id>
<content type='text'>
While the bridge driver implements an ndo_init(), it was missing a
symmetric ndo_uninit(), causing the different de-initialization
operations to be scattered around its dellink() and destructor().

Implement a symmetric ndo_uninit() and remove the overlapping operations
from its dellink() and destructor().

This is a prerequisite for the next patch, as it allows us to have a
proper cleanup upon changelink() failure during the bridge's newlink().

Fixes: b6677449dff6 ("bridge: netlink: call br_changelink() during br_dev_newlink()")
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Signed-off-by: Ido Schimmel &lt;idosch@mellanox.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
