]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
vmci: Prevent the dispatching of uninitialized payloads
authorLizhi Xu <lizhi.xu@windriver.com>
Fri, 27 Jun 2025 05:52:14 +0000 (13:52 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 14:38:30 +0000 (16:38 +0200)
[ Upstream commit bfb4cf9fb97e4063f0aa62e9e398025fb6625031 ]

The reproducer executes the host's unlocked_ioctl call in two different
tasks. When init_context fails, the struct vmci_event_ctx is not fully
initialized when executing vmci_datagram_dispatch() to send events to all
vm contexts. This affects the datagram taken from the datagram queue of
its context by another task, because the datagram payload is not initialized
according to the size payload_size, which causes the kernel data to leak
to the user space.

Before dispatching the datagram, and before setting the payload content,
explicitly set the payload content to 0 to avoid data leakage caused by
incomplete payload initialization.

Fixes: 28d6692cd8fb ("VMCI: context implementation.")
Reported-by: syzbot+9b9124ae9b12d5af5d95@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=9b9124ae9b12d5af5d95
Tested-by: syzbot+9b9124ae9b12d5af5d95@syzkaller.appspotmail.com
Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
Link: https://lore.kernel.org/r/20250627055214.2967129-1-lizhi.xu@windriver.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/misc/vmw_vmci/vmci_context.c

index f22b44827e9295e7628aaf322392758f5f32c057..d566103caa27d13e7d646f6e697a57ef77ad3ee7 100644 (file)
@@ -251,6 +251,8 @@ static int ctx_fire_notification(u32 context_id, u32 priv_flags)
                ev.msg.hdr.src = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID,
                                                  VMCI_CONTEXT_RESOURCE_ID);
                ev.msg.hdr.payload_size = sizeof(ev) - sizeof(ev.msg.hdr);
+               memset((char*)&ev.msg.hdr + sizeof(ev.msg.hdr), 0,
+                       ev.msg.hdr.payload_size);
                ev.msg.event_data.event = VMCI_EVENT_CTX_REMOVED;
                ev.payload.context_id = context_id;