Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a10d567c authored by Jarek Poplawski's avatar Jarek Poplawski Committed by David S. Miller
Browse files

[BRIDGE] br_if: Fix oops in port_carrier_check

parent bbf4a6bc
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ static void port_carrier_check(struct work_struct *work)
		spin_unlock_bh(&br->lock);
	}
done:
	dev_put(dev);
	rtnl_unlock();
}

@@ -161,7 +162,8 @@ static void del_nbp(struct net_bridge_port *p)

	dev_set_promiscuity(dev, -1);

	cancel_delayed_work(&p->carrier_check);
	if (cancel_delayed_work(&p->carrier_check))
		dev_put(dev);

	spin_lock_bh(&br->lock);
	br_stp_disable_port(p);
@@ -444,7 +446,9 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
	spin_lock_bh(&br->lock);
	br_stp_recalculate_bridge_id(br);
	br_features_recompute(br);
	schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE);
	if (schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE))
		dev_hold(dev);

	spin_unlock_bh(&br->lock);

	dev_set_mtu(br->dev, br_min_mtu(br));
+3 −1
Original line number Diff line number Diff line
@@ -56,7 +56,9 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v

	case NETDEV_CHANGE:
		if (br->dev->flags & IFF_UP)
			schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE);
			if (schedule_delayed_work(&p->carrier_check,
						BR_PORT_DEBOUNCE))
				dev_hold(dev);
		break;

	case NETDEV_FEAT_CHANGE: