Skip to content

Commit

Permalink
hsr: fix refcnt leak of hsr slave interface
Browse files Browse the repository at this point in the history
In the commit e0a4b99 ("hsr: use upper/lower device infrastructure"),
dev_get() was removed but dev_put() in the error path wasn't removed.
So, if creating hsr interface command is failed, the reference counter leak
of lower interface would occur.

Test commands:
    ip link add dummy0 type dummy
    ip link add ipvlan0 link dummy0 type ipvlan mode l2
    ip link add ipvlan1 link dummy0 type ipvlan mode l2
    ip link add hsr0 type hsr slave1 ipvlan0 slave2 ipvlan1
    ip link del ipvlan0

Result:
[  633.271992][ T1280] unregister_netdevice: waiting for ipvlan0 to become free. Usage count = -1

Fixes: e0a4b99 ("hsr: use upper/lower device infrastructure")
Signed-off-by: Taehee Yoo <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
TaeheeYoo authored and davem330 committed Mar 5, 2020
1 parent d990452 commit 56dc0a0
Showing 1 changed file with 1 addition and 4 deletions.
5 changes: 1 addition & 4 deletions net/hsr/hsr_slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ static int hsr_portdev_setup(struct hsr_priv *hsr, struct net_device *dev,

res = dev_set_promiscuity(dev, 1);
if (res)
goto fail_promiscuity;
return res;

master = hsr_port_get_hsr(hsr, HSR_PT_MASTER);
hsr_dev = master->dev;
Expand All @@ -128,9 +128,6 @@ static int hsr_portdev_setup(struct hsr_priv *hsr, struct net_device *dev,
netdev_upper_dev_unlink(dev, hsr_dev);
fail_upper_dev_link:
dev_set_promiscuity(dev, -1);
fail_promiscuity:
dev_put(dev);

return res;
}

Expand Down

0 comments on commit 56dc0a0

Please sign in to comment.