CVE-2024-35944

VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host()

State
Published
Severity
Not scored
Published
May 19, 2024
Updated
Oct 15, 2026
Reserved
May 17, 2024

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host()

Syzkaller hit 'WARNING in dg_dispatch_as_host' bug.

memcpy: detected field-spanning write (size 56) of single field "&dg_info->msg" at drivers/misc/vmw_vmci/vmci_datagram.c:237 (size 24)

WARNING: CPU: 0 PID: 1555 at drivers/misc/vmw_vmci/vmci_datagram.c:237 dg_dispatch_as_host+0x88e/0xa60 drivers/misc/vmw_vmci/vmci_datagram.c:237

Some code commentry, based on my understanding:

544 #define VMCI_DG_SIZE(_dg) (VMCI_DG_HEADERSIZE + (size_t)(_dg)->payload_size) /// This is 24 + payload_size

memcpy(&dg_info->msg, dg, dg_size); Destination = dg_info->msg ---> this is a 24 byte structure(struct vmci_datagram) Source = dg --> this is a 24 byte structure (struct vmci_datagram) Size = dg_size = 24 + payload_size

{payload_size = 56-24 =32} -- Syzkaller managed to set payload_size to 32.

35 struct delayed_datagram_info { 36 struct datagram_entry *entry; 37 struct work_struct work; 38 bool in_dg_host_queue; 39 /* msg and msg_payload must be together. */ 40 struct vmci_datagram msg; 41 u8 msg_payload[]; 42 };

So those extra bytes of payload are copied into msg_payload[], a run time warning is seen while fuzzing with Syzkaller.

One possible way to fix the warning is to split the memcpy() into two parts -- one -- direct assignment of msg and second taking care of payload.

Gustavo quoted: "Under FORTIFY_SOURCE we should not copy data across multiple members in a structure."

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before e87bb99d2df6512d8ee37a5d63d2ca9a39a8c051Affected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before f15eca95138b3d4ec17b63c3c1937b0aa0d3624bAffected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before ad78c5047dc4076d0b3c4fad4f42ffe9c86e8100Affected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before 130b0cd064874e0d0f58e18fb00e6f3993e90c74Affected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before feacd430b42bbfa9ab3ed9e4f38b86c43e348c75Affected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before dae70a57565686f16089737adb8ac64471570f73Affected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before 491a1eb07c2bd8841d63cb5263455e185be5866fAffected
  • a110b7ebb9c674a2b591af2780dd512ad0198d50 to before 19b070fefd0d024af3daa7329cbc0d00de5302ecAffected
LinuxLinux
  • 3.9Affected
  • before 3.9Not affected
  • 4.19.312 through 4.19.*Not affected
  • 5.4.274 through 5.4.*Not affected
  • 5.10.215 through 5.10.*Not affected
  • 5.15.155 through 5.15.*Not affected
  • 6.1.86 through 6.1.*Not affected
  • 6.6.27 through 6.6.*Not affected
  • 6.8.6 through 6.8.*Not affected
  • 6.9 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.