Check IP length in ether_extract_headers().
authorbluhm <bluhm@openbsd.org>
Wed, 14 Feb 2024 22:41:48 +0000 (22:41 +0000)
committerbluhm <bluhm@openbsd.org>
Wed, 14 Feb 2024 22:41:48 +0000 (22:41 +0000)
commitac5f541a6072f0b9e7989f8663c277a2e904f79f
tree382a3f34b99b55289944afe12eddf2a5b26026bf
parent04fce66c3f2b23675e21714ce2f641775a2f7ce2
Check IP length in ether_extract_headers().

For LRO with ix(4) it is necessary to detect ethernet padding.
Extract ip_len and ip6_plen from the mbuf and provide it to the
drivers.
Add extended sanitity checks, like IP packet is shorter than TCP
header.  This prevents offloading to network hardware with bougus
packets.
Also iphlen of extracted headers contains header length for IPv4
and IPv6, to make code in drivers simpler.

OK mglocker@
sys/dev/pci/if_bnxt.c
sys/dev/pci/if_em.c
sys/dev/pci/if_igc.c
sys/dev/pci/if_ix.c
sys/dev/pci/if_ixl.c
sys/dev/pv/if_vio.c
sys/net/if_ethersubr.c
sys/netinet/if_ether.h