linux-uconsole/drivers/net
Ross Lagerwall 6be4fe8329 xen-netfront: Fix race between device setup and open
[ Upstream commit f599c64fdf ]

When a netfront device is set up it registers a netdev fairly early on,
before it has set up the queues and is actually usable. A userspace tool
like NetworkManager will immediately try to open it and access its state
as soon as it appears. The bug can be reproduced by hotplugging VIFs
until the VM runs out of grant refs. It registers the netdev but fails
to set up any queues (since there are no more grant refs). In the
meantime, NetworkManager opens the device and the kernel crashes trying
to access the queues (of which there are none).

Fix this in two ways:
* For initial setup, register the netdev much later, after the queues
are setup. This avoids the race entirely.
* During a suspend/resume cycle, the frontend reconnects to the backend
and the queues are recreated. It is possible (though highly unlikely) to
race with something opening the device and accessing the queues after
they have been destroyed but before they have been recreated. Extend the
region covered by the rtnl semaphore to protect against this race. There
is a possibility that we fail to recreate the queues so check for this
in the open function.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-05-30 07:48:56 +02:00
..
appletalk net/appletalk: Fix kernel memory disclosure 2017-12-09 18:42:42 +01:00
arcnet
bonding bonding: do not allow rlb updates to invalid mac 2018-05-26 08:48:48 +02:00
caif
can can: kvaser_usb: Increase correct stats counter in kvaser_usb_rx_can_msg() 2018-05-16 10:06:51 +02:00
cris
dsa net: dsa: bcm_sf2: Ensure we re-negotiate EEE during after link change 2016-12-10 19:07:23 +01:00
ethernet tg3: Fix vunmap() BUG_ON() triggered from tg3_free_consistent(). 2018-05-26 08:48:48 +02:00
fddi
fjes fjes: Fix wrong netdevice feature flags 2017-12-20 10:04:55 +01:00
hamradio hdlcdrv: Fix divide by zero in hdlcdrv_ioctl 2018-04-13 19:50:14 +02:00
hippi hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close 2018-02-25 11:03:42 +01:00
hyperv hv_netvsc: use skb_get_hash() instead of a homegrown implementation 2017-03-26 12:13:18 +02:00
ieee802154 fakelb: fix schedule while atomic 2017-03-15 09:57:15 +08:00
ipvlan ipvlan: add L2 check for packets arriving via virtual devices 2018-03-22 09:23:30 +01:00
irda irda: vlsi_ir: fix check for DMA mapping errors 2017-12-25 14:22:12 +01:00
phy net: phy: avoid genphy_aneg_done() for PHYs without clause 22 support 2018-04-13 19:50:18 +02:00
plip
ppp pppoe: check sockaddr length in pppoe_connect() 2018-04-29 07:50:05 +02:00
slip slip: Check if rstate is initialized before uncompressing 2018-04-24 09:32:04 +02:00
team team: fix netconsole setup over team 2018-04-29 07:50:05 +02:00
usb qmi_wwan: do not steal interfaces from class drivers 2018-05-26 08:48:47 +02:00
vmxnet3 vmxnet3: ensure that adapter is in proper state during force_close 2018-04-13 19:50:04 +02:00
wan wan: pc300too: abort path on failure 2018-03-24 10:58:43 +01:00
wimax net: wimax/i2400m: fix NULL-deref at probe 2017-12-20 10:04:54 +01:00
wireless mac80211_hwsim: fix possible memory leak in hwsim_new_radio_nl() 2018-05-30 07:48:54 +02:00
xen-netback xen/netback: set default upper limit of tx/rx queues to 8 2017-11-15 17:13:09 +01:00
dummy.c
eql.c
geneve.c geneve: avoid use-after-free of skb->data 2016-12-10 19:07:24 +01:00
ifb.c
Kconfig vmxnet3: prevent building with 64K pages 2018-02-25 11:03:42 +01:00
LICENSE.SRC
loopback.c net: introduce device min_header_len 2017-02-18 16:39:27 +01:00
macvlan.c macvlan: Only deliver one copy of the frame to the macvlan interface 2017-12-20 10:05:01 +01:00
macvtap.c tun/tap: sanitize TUNSETSNDBUF input 2017-11-18 11:11:05 +01:00
Makefile
mdio.c
mii.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c rapidio/rionet: fix deadlock on SMP 2016-04-12 09:08:58 -07:00
sb1000.c
Space.c
sungem_phy.c
tun.c tun: allow positive return values on dev_get_valid_name() call 2017-11-18 11:11:06 +01:00
veth.c veth: set peer GSO values 2018-03-22 09:23:29 +01:00
virtio_net.c virtio_net: check return value of skb_to_sgvec in one more location 2018-04-13 19:50:23 +02:00
vrf.c vrf: Fix use after free and double free in vrf_finish_output 2018-04-13 19:50:27 +02:00
vxlan.c vxlan: dont migrate permanent fdb entries during learn 2018-04-13 19:50:21 +02:00
xen-netfront.c xen-netfront: Fix race between device setup and open 2018-05-30 07:48:56 +02:00