---
id: CVE-2026-98947
title: 'vsock: Fix memory leak in vmci_transport_recv_dgram_cb()'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  vsock: Fix memory leak in vmci_transport_recv_dgram_cb()

  During the closure of a datagram socket, the vmci_transport_recv_dgram_cb()
  function may be called, which will…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 <
    0f8e2b2045355a0ee2008125e573435504b13cee
  - >-
    Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 <
    4835dbcde5cc3ae37e0d0796052056b35fcae8bf
  - >-
    Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 <
    9907db2b8e7ba70b442bb9dec86526a6511fac62
  - >-
    Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 <
    7c24a4e87e219072e5e106f6791146cbf3b056b3
  - Linux 3.9
published: '2026-10-23'
updated: '2026-10-23'
sourceUpdated: '2026-10-23T12:19:06.146Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98947'
references:
  - url: 'https://git.kernel.org/stable/c/0f8e2b2045355a0ee2008125e573435504b13cee'
  - url: 'https://git.kernel.org/stable/c/4835dbcde5cc3ae37e0d0796052056b35fcae8bf'
  - url: 'https://git.kernel.org/stable/c/9907db2b8e7ba70b442bb9dec86526a6511fac62'
  - url: 'https://git.kernel.org/stable/c/7c24a4e87e219072e5e106f6791146cbf3b056b3'
tags:
  - cve.org
ingestedAt: '2026-10-23T13:24:55.559Z'
---

## Overview

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

vsock: Fix memory leak in vmci_transport_recv_dgram_cb()

During the closure of a datagram socket, the vmci_transport_recv_dgram_cb()
function may be called, which will add the packets
to the socket's backlog; then, after the receive queue is cleared,
the __release_sock() function will move the packet back from the socket's
backlog to the receive queue, which will lead to a memory leak.

sock_close
  __sock_release
    __vsock_release
      // take ownership by user-space
      lock_sock_nested
      sock_set_flag(sk, SOCK_DEAD)
      vmci_transport_release
                                      vmci_dispatch_dgs
                                        vmci_datagram_invoke_guest_handler
                                          vmci_transport_recv_dgram_cb
                                            sk_receive_skb
                                              if (!sock_owned_by_user(sk))
                                                  [...]
                                         (!)  else if sk_add_backlog()
                                                  [...]
  (!) skb_queue_purge(&sk->sk_receive_queue)

      release_sock
        __release_sock
          // move all packets from the backlog
          // to the receive queue
   (!)    sk_backlog_rcv
            vsock_queue_rcv_skb
            [...]
              __sock_queue_rcv_skb
                if (!sock_flag(sk, SOCK_DEAD))
                  // Since the socket is "dead", the function will not
                  // be called
                  sk->sk_data_ready(sk)
        sock_release_ownership(sk);
        sock_put

Add a receive queue cleanup in the socket destructor to fix this.

syzkaller report:

unreferenced object 0xffff8880117bfb80 (size 240):
  comm "irq/56-vmw_vmci", pid 205, jiffies 4295064448 (age 73.992s)
  hex dump (first 32 bytes):
    78 dc 26 1e 80 88 ff ff 78 dc 26 1e 80 88 ff ff  x.&.....x.&.....
    00 00 00 00 00 00 00 00 c0 da 26 1e 80 88 ff ff  ..........&.....
  backtrace:
    [<ffffffff82be8d97>] __alloc_skb+0x287/0x330 net/core/skbuff.c:505
    [<ffffffffa114bcbd>] vmci_transport_recv_dgram_cb+0xbd/0x210 [vmw_vsock_vmci_transport]
    [<ffffffffa05072c6>] vmci_datagram_invoke_guest_handler+0x366/0x450 [vmw_vmci]
    [<ffffffffa050ad75>] vmci_dispatch_dgs+0x235/0x490 [vmw_vmci]
    [<ffffffffa050b025>] vmci_interrupt+0x55/0x290 [vmw_vmci]
    [<ffffffff8137ad2b>] irq_thread_fn+0x8b/0x1a0 kernel/irq/manage.c:1205
    [<ffffffff8137c7ae>] irq_thread+0x28e/0x530 kernel/irq/manage.c:1314
    [<ffffffff81253dd6>] kthread+0x2e6/0x3a0 kernel/kthread.c:376
    [<ffffffff81004392>] ret_from_fork+0x22/0x30 arch/x86/entry/entry_64.S:295

Found by InfoTeCS on behalf of Linux Verification Center
(linuxtesting.org) with Syzkaller.

## Affected

- `Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 < 0f8e2b2045355a0ee2008125e573435504b13cee`
- `Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 < 4835dbcde5cc3ae37e0d0796052056b35fcae8bf`
- `Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 < 9907db2b8e7ba70b442bb9dec86526a6511fac62`
- `Linux >= d021c344051af91f42c5ba9fdedc176740cbd238 < 7c24a4e87e219072e5e106f6791146cbf3b056b3`
- `Linux 3.9`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
