milos-linux/net
Ilya Maximets dfe28c4167 net: openvswitch: remove never-working support for setting nsh fields
The validation of the set(nsh(...)) action is completely wrong.
It runs through the nsh_key_put_from_nlattr() function that is the
same function that validates NSH keys for the flow match and the
push_nsh() action.  However, the set(nsh(...)) has a very different
memory layout.  Nested attributes in there are doubled in size in
case of the masked set().  That makes proper validation impossible.

There is also confusion in the code between the 'masked' flag, that
says that the nested attributes are doubled in size containing both
the value and the mask, and the 'is_mask' that says that the value
we're parsing is the mask.  This is causing kernel crash on trying to
write into mask part of the match with SW_FLOW_KEY_PUT() during
validation, while validate_nsh() doesn't allocate any memory for it:

  BUG: kernel NULL pointer dereference, address: 0000000000000018
  #PF: supervisor read access in kernel mode
  #PF: error_code(0x0000) - not-present page
  PGD 1c2383067 P4D 1c2383067 PUD 20b703067 PMD 0
  Oops: Oops: 0000 [#1] SMP NOPTI
  CPU: 8 UID: 0 Kdump: loaded Not tainted 6.17.0-rc4+ #107 PREEMPT(voluntary)
  RIP: 0010:nsh_key_put_from_nlattr+0x19d/0x610 [openvswitch]
  Call Trace:
   <TASK>
   validate_nsh+0x60/0x90 [openvswitch]
   validate_set.constprop.0+0x270/0x3c0 [openvswitch]
   __ovs_nla_copy_actions+0x477/0x860 [openvswitch]
   ovs_nla_copy_actions+0x8d/0x100 [openvswitch]
   ovs_packet_cmd_execute+0x1cc/0x310 [openvswitch]
   genl_family_rcv_msg_doit+0xdb/0x130
   genl_family_rcv_msg+0x14b/0x220
   genl_rcv_msg+0x47/0xa0
   netlink_rcv_skb+0x53/0x100
   genl_rcv+0x24/0x40
   netlink_unicast+0x280/0x3b0
   netlink_sendmsg+0x1f7/0x430
   ____sys_sendmsg+0x36b/0x3a0
   ___sys_sendmsg+0x87/0xd0
   __sys_sendmsg+0x6d/0xd0
   do_syscall_64+0x7b/0x2c0
   entry_SYSCALL_64_after_hwframe+0x76/0x7e

The third issue with this process is that while trying to convert
the non-masked set into masked one, validate_set() copies and doubles
the size of the OVS_KEY_ATTR_NSH as if it didn't have any nested
attributes.  It should be copying each nested attribute and doubling
them in size independently.  And the process must be properly reversed
during the conversion back from masked to a non-masked variant during
the flow dump.

In the end, the only two outcomes of trying to use this action are
either validation failure or a kernel crash.  And if somehow someone
manages to install a flow with such an action, it will most definitely
not do what it is supposed to, since all the keys and the masks are
mixed up.

Fixing all the issues is a complex task as it requires re-writing
most of the validation code.

Given that and the fact that this functionality never worked since
introduction, let's just remove it altogether.  It's better to
re-introduce it later with a proper implementation instead of trying
to fix it in stable releases.

Fixes: b2d0f5d5dc ("openvswitch: enable NSH support")
Reported-by: Junvy Yang <zhuque@tencent.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Acked-by: Eelco Chaudron <echaudro@redhat.com>
Reviewed-by: Aaron Conole <aconole@redhat.com>
Link: https://patch.msgid.link/20251112112246.95064-1-i.maximets@ovn.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-11-14 18:13:24 -08:00
..
6lowpan
9p
802
8021q net: vlan: sync VLAN features with lower device 2025-10-31 17:42:35 -07:00
appletalk
atm
ax25
batman-adv Here is a batman-adv bugfix: 2025-10-27 18:00:54 -07:00
bluetooth Bluetooth: hci_event: Fix not handling PA Sync Lost event 2025-11-11 08:55:18 -05:00
bpf bpf: Do not disable preemption in bpf_test_run(). 2025-10-17 11:29:35 -07:00
bridge net: bridge: fix MST static key usage 2025-11-06 07:32:17 -08:00
caif
can can: j1939: add missing calls in NETDEV_UNREGISTER notification handler 2025-10-13 21:26:31 +02:00
ceph Some messenger improvements from Eric and Max, a patch to address the 2025-10-10 11:30:19 -07:00
core net: core: prevent NULL deref in generic_hwtstamp_ioctl_lower() 2025-11-13 17:23:21 -08:00
dcb Revert "Documentation: net: add flow control guide and document ethtool API" 2025-10-01 09:48:21 +02:00
devlink net: replace use of system_wq with system_percpu_wq 2025-09-22 17:40:30 -07:00
dns_resolver
dsa net: dsa: tag_brcm: do not mark link local traffic as offloaded 2025-11-10 17:04:19 -08:00
ethernet
ethtool Revert "Documentation: net: add flow control guide and document ethtool API" 2025-10-01 09:48:21 +02:00
handshake net/handshake: Fix memory leak in tls_handshake_accept() 2025-11-10 17:53:47 -08:00
hsr hsr: Follow standard for HSRv0 supervision frames 2025-11-13 15:55:04 +01:00
ieee802154
ife
ipv4 ipv4: route: Prevent rt_bind_exception() from rebinding stale fnhe 2025-11-12 06:46:36 -08:00
ipv6 net/ip6_tunnel: Prevent perpetual tunnel growth 2025-10-13 17:43:46 -07:00
iucv
kcm
key
l2tp
l3mdev
lapb
llc
mac80211 wifi: mac80211: skip rate verification for not captured PSDUs 2025-11-11 09:25:17 +01:00
mac802154
mctp
mpls
mptcp mptcp: fix race condition in mptcp_schedule_work() 2025-11-14 18:12:35 -08:00
ncsi
netfilter netfilter: nft_ct: add seqadj extension for natted connections 2025-10-29 14:47:59 +01:00
netlabel
netlink
netrom
nfc net: nfc: nci: Add parameter validation for packet data 2025-09-30 10:27:14 +02:00
nsh
openvswitch net: openvswitch: remove never-working support for setting nsh fields 2025-11-14 18:13:24 -08:00
packet
phonet
psample
psp net: psp: don't assume reply skbs will have a socket 2025-10-03 10:23:50 -07:00
qrtr
rds net: WQ_PERCPU added to alloc_workqueue users 2025-09-22 17:40:30 -07:00
rfkill net: replace use of system_wq with system_percpu_wq 2025-09-22 17:40:30 -07:00
rose
rxrpc net: WQ_PERCPU added to alloc_workqueue users 2025-09-22 17:40:30 -07:00
sched net_sched: limit try_bulk_dequeue_skb() batches 2025-11-11 17:56:50 -08:00
sctp sctp: prevent possible shift-out-of-bounds in sctp_transport_update_rto 2025-11-10 16:21:05 -08:00
shaper
smc net/smc: fix mismatch between CLC header and proposal 2025-11-10 17:52:09 -08:00
strparser strparser: Fix signed/unsigned mismatch bug 2025-11-07 18:17:16 -08:00
sunrpc nfsd-6.18 fixes: 2025-11-12 18:41:01 -08:00
switchdev
tipc tipc: Fix use-after-free in tipc_mon_reinit_self(). 2025-11-10 18:14:40 -08:00
tls net: tls: Cancel RX async resync request on rcd_delta overflow 2025-10-29 18:32:18 -07:00
unix af_unix: Initialise scc_index in unix_add_edge(). 2025-11-11 13:42:33 +01:00
vmw_vsock vsock: fix lock inversion in vsock_assign_transport() 2025-10-23 16:07:58 +02:00
wireless wifi: cfg80211: add an hrtimer based delayed work item 2025-10-28 14:56:30 +01:00
x25
xdp xsk: Harden userspace-supplied xdp_desc validation 2025-10-10 10:07:48 -07:00
xfrm espintcp: use datagram_poll_queue for socket readiness 2025-10-23 15:46:04 +02:00
compat.c
devres.c
Kconfig dibs: Create drivers/dibs 2025-09-23 11:13:21 +02:00
Kconfig.debug
Makefile
socket.c Networking changes for 6.18. 2025-10-02 15:17:01 -07:00
sysctl_net.c