kernel_optimize_test/drivers/hv
Vitaly Kuznetsov 9420098adc Drivers: hv: utils: fix crash when device is removed from host side
The crash is observed when a service is being disabled host side while
userspace daemon is connected to the device:

[   90.244859] general protection fault: 0000 [#1] SMP
...
[   90.800082] Call Trace:
[   90.800082]  [<ffffffff81187008>] __fput+0xc8/0x1f0
[   90.800082]  [<ffffffff8118716e>] ____fput+0xe/0x10
...
[   90.800082]  [<ffffffff81015278>] do_signal+0x28/0x580
[   90.800082]  [<ffffffff81086656>] ? finish_task_switch+0xa6/0x180
[   90.800082]  [<ffffffff81443ebf>] ? __schedule+0x28f/0x870
[   90.800082]  [<ffffffffa01ebbaa>] ? hvt_op_read+0x12a/0x140 [hv_utils]
...

The problem is that hvutil_transport_destroy() which does misc_deregister()
freeing the appropriate device is reachable by two paths: module unload
and from util_remove(). While module unload path is protected by .owner in
struct file_operations util_remove() path is not. Freeing the device while
someone holds an open fd for it is a show stopper.

In general, it is not possible to revoke an fd from all users so the only
way to solve the issue is to defer freeing the hvutil_transport structure.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-12-14 19:27:30 -08:00
..
channel_mgmt.c Drivers: hv: vmbus: channge vmbus_connection.channel_lock to mutex 2015-12-14 19:15:05 -08:00
channel.c Drivers: hv: vmbus: Fix a Host signaling bug 2015-12-14 19:15:05 -08:00
connection.c Drivers: hv: vmbus: Force all channel messages to be delivered on CPU 0 2015-12-14 19:15:05 -08:00
hv_balloon.c Drivers: hv: balloon: Enable dynamic memory protocol negotiation with Windows 10 hosts 2015-08-04 22:28:39 -07:00
hv_fcopy.c Drivers: hv: utils: run polling callback always in interrupt context 2015-12-14 19:12:21 -08:00
hv_kvp.c Drivers: hv: utils: Invoke the poll function after handshake 2015-12-14 19:15:05 -08:00
hv_snapshot.c Drivers: hv: utils: Invoke the poll function after handshake 2015-12-14 19:15:05 -08:00
hv_util.c Drivers: hv: util: On device remove, close the channel after de-initializing the service 2015-03-01 19:31:02 -08:00
hv_utils_transport.c Drivers: hv: utils: fix crash when device is removed from host side 2015-12-14 19:27:30 -08:00
hv_utils_transport.h Drivers: hv: utils: introduce HVUTIL_TRANSPORT_DESTROY mode 2015-12-14 19:27:30 -08:00
hv.c drivers/hv: correct tsc page sequence invalid value 2015-12-14 19:15:05 -08:00
hyperv_vmbus.h Drivers: hv: vmbus: channge vmbus_connection.channel_lock to mutex 2015-12-14 19:15:05 -08:00
Kconfig x86: Make Linux guest support optional 2013-03-04 13:14:25 -08:00
Makefile Drivers: hv: util: introduce hv_utils_transport abstraction 2015-05-24 12:17:41 -07:00
ring_buffer.c Drivers: hv_vmbus: Fix signal to host condition 2015-08-05 11:44:29 -07:00
vmbus_drv.c drivers:hv: Allow for MMIO claims that span ACPI _CRS records 2015-12-14 19:15:05 -08:00