From owner-freebsd-net Fri Jun 7 13: 0:41 2002 Delivered-To: freebsd-net@freebsd.org Received: from InterJet.dellroad.org (adsl-63-194-81-26.dsl.snfc21.pacbell.net [63.194.81.26]) by hub.freebsd.org (Postfix) with ESMTP id F1AAB37B415 for ; Fri, 7 Jun 2002 13:00:02 -0700 (PDT) Received: from arch20m.dellroad.org (arch20m.dellroad.org [10.1.1.20]) by InterJet.dellroad.org (8.9.1a/8.9.1) with ESMTP id MAA12231 for ; Fri, 7 Jun 2002 12:57:07 -0700 (PDT) Received: (from archie@localhost) by arch20m.dellroad.org (8.11.6/8.11.6) id g57JtrJ65814 for freebsd-net@freebsd.org; Fri, 7 Jun 2002 12:55:53 -0700 (PDT) (envelope-from archie) From: Archie Cobbs Message-Id: <200206071955.g57JtrJ65814@arch20m.dellroad.org> Subject: m->m_pkthdr.header To: freebsd-net@freebsd.org Date: Fri, 7 Jun 2002 12:55:53 -0700 (PDT) X-Mailer: ELM [version 2.4ME+ PL88 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org Hi, I'd like to get rid of this mbuf field "m->m_pkthdr.header". Here are my reasons: - It's broken. Consider this code: copy = m_copypacket(m); m_freem(m); Typically m->m_pkthdr.header points into the data area of 'm'. So now copy->m_pkthdr.header points at the same data, which has already been freed and possibly reused. - It is an obscure thing most people don't know about and is ripe for causing hard to find bugs. - It's only used in two places, (a) for secret communication between the oltr driver and if_ether.c, and (b) as a temporary variable in ip_input.c: $ find . -type f -print | xargs grep -w m_pkthdr.header ./contrib/dev/oltr/if_oltr.c: m0->m_pkthdr.header = (void *)th; ./netinet/if_ether.c: th = (struct iso88025_header *)m->m_pkthdr.header; ./netinet/ip_input.c: m->m_pkthdr.header = ip; ./netinet/ip_input.c:#define GETIP(m) ((struct ip*)((m)->m_pkthdr.header)) My proposal: - Replace the obfuscating GETIP() macro in ip_input.c with a variable. - Rejigger the oltr driver to pass its "secret" information using an auxillary mbuf instead of m->m_pkthdr.header. Any comments/objections? Thanks, -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message