---
id: CVE-2026-68426
title: 'xfrm: fix stale skb->prev after async crypto steals a GSO segment'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  xfrm: fix stale skb->prev after async crypto steals a GSO segment

  skb_gso_segment() leaves the segment list head with ->prev pointing at
  the last segment, an invariant…
severity: critical
cvss: 9.8
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e <
    33e1b0d25ca0d2818c635ff80e6aa0d295e08a98
  - >-
    Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e <
    bbca7cc3b2b4b10afbfee99b81d9ee78f5423046
  - >-
    Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e <
    3f4c3919baf0944ad96580467c302bc6c7758b00
  - Linux 4.16
ssvc:
  exploitation: none
  automatable: 'yes'
  technicalImpact: total
  timestamp: '2026-10-16T15:48:46.371818Z'
published: '2026-08-10'
updated: '2026-10-16'
sourceUpdated: '2026-10-16T15:53:13.083Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-68426'
references:
  - url: 'https://git.kernel.org/stable/c/33e1b0d25ca0d2818c635ff80e6aa0d295e08a98'
  - url: 'https://git.kernel.org/stable/c/bbca7cc3b2b4b10afbfee99b81d9ee78f5423046'
  - url: 'https://git.kernel.org/stable/c/3f4c3919baf0944ad96580467c302bc6c7758b00'
tags:
  - cve.org
epss: 0.00362
epssPercentile: 0.28493
ingestedAt: '2026-10-16T17:24:46.868Z'
---

## Overview

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

xfrm: fix stale skb->prev after async crypto steals a GSO segment

skb_gso_segment() leaves the segment list head with ->prev pointing at
the last segment, an invariant validate_xmit_skb_list() relies on when
it sets its tail pointer (tail = skb->prev).

When validate_xmit_xfrm() walks a GSO list and some segments are stolen
by async crypto (->xmit() returns -EINPROGRESS), those segments are
unlinked from the list but the head ->prev is never updated.  If the
last segment is the one stolen, the returned head still has ->prev
pointing at it, even though it is now owned by the crypto engine and may
be freed.  validate_xmit_skb_list() later does tail->next = skb, writing
through that stale pointer -- a use-after-free.

Repoint skb->prev at the last retained segment before returning.

## Affected

- `Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e < 33e1b0d25ca0d2818c635ff80e6aa0d295e08a98`
- `Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e < bbca7cc3b2b4b10afbfee99b81d9ee78f5423046`
- `Linux >= f53c723902d1ac5f0b0a11d7c9dcbff748dde74e < 3f4c3919baf0944ad96580467c302bc6c7758b00`
- `Linux 4.16`

## Remediation

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