CVE-2026-90049: net: skbuff: don't skb_tx_error() the source skb in skb_zerocopy()

Published Sep 16, 2026
·
Updated

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

net: skbuff: don't skbtxerror() the source skb in skbzerocopy()

skbzerocopy() copies frags from @from into @to. On an skborphanfrags() failure it calls skbtxerror(@from), a destructive operation on the source skb the copy helper does not own. That completes @from's zerocopy uarg and clears SKBFLALLZEROCOPY, including the SKBFLSHAREDFRAG page-ownership marker.

Both callers already report the failure on their own drop path. nfnetlinkqueue does it at nlaputfailure, and Open vSwitch does it in the flow-miss drop arm of ovsdpprocesspacket(), so nothing is lost by dropping it here.

On Open vSwitch's OVSACTIONATTRUSERSPACE path the skb is not freed on this error: doexecuteactions() ignores outputuserspace()'s return value and, unless the upcall was the last action, keeps forwarding the same skb through the flow's remaining actions. The uarg is completed while that skb is still in flight, telling the producer its buffers are free, and SKBFLSHAREDFRAG is cleared on an skb the rest of the stack still handles. That flag is what makes espinput() call skbcowdata() instead of decrypting in place, so a later local ESP delivery can decrypt over frags the skb does not own privately.

Leave error reporting to the callers.

Event History

Sep 16, 2026
CVE Published
via MITRE·10:33 AM
Data Sourced
via MITRE·10:33 AM
Description

Frequently Asked Questions

1

Which deployments have the clearest exposure path?

The described in-flight handling issue occurs on Open vSwitch's OVS_ACTION_ATTR_USERSPACE path when skb_zerocopy() encounters an skb_orphan_frags() failure. Exposure is particularly relevant when the upcall is not the last action, because Open vSwitch can continue processing the same skb through remaining actions.

2

What conditions are needed for the unsafe state to occur?

skb_zerocopy() must fail while orphaning fragments, causing it to invoke skb_tx_error() on the source skb. In the Open vSwitch userspace-action path, output_userspace() must return an error that do_execute_actions() ignores while the skb remains in flight for subsequent actions.

3

Why is continued packet processing after the error significant?

The erroneous completion tells the zerocopy buffer producer that its buffers are free while the skb is still being handled. It also clears SKBFL_SHARED_FRAG, removing the marker that makes esp_input() copy data before decrypting rather than decrypting in place.

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