Skip to content
Heist/ feed
Back to feed
HighFix available

tipc: fix use-after-free of the discoverer in tipc_disc_rcv()

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: tipc: fix use-after-free of the discoverer in tipc_disc_rcv() bearer_disable() frees b->disc with tipc_disc_delete()'s plain kfree(), but tipc_disc_rcv() still dereferences b->disc in RX softirq under rcu_read_lock() (tipc_udp_recv -> tipc_rcv -> tipc_disc_rcv). L2 bearers are safe thanks to the synchronize_net() in tipc_disable_l2_media(), but the UDP bearer defers that call to the cleanup_bearer() workqueue, so the discoverer is freed with no grace period: BUG: KASAN: slab-use-after-free in tipc_disc_rcv (net/tipc/discover.c:149) Read of size 8 at addr ffff88802348b728 by task poc_tipc/184 tipc_disc_rcv (net/tipc/discover.c:149) tipc_rcv (net/tipc/node.c:2126) tipc_udp_recv (net/tipc/udp_media.c:391) udp_rcv (net/ipv4/udp.c:2643) ip_local_deliver_finish (net/ipv4/ip_input.c:241) Freed by task 181: kfree (mm/slub.c:6565) bearer_disable (net/tipc/bearer.c:418) tipc_nl_bearer_disable (net/tipc/bearer.c:1001) The bearer is freed with kfree_rcu(); free the discoverer the same way. Add an rcu_head to struct tipc_discoverer and free it and its skb from an RCU callback. Because the RCU callback (tipc_disc_free_rcu) lives in module text, a call_rcu() that is still pending when the tipc module is unloaded would invoke a freed function. Add an rcu_barrier() to tipc_exit() after the bearer subsystem has been torn down, so all pending discoverer callbacks have run before the module text goes away. Reachable from an unpr

Products
Kernel
Affected versions
Not specified
Fixed versions
5.10.265, 5.15.216, 6.1.183, 6.12.97, 6.18.40, 6.6.145, 7.1.5
CVEs
CVE-2026-64543
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 04:07 UTC · Revision 1

Source evidence

tipc: fix use-after-free of the discoverer in tipc_disc_rcv()

core-osv · Original source

Published 27 Jul 2026, 20:10 UTC

In the Linux kernel, the following vulnerability has been resolved: tipc: fix use-after-free of the discoverer in tipc_disc_rcv() bearer_disable() frees b->disc with tipc_disc_delete()'s plain kfree(), but tipc_disc_rcv() still dereferences b->disc in RX softirq under rcu_read_lock() (tipc_udp_recv -> tipc_rcv -> tipc_disc_rcv). L2 bearers are safe thanks to the synchronize_net() in tipc_disable_l2_media(), but the UDP bearer defers that call to the cleanup_bearer() workqueue, so the discoverer is freed with no grace period: BUG: KASAN: slab-use-after-free in tipc_disc_rcv (net/tipc/discover.c:149) Read of size 8 at addr ffff88802348b728 by task poc_tipc/184 tipc_disc_rcv (net/tipc/discover.c:149) tipc_rcv (net/tipc/node.c:2126) tipc_udp_recv (net/tipc/udp_media.c:391) udp_rcv (net/ipv4/udp.c:2643) ip_local_deliver_finish (net/ipv4/ip_input.c:241) Freed by task 181: kfree (mm/slub.c:6565) bearer_disable (net/tipc/bearer.c:418) tipc_nl_bearer_disable (net/tipc/bearer.c:1001) The bearer is freed with kfree_rcu(); free the discoverer the same way. Add an rcu_head to struct tipc_discoverer and free it and its skb from an RCU callback. Because the RCU callback (tipc_disc_free_rcu) lives in module text, a call_rcu() that is still pending when the tipc module is unloaded would invoke a freed function. Add an rcu_barrier() to tipc_exit() after the bearer subsystem has been torn down, so all pending discoverer callbacks have run before the module text goes away. Reachable from an unpr

osv:CVE-2026-64543

Kernel

Fixed versions: 5.10.265, 5.15.216, 6.1.183, 6.6.145, 6.12.97, 6.18.40, 7.1.5

Complete source record
{
  "id": "5d8aee38003758e6a43a236a9b0d1c8b4853f5b7e636281aea6ab664272cdcda",
  "url": "https://osv.dev/vulnerability/CVE-2026-64543",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "tipc: fix use-after-free of the discoverer in tipc_disc_rcv()",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: tipc: fix use-after-free of the discoverer in tipc_disc_rcv() bearer_disable() frees b->disc with tipc_disc_delete()'s plain kfree(), but tipc_disc_rcv() still dereferences b->disc in RX softirq under rcu_read_lock() (tipc_udp_recv -> tipc_rcv -> tipc_disc_rcv). L2 bearers are safe thanks to the synchronize_net() in tipc_disable_l2_media(), but the UDP bearer defers that call to the cleanup_bearer() workqueue, so the discoverer is freed with no grace period: BUG: KASAN: slab-use-after-free in tipc_disc_rcv (net/tipc/discover.c:149) Read of size 8 at addr ffff88802348b728 by task poc_tipc/184 tipc_disc_rcv (net/tipc/discover.c:149) tipc_rcv (net/tipc/node.c:2126) tipc_udp_recv (net/tipc/udp_media.c:391) udp_rcv (net/ipv4/udp.c:2643) ip_local_deliver_finish (net/ipv4/ip_input.c:241) Freed by task 181: kfree (mm/slub.c:6565) bearer_disable (net/tipc/bearer.c:418) tipc_nl_bearer_disable (net/tipc/bearer.c:1001) The bearer is freed with kfree_rcu(); free the discoverer the same way. Add an rcu_head to struct tipc_discoverer and free it and its skb from an RCU callback. Because the RCU callback (tipc_disc_free_rcu) lives in module text, a call_rcu() that is still pending when the tipc module is unloaded would invoke a freed function. Add an rcu_barrier() to tipc_exit() after the bearer subsystem has been torn down, so all pending discoverer callbacks have run before the module text goes away. Reachable from an unpr",
    "evidence": "osv:CVE-2026-64543",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "5.10.265",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "5.15.216",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.1.183",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.6.145",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.97",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.40",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "7.1.5",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-64543",
      "aliases": [
        "CVE-2026-64543"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "25b0b9c4e835ffaa65b61c3efe2e28acf84d0259"
                },
                {
                  "fixed": "380413cdfd29fb9fa486c82889132b680c4983c5"
                },
                {
                  "fixed": "f05b3f4c78370469286879c765f5a1dd39dbcd32"
                },
                {
                  "fixed": "4da2ac7749411971e1b222b992da5a172ce45f98"
                },
                {
                  "fixed": "5e215bf1c47fdddf8203a0fe80a0ed594065f101"
                },
                {
                  "fixed": "ec7d54d8cc1723921d671e3272b427c96366506f"
                },
                {
                  "fixed": "a0c5fdeb5fa257f8c6d469af266bc087cb5de6a2"
                },
                {
                  "fixed": "b65289e1c3f352a9f92c6e19713ddd647e033253"
                },
                {
                  "fixed": "1579342d71133da7f00daa02c75cebec7372097b"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-64543.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "4.17.0"
                },
                {
                  "fixed": "5.10.265"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.11.0"
                },
                {
                  "fixed": "5.15.216"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.16.0"
                },
                {
                  "fixed": "6.1.183"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.2.0"
                },
                {
                  "fixed": "6.6.145"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.97"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.40"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "7.1.5"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-64543.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:49.376349066Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/1579342d71133da7f00daa02c75cebec7372097b",
        "https://git.kernel.org/stable/c/380413cdfd29fb9fa486c82889132b680c4983c5",
        "https://git.kernel.org/stable/c/4da2ac7749411971e1b222b992da5a172ce45f98",
        "https://git.kernel.org/stable/c/5e215bf1c47fdddf8203a0fe80a0ed594065f101",
        "https://git.kernel.org/stable/c/a0c5fdeb5fa257f8c6d469af266bc087cb5de6a2",
        "https://git.kernel.org/stable/c/b65289e1c3f352a9f92c6e19713ddd647e033253",
        "https://git.kernel.org/stable/c/ec7d54d8cc1723921d671e3272b427c96366506f",
        "https://git.kernel.org/stable/c/f05b3f4c78370469286879c765f5a1dd39dbcd32",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/64xxx/CVE-2026-64543.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-64543",
        "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
      ],
      "provider_metadata": {
        "cna_assigner": "Linux",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/64xxx/CVE-2026-64543.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-64543",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 518002,
  "published_at": "2026-07-27T20:10:35.565+00:00"
}