Networking fixes for 5.19-rc4, including fixes from bpf and netfilter.

Current release - regressions:
  - netfilter: cttimeout: fix slab-out-of-bounds read in cttimeout_net_exit

Current release - new code bugs:
  - bpf: ftrace: keep address offset in ftrace_lookup_symbols

  - bpf: force cookies array to follow symbols sorting

Previous releases - regressions:
  - ipv4: ping: fix bind address validity check

  - tipc: fix use-after-free read in tipc_named_reinit

  - eth: veth: add updating of trans_start

Previous releases - always broken:
  - sock: redo the psock vs ULP protection check

  - netfilter: nf_dup_netdev: fix skb_under_panic

  - bpf: fix request_sock leak in sk lookup helpers

  - eth: igb: fix a use-after-free issue in igb_clean_tx_ring

  - eth: ice: prohibit improper channel config for DCB

  - eth: at803x: fix null pointer dereference on AR9331 phy

  - eth: virtio_net: fix xdp_rxq_info bug after suspend/resume

Misc:
  - eth: hinic: replace memcpy() with direct assignment

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net: openvswitch: fix parsing of nw_proto for IPv6 fragments

When a packet enters the OVS datapath and does not match any existing
flows installed in the kernel flow cache, the packet will be sent to
userspace to be parsed, and a new flow will be created. The kernel and
OVS rely on each other to parse packet fields in the same way so that
packets will be handled properly.

As per the design document linked below, OVS expects all later IPv6
fragments to have nw_proto=44 in the flow key, so they can be correctly
matched on OpenFlow rules. OpenFlow controllers create pipelines based
on this design.

This behavior was changed by the commit in the Fixes tag so that
nw_proto equals the next_header field of the last extension header.
However, there is no counterpart for this change in OVS userspace,
meaning that this field is parsed differently between OVS and the
kernel. This is a problem because OVS creates actions based on what is
parsed in userspace, but the kernel-provided flow key is used as a match
criteria, as described in Documentation/networking/openvswitch.rst. This
leads to issues such as packets incorrectly matching on a flow and thus
the wrong list of actions being applied to the packet. Such changes in
packet parsing cannot be implemented without breaking the userspace.

The offending commit is partially reverted to restore the expected
behavior.

The change technically made sense and there is a good reason that it was
implemented, but it does not comply with the original design of OVS.
If in the future someone wants to implement such a change, then it must
be user-configurable and disabled by default to preserve backwards
compatibility with existing OVS versions.

Cc: stable@vger.kernel.org
Fixes: fa642f08839b ("openvswitch: Derive IP protocol number for IPv6 later frags")
Link: https://docs.openvswitch.org/en/latest/topics/design/#fragments
Signed-off-by: Rosemarie O'Riorden <roriorden@redhat.com>
Acked-by: Eelco Chaudron <echaudro@redhat.com>
Link: https://lore.kernel.org/r/20220621204845.9721-1-roriorden@redhat.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 file changed