{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-50085",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-50085"
  ],
  "published": "2024-10-29T00:50:48Z",
  "summary": "mptcp: pm: fix UaF read in mptcp_pm_nl_rm_addr_or_subflow",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nmptcp: pm: fix UaF read in mptcp_pm_nl_rm_addr_or_subflow\n\nSyzkaller reported this splat:\n\n  ==================================================================\n  BUG: KASAN: slab-use-after-free in mptcp_pm_nl_rm_addr_or_subflow+0xb44/0xcc0 net/mptcp/pm_netlink.c:881\n  Read of size 4 at addr ffff8880569ac858 by task syz.1.2799/14662\n\n  CPU: 0 UID: 0 PID: 14662 Comm: syz.1.2799 Not tainted 6.12.0-rc2-syzkaller-00307-g36c254515dc6 #0\n  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014\n  Call Trace:\n   <TASK>\n   __dump_stack lib/dump_stack.c:94 [inline]\n   dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120\n   print_address_description mm/kasan/report.c:377 [inline]\n   print_report+0xc3/0x620 mm/kasan/report.c:488\n   kasan_report+0xd9/0x110 mm/kasan/report.c:601\n   mptcp_pm_nl_rm_addr_or_subflow+0xb44/0xcc0 net/mptcp/pm_netlink.c:881\n   mptcp_pm_nl_rm_subflow_received net/mptcp/pm_netlink.c:914 [inline]\n   mptcp_nl_remove_id_zero_address+0x305/0x4a0 net/mptcp/pm_netlink.c:1572\n   mptcp_pm_nl_del_addr_doit+0x5c9/0x770 net/mptcp/pm_netlink.c:1603\n   genl_family_rcv_msg_doit+0x202/0x2f0 net/netlink/genetlink.c:1115\n   genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]\n   genl_rcv_msg+0x565/0x800 net/netlink/genetlink.c:1210\n   netlink_rcv_skb+0x165/0x410 net/netlink/af_netlink.c:2551\n   genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219\n   netlink_unicast_kernel net/netlink/af_netlink.c:1331 [inline]\n   netlink_unicast+0x53c/0x7f0 net/netlink/af_netlink.c:1357\n   netlink_sendmsg+0x8b8/0xd70 net/netlink/af_netlink.c:1901\n   sock_sendmsg_nosec net/socket.c:729 [inline]\n   __sock_sendmsg net/socket.c:744 [inline]\n   ____sys_sendmsg+0x9ae/0xb40 net/socket.c:2607\n   ___sys_sendmsg+0x135/0x1e0 net/socket.c:2661\n   __sys_sendmsg+0x117/0x1f0 net/socket.c:2690\n   do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]\n   __do_fast_syscall_32+0x73/0x120 arch/x86/entry/common.c:386\n   do_fast_syscall_32+0x32/0x80 arch/x86/entry/common.c:411\n   entry_SYSENTER_compat_after_hwframe+0x84/0x8e\n  RIP: 0023:0xf7fe4579\n  Code: b8 01 10 06 03 74 b4 01 10 07 03 74 b0 01 10 08 03 74 d8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d b4 26 00 00 00 00 8d b4 26 00 00 00 00\n  RSP: 002b:00000000f574556c EFLAGS: 00000296 ORIG_RAX: 0000000000000172\n  RAX: ffffffffffffffda RBX: 000000000000000b RCX: 0000000020000140\n  RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000\n  RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000\n  R10: 0000000000000000 R11: 0000000000000296 R12: 0000000000000000\n  R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000\n   </TASK>\n\n  Allocated by task 5387:\n   kasan_save_stack+0x33/0x60 mm/kasan/common.c:47\n   kasan_save_track+0x14/0x30 mm/kasan/common.c:68\n   poison_kmalloc_redzone mm/kasan/common.c:377 [inline]\n   __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:394\n   kmalloc_noprof include/linux/slab.h:878 [inline]\n   kzalloc_noprof include/linux/slab.h:1014 [inline]\n   subflow_create_ctx+0x87/0x2a0 net/mptcp/subflow.c:1803\n   subflow_ulp_init+0xc3/0x4d0 net/mptcp/subflow.c:1956\n   __tcp_set_ulp net/ipv4/tcp_ulp.c:146 [inline]\n   tcp_set_ulp+0x326/0x7f0 net/ipv4/tcp_ulp.c:167\n   mptcp_subflow_create_socket+0x4ae/0x10a0 net/mptcp/subflow.c:1764\n   __mptcp_subflow_connect+0x3cc/0x1490 net/mptcp/subflow.c:1592\n   mptcp_pm_create_subflow_or_signal_addr+0xbda/0x23a0 net/mptcp/pm_netlink.c:642\n   mptcp_pm_nl_fully_established net/mptcp/pm_netlink.c:650 [inline]\n   mptcp_pm_nl_work+0x3a1/0x4f0 net/mptcp/pm_netlink.c:943\n   mptcp_worker+0x15a/0x1240 net/mptcp/protocol.c:2777\n   process_one_work+0x958/0x1b30 kernel/workqueue.c:3229\n   process_scheduled_works kernel/workqueue.c:3310 [inline]\n   worker_thread+0x6c8/0xf00 kernel/workqueue.c:3391\n   kthread+0x2c1/0x3a0 kernel/kthread.c:389\n   ret_from_fork+0x45/0x80 arch/x86/ke\n---truncated---",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.6.51-1+rpt1",
        "1:6.6.51-1+rpt2",
        "1:6.6.51-1+rpt3"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt2"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt2"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt3"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt3"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.6.51-1+rpt1": {
            "linux_commit": "0094eba3f2a4338cfa6854b0b5104d02ba0fa01f",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.58"
          },
          "1:6.6.51-1+rpt2": {
            "linux_commit": "82a50e430ef1d6eb37d78e25aa572c1f6ea56160",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.58"
          },
          "1:6.6.51-1+rpt3": {
            "linux_commit": "5aeecea9f4a45248bcf564dec924965e066a7bfd",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.58"
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2024-50085"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/35301636439138b821f1f6169bd00d348ebd388a"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/da3343bc0839b180fd9af9c27fa456d8231409f9"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/7b2e478abab0b3a33515433a6af563aebba773c1"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/a8c36ea4ef9a350816f6556c5c5b63810f84b538"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/7decd1f5904a489d3ccdcf131972f94645681689"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T11:52:36Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 9.8,
      "cvss_v3_severity": "Critical",
      "scenario": "AV:N - The identical buggy line is reached with no local access at all when a remote MPTCP peer sends an RM_ADDR TCP option: `mptcp_incoming_options()` \u2192 `mptcp_pm_rm_addr_received()` \u2192 `mptcp_pm_nl_work()` \u2192 `mptcp_pm_nl_rm_addr_received()` \u2192 `mptcp_pm_nl_rm_addr_or_subflow()`. MPTCP is enabled by default (`pernet->mptcp_enabled = 1`) and used by internet-facing services, so the remote peer of any `IPPROTO_MPTCP` connection can drive the close-then-use sequence.\nAC:L - The attacker controls both halves: it chooses which subflows exist (MP_JOIN) and when they are torn down (RM_ADDR ids, or repeated DEL_ADDR netlink calls), and it can drive the kfree_rcu drain by inducing memory pressure \u2014 the exact `kfree_rcu_shrink_scan()` path in the syzbot report. The sequence can be retried without limit and requires no memory layout the attacker cannot influence.\nPR:N - On the RM_ADDR path a remote peer needs no credentials whatsoever \u2014 subflow teardown is ordinary protocol traffic processed before any application-layer authentication. Even the local netlink path only carries `GENL_UNS_ADMIN_PERM`, i.e. CAP_NET_ADMIN in the owning user namespace, obtainable by any unprivileged user via `unshare -Urn`.\nUI:N - The path manager processes RM_ADDR and DEL_ADDR autonomously in the mptcp worker and netlink doit handler; no victim action such as opening a file, mounting a filesystem, or clicking anything is involved.\nS:U - The freed object and the corrupted state are both kernel-heap/MPTCP path-manager structures within the same security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - This is a KASAN-confirmed slab-use-after-free read of freed kmalloc-512 memory, and per kernel UAF scoring the attacker gains control over the freed object's contents through heap spraying of that widely-used cache. The stale contents then steer kernel control flow, and the resulting `pm.accept_addr` behaviour change is remotely observable, turning freed heap state into an attacker-visible oracle.\nI:H - Once the freed `mptcp_subflow_context` is reallocated with attacker-shaped data, the attacker chooses the value of `removed`, which directly drives `--msk->pm.add_addr_accepted` and `WRITE_ONCE(msk->pm.accept_addr, true)` \u2014 corrupting path-manager accounting and bypassing the administrator's configured `add_addr_accept_max`, so the host is forced to open additional subflows to attacker-announced addresses. Use-after-free access to a reallocated slab object is scored as high integrity impact.\nA:H - Use-after-free access is a crash vector: on KASAN or hardened builds it panics outright, and forcing `removed` true when `msk->pm.add_addr_accepted == 0` trips `WARN_ON_ONCE()`, which is fatal on the many production and Android kernels running `panic_on_warn`. The sequence is repeatable at will by the remote peer."
    }
  }
}
