A virtio-net header can supply CHECKSUM_PARTIAL metadata whose checksum
start resolves inside a network header. Software checksum completion can
then modify bytes the stack has already parsed.
Patch 1 checks the data-relative L3 origin in the virtio-net conversion
paths. Patch 2 checks the parsed header length before checksum completion
in IPv4 and IPv6 fragmentation paths.
Changes in v6 address Michael S. Tsirkin's review of v5:
- Name the Ethernet-only L3 parser accordingly.
- Derive the AF_PACKET L3 offset and protocol from the actual Ethernet
frame, including inline VLAN tags on an ETH_P_IP raw socket.
- Use the IPv6 base-header minimum for IPv6 checksum-only packets,
including IFF_TUN before skb->protocol is set.
- Restore Assisted-by: LLM on both patches. Patch 2's code is unchanged.
Validation: focused x86 allmodconfig and UML defconfig W=1 object builds,
strict checkpatch, and application of the exact mail series to the stated
base. No runtime regression reproducer was run.
Link: https://lore.kernel.org/netdev/20260921025341.44846-1-habte.yibelo@gmail.com/
Paulos Yibelo (2):
net: validate virtio checksum start after network header
ip: reject partial checksums covering network headers
arch/um/drivers/vector_transports.c | 13 +++-
drivers/net/tun_vnet.h | 52 ++++++++++++-
drivers/net/virtio_net.c | 10 ++-
include/linux/virtio_net.h | 87 ++++++++++++++++++----
net/bridge/netfilter/nf_conntrack_bridge.c | 21 ++++--
net/ipv4/ip_output.c | 23 ++++--
net/ipv6/ip6_output.c | 12 ++-
net/ipv6/netfilter.c | 12 ++-
net/packet/af_packet.c | 24 +++++-
9 files changed, 214 insertions(+), 40 deletions(-)
base-commit: 1e24c4f2ee44be0eee94092b5d13cbdb4bdf0d60
--
2.46.0