{
  "affected": [
    {
      "ranges": [
        {
          "events": [
            {
              "introduced": "5f2b6a9095743a6bf1f34c43c4fe78fa8bdf5ad7"
            },
            {
              "fixed": "33a7b36268933c75bdc355e5531951e0ea9f1951"
            },
            {
              "fixed": "7fdfe8f6efeb0e1200e22a903f2471539f54522b"
            },
            {
              "fixed": "0b352f83cabfefdaafa806d6471f0eca117dc7d5"
            }
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "type": "GIT"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "Linux",
        "name": "Kernel"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "6.14.0"
            },
            {
              "fixed": "6.18.21"
            }
          ],
          "type": "ECOSYSTEM"
        },
        {
          "events": [
            {
              "introduced": "6.19.0"
            },
            {
              "fixed": "6.19.11"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "database_specific": {
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31517.json"
  },
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: iptfs: fix skb_put() panic on non-linear skb during reassembly\n\nIn iptfs_reassem_cont(), IP-TFS attempts to append data to the new inner\npacket 'newskb' that is being reassembled. First a zero-copy approach is\ntried if it succeeds then newskb becomes non-linear.\n\nWhen a subsequent fragment in the same datagram does not meet the\nfast-path conditions, a memory copy is performed. It calls skb_put() to\nappend the data and as newskb is non-linear it triggers\nSKB_LINEAR_ASSERT check.\n\n Oops: invalid opcode: 0000 [#1] SMP NOPTI\n [...]\n RIP: 0010:skb_put+0x3c/0x40\n [...]\n Call Trace:\n  \u003cIRQ\u003e\n  iptfs_reassem_cont+0x1ab/0x5e0 [xfrm_iptfs]\n  iptfs_input_ordered+0x2af/0x380 [xfrm_iptfs]\n  iptfs_input+0x122/0x3e0 [xfrm_iptfs]\n  xfrm_input+0x91e/0x1a50\n  xfrm4_esp_rcv+0x3a/0x110\n  ip_protocol_deliver_rcu+0x1d7/0x1f0\n  ip_local_deliver_finish+0xbe/0x1e0\n  __netif_receive_skb_core.constprop.0+0xb56/0x1120\n  __netif_receive_skb_list_core+0x133/0x2b0\n  netif_receive_skb_list_internal+0x1ff/0x3f0\n  napi_complete_done+0x81/0x220\n  virtnet_poll+0x9d6/0x116e [virtio_net]\n  __napi_poll.constprop.0+0x2b/0x270\n  net_rx_action+0x162/0x360\n  handle_softirqs+0xdc/0x510\n  __irq_exit_rcu+0xe7/0x110\n  irq_exit_rcu+0xe/0x20\n  common_interrupt+0x85/0xa0\n  \u003c/IRQ\u003e\n  \u003cTASK\u003e\n\nFix this by checking if the skb is non-linear. If it is, linearize it by\ncalling skb_linearize(). As the initial allocation of newskb originally\nreserved enough tailroom for the entire reassembled packet we do not\nneed to check if we have enough tailroom or extend it.",
  "id": "CVE-2026-31517",
  "modified": "2026-08-12T03:51:15.363839038Z",
  "published": "2026-04-22T13:54:33.522Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/0b352f83cabfefdaafa806d6471f0eca117dc7d5"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/33a7b36268933c75bdc355e5531951e0ea9f1951"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/7fdfe8f6efeb0e1200e22a903f2471539f54522b"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31517.json"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-31517"
    },
    {
      "type": "PACKAGE",
      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
    }
  ],
  "schema_version": "1.9.0",
  "summary": "xfrm: iptfs: fix skb_put() panic on non-linear skb during reassembly"
}