]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[netdevice] Mark devices as open before calling open() method
authorMichael Brown <mcb30@ipxe.org>
Wed, 5 Mar 2014 15:25:08 +0000 (15:25 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 5 Mar 2014 15:25:08 +0000 (15:25 +0000)
commitf17a30d547b40bcd4298161f77ee14258508acf8
treec92b42f62a118684fd6fa91b49bca5a16e23458e
parent1137fa32687cd0e1784683318a5381c41856a531
[netdevice] Mark devices as open before calling open() method

When opening a VLAN device, vlan_open() will call netdev_open() on the
trunk device.  This will result in a call to netdev_notify(), which
will cause vlan_notify() to call vlan_sync() on the original VLAN
device, which will see that the trunk device is now open but the VLAN
device apparently isn't (since it has not yet been flagged as open by
netdev_open()).  The upshot is a second attempt to open the VLAN
device, which will result in an erroneous second call to vlan_open().
This convoluted chain of events then terminates harmlessly since
vlan_open() calls netdev_open() on the trunk device, which just
returns immediately since the trunk device is by now flagged as being
already open.

Prevent this from happening by having netdev_open() flag the device as
open prior to calling the device's open() method, and reflagging it as
closed if the open() method fails.

Originally-fixed-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/netdevice.c