CVE-2026-89487: openvswitch: only skb_tx_error() a packet we are about to drop

Published Sep 11, 2026
·
Updated

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

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

queueuserspacepacket() borrows the packet skb -- it only copies it into a private netlink message (userskb) and does not own it; on return doexecuteactions() keeps forwarding it through the flow's remaining actions. Its error path nevertheless calls skbtxerror(skb), which via skbzcopyclear() does skbshinfo(skb)->flags &= ~SKBFLALLZEROCOPY, stripping SKBFLSHAREDFRAG from that live skb (skbtxerror()'s kerneldoc says "skb must be freed afterwards").

For a MSGZEROCOPY skb carrying page-cache frags, SKBFLSHAREDFRAG is what makes espinput() skbcowdata() 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). doexecuteactions() ignores outputuserspace()'s return value, so any action after a failed USERSPACE upcall inherits the stripped skb.

Move the skbtxerror() to the flow-miss drop path - the "default" branch of ovsdpprocesspacket()'s switch(error), before kfreeskb().

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

Event History

Sep 11, 2026
CVE Published
via MITRE·07:43 PM
Data Sourced
via MITRE·07:43 PM
Description

Frequently Asked Questions

1

What conditions are required for exploitation?

The packet must be a MSG_ZEROCOPY skb carrying page-cache fragments. Exploitation also requires a failed Open vSwitch USERSPACE upcall followed by later packet processing that reaches local ESP-in-UDP delivery, where decryption can occur in place.

2

Who could exploit this?

The described impact is an unprivileged page-cache write. The affected packet path involves Open vSwitch processing of a live skb after a USERSPACE upcall failure rather than a packet that is immediately dropped.

3

Does every failed USERSPACE upcall cause the issue?

No. The problem arises when packet processing continues after the failed upcall, because do_execute_actions() ignores output_userspace()'s return value and later actions inherit the modified skb. Packets handled by the flow-miss drop path are intended to be dropped instead.

4

What does the fix change?

The fix moves skb_tx_error() to the flow-miss drop path, immediately before the skb is freed. This prevents skb_tx_error() from clearing zero-copy flags on a borrowed skb that may continue through remaining actions.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203