CVE-2026-89487

openvswitch: only skb_tx_error() a packet we are about to drop

State
Published
Severity
7.8 High
Published
Sep 11, 2026
Updated
Oct 19, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

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

openvswitch: only skb_tx_error() a packet we are about to drop

queue_userspace_packet() borrows the packet skb -- it only copies it into a private netlink message (user_skb) and does not own it; on return do_execute_actions() keeps forwarding it through the flow's remaining actions. Its error path nevertheless calls skb_tx_error(skb), which via skb_zcopy_clear() does skb_shinfo(skb)->flags &= ~SKBFL_ALL_ZEROCOPY, stripping SKBFL_SHARED_FRAG from that live skb (skb_tx_error()'s kerneldoc says "skb must be freed afterwards").

For a MSG_ZEROCOPY skb carrying page-cache frags, SKBFL_SHARED_FRAG is what makes esp_input() skb_cow_data() before in-place AEAD; once it is stripped a later local ESP-in-UDP delivery decrypts in place over pages the sender does not own -- an unprivileged page-cache write (the "Fragnesia" primitive). do_execute_actions() ignores output_userspace()'s return value, so any action after a failed USERSPACE upcall inherits the stripped skb.

Move the skb_tx_error() to the flow-miss drop path - the "default" branch of ovs_dp_process_packet()'s switch(error), before kfree_skb().

The call has been here since commit 36d5fe6a0007 ("core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors") but was harmless until esp_input() began relying on SKBFL_SHARED_FRAG to gate in-place decrypt; only then did stripping it on a still-forwarded skb become a page-cache write primitive.

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 5de5d554141a15b3f1f5c978fd9f7f4fd6d0600aAffected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 48db11e115d1b232edc5591604adc6eda95cd545Affected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 4477222e2916a18e273edc139c955ade6bbb7a69Affected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 4d5c460ef8754be1d43b16dbf02695b008b207d6Affected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 6767d70cf46f65807a6a4c4406a518e6c12e36aeAffected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before e41a59fc056f63a7a1f42788913c53cc48d744aaAffected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 5d85eef222cfd28e73deed7402c100229e8b9e6eAffected
  • 36d5fe6a000790f56039afe26834265db0a3ad4c to before 0dbc2398fca3bb33eda963849f865ddb1b3aa05eAffected
  • c5f0c0e7525443add533495e93ba8de6feab2396Affected
  • 1674b4bf3eea3cac51b70778e89f8025f7cfe695Affected
  • 3.10.51 to before 3.11Affected
  • 3.12.40 to before 3.13Affected
LinuxLinux
  • 3.14Affected
  • before 3.14Not affected
  • 5.10.270 through 5.10.*Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.109 through 6.12.*Not affected
  • 6.18.50 through 6.18.*Not affected
  • 7.2.4 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.