On Tue, Jan 18, 2022 at 12:59:25PM +0100, Christian Ehrhardt wrote: > If so, any volunteers to commit this?
Done. Thanks for fixing this. Two more things: - We need a man page update. I think the missing documentation of this feature was the reason that this bug was introduced. - The strange M_EXT check with the XXX comment in ip input was the reason I looked into this topic long time ago. I think a M_READONLY would make the intention more obvious. ok? bluhm Index: share/man/man9/mbuf.9 =================================================================== RCS file: /data/mirror/openbsd/cvs/src/share/man/man9/mbuf.9,v retrieving revision 1.123 diff -u -p -r1.123 mbuf.9 --- share/man/man9/mbuf.9 8 Mar 2021 02:47:26 -0000 1.123 +++ share/man/man9/mbuf.9 13 Jan 2022 14:36:53 -0000 @@ -570,7 +570,7 @@ is freed. Ensure that the data in the mbuf chain starting at the beginning of the chain and ending at .Fa len -will be put in continuous memory region. +will be put in continuous and writable memory region. If memory must be allocated, then it will fail if the .Fa len argument is greater than MAXMCLBYTES. Index: netinet/ip_input.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.364 diff -u -p -r1.364 ip_input.c --- netinet/ip_input.c 22 Nov 2021 13:47:10 -0000 1.364 +++ netinet/ip_input.c 18 Jan 2022 12:42:14 -0000 @@ -415,7 +415,7 @@ ip_input_if(struct mbuf **mp, int *offp, if (ipmforwarding && ip_mrouter[ifp->if_rdomain]) { int error; - if (m->m_flags & M_EXT) { + if (M_READONLY(m)) { if ((m = *mp = m_pullup(m, hlen)) == NULL) { ipstat_inc(ips_toosmall); goto bad; @@ -532,7 +532,7 @@ ip_ours(struct mbuf **mp, int *offp, int * but it's not worth the time; just let them time out.) */ if (ip->ip_off &~ htons(IP_DF | IP_RF)) { - if (m->m_flags & M_EXT) { /* XXX */ + if (M_READONLY(m)) { if ((m = *mp = m_pullup(m, hlen)) == NULL) { ipstat_inc(ips_toosmall); return IPPROTO_DONE;