]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "vmci: Prevent the dispatching of uninitialized payloads"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jul 2025 08:30:09 +0000 (10:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 10:13:36 +0000 (12:13 +0200)
[ Upstream commit 8f5d9bed6122b8d96508436e5ad2498bb797eb6b ]

This reverts commit bfb4cf9fb97e4063f0aa62e9e398025fb6625031.

While the code "looks" correct, the compiler has no way to know that
doing "fun" pointer math like this really isn't a write off the end of
the structure as there is no hint anywhere that the structure has data
at the end of it.

This causes the following build warning:

In function 'fortify_memset_chk',
    inlined from 'ctx_fire_notification.isra' at drivers/misc/vmw_vmci/vmci_context.c:254:3:
include/linux/fortify-string.h:480:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
  480 |                         __write_overflow_field(p_size_field, size);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So revert it for now and it can come back in the future in a "sane" way
that either correctly makes the structure know that there is trailing
data, OR just the payload structure is properly referenced and zeroed
out.

Fixes: bfb4cf9fb97e ("vmci: Prevent the dispatching of uninitialized payloads")
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Lizhi Xu <lizhi.xu@windriver.com>
Link: https://lore.kernel.org/r/20250703171021.0aee1482@canb.auug.org.au
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 d566103caa27d13e7d646f6e697a57ef77ad3ee7..f22b44827e9295e7628aaf322392758f5f32c057 100644 (file)
@@ -251,8 +251,6 @@ 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;