linux/drivers/hv
Vitaly Kuznetsov ac0f7d4258 Drivers: hv: copy from message page only what's needed
Hyper-V Interrupt Message Page (SIMP) has 16 256-byte slots for
messages. Each message comes with a header (16 bytes) which specifies the
payload length (up to 240 bytes). vmbus_on_msg_dpc(), however, doesn't
look at the real message length and copies the whole slot to a temporary
buffer before passing it to message handlers. This is potentially dangerous
as hypervisor doesn't have to clean the whole slot when putting a new
message there and a message handler can get access to some data which
belongs to a previous message.

Note, this is not currently a problem because all message handlers are
in-kernel but eventually we may e.g. get this exported to userspace.

Note also, that this is not a performance critical path: messages (unlike
events) represent rare events so it doesn't really matter (from performance
point of view) if we copy too much.

Fix the issue by taking into account the real message length. The temporary
buffer allocated by vmbus_on_msg_dpc() remains fixed size for now. Also,
check that the supplied payload length is valid (<= 240 bytes).

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20200406104154.45010-2-vkuznets@redhat.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
2020-04-23 13:17:10 +00:00
..
channel_mgmt.c x86/Hyper-V: Unload vmbus channel in hv panic callback 2020-04-10 15:29:00 +01:00
channel.c Drivers: hv: vmbus: Fix virt_to_hvpfn() for X86_PAE 2019-08-20 12:49:57 -04:00
connection.c Drivers: hv: vmbus: Remove dependencies on guest page size 2019-11-21 20:10:45 -05:00
hv_balloon.c hv_balloon: don't check for memhp_auto_online manually 2020-04-07 10:43:40 -07:00
hv_debugfs.c hv_debugfs: Make hv_debug_root static 2020-04-04 17:47:43 +01:00
hv_fcopy.c hv_utils: Add the support of hibernation 2020-01-26 22:10:17 -05:00
hv_kvp.c hv_utils: Add the support of hibernation 2020-01-26 22:10:17 -05:00
hv_snapshot.c hv_utils: Add the support of hibernation 2020-01-26 22:10:17 -05:00
hv_trace_balloon.h hv_balloon: trace post_status 2018-03-06 09:57:17 -08:00
hv_trace.c hv: add SPDX license to trace 2018-03-28 13:24:56 +02:00
hv_trace.h tools: hv: Use the correct style for SPDX License Identifier 2019-08-17 15:29:34 -04:00
hv_util.c - Most of the commits here are work to enable host-initiated hibernation 2020-02-03 14:42:03 +00:00
hv_utils_transport.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 280 2019-06-05 17:36:36 +02:00
hv_utils_transport.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 280 2019-06-05 17:36:36 +02:00
hv.c x86/hyperv: Initialize clockevents earlier in CPU onlining 2019-11-15 10:33:49 +01:00
hyperv_vmbus.h hv: hyperv_vmbus.h: Replace zero-length array with flexible-array member 2020-03-21 16:26:12 +00:00
Kconfig clocksource/drivers/hyperv: Enable TSC page clocksource on 32bit 2019-08-23 16:59:54 +02:00
Makefile drivers: hv: vmbus: Introduce latency testing 2019-11-21 20:10:44 -05:00
ring_buffer.c drivers: hv: vmbus: Introduce latency testing 2019-11-21 20:10:44 -05:00
vmbus_drv.c Drivers: hv: copy from message page only what's needed 2020-04-23 13:17:10 +00:00