Hi, The IPv6 routing header type 0 check should modify *offp only in case of an error, so that the genrated icmp6 packet has the correct pointer. After successful return, *offp should not be modified.
ok? bluhm Index: netinet6/ip6_input.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/ip6_input.c,v retrieving revision 1.250 diff -u -p -r1.250 ip6_input.c --- netinet6/ip6_input.c 6 Aug 2022 15:57:59 -0000 1.250 +++ netinet6/ip6_input.c 11 Aug 2022 19:36:22 -0000 @@ -695,21 +695,23 @@ ip6_check_rh0hdr(struct mbuf *m, int *of do { switch (proto) { case IPPROTO_ROUTING: - *offp = off; if (rh_cnt++) { /* more than one rh header present */ + *offp = off; return (1); } if (off + sizeof(rthdr) > lim) { /* packet to short to make sense */ + *offp = off; return (1); } m_copydata(m, off, sizeof(rthdr), &rthdr); if (rthdr.ip6r_type == IPV6_RTHDR_TYPE_0) { - *offp += offsetof(struct ip6_rthdr, ip6r_type); + *offp = off + + offsetof(struct ip6_rthdr, ip6r_type); return (1); }