From owner-svn-src-user@FreeBSD.ORG Wed Apr 15 21:22:29 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D81BD106567D; Wed, 15 Apr 2009 21:22:29 +0000 (UTC) (envelope-from piso@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C46458FC0A; Wed, 15 Apr 2009 21:22:29 +0000 (UTC) (envelope-from piso@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n3FLMTYp055164; Wed, 15 Apr 2009 21:22:29 GMT (envelope-from piso@svn.freebsd.org) Received: (from piso@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n3FLMTFE055163; Wed, 15 Apr 2009 21:22:29 GMT (envelope-from piso@svn.freebsd.org) Message-Id: <200904152122.n3FLMTFE055163@svn.freebsd.org> From: Paolo Pisati Date: Wed, 15 Apr 2009 21:22:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191123 - user/piso/ipfw/sys/netinet/libalias X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2009 21:22:31 -0000 Author: piso Date: Wed Apr 15 21:22:29 2009 New Revision: 191123 URL: http://svn.freebsd.org/changeset/base/191123 Log: Make AliasHandlePptpGreOut & AliasHandlePptpGreIn mbuf safe. Modified: user/piso/ipfw/sys/netinet/libalias/alias_pptp.c Modified: user/piso/ipfw/sys/netinet/libalias/alias_pptp.c ============================================================================== --- user/piso/ipfw/sys/netinet/libalias/alias_pptp.c Wed Apr 15 20:55:20 2009 (r191122) +++ user/piso/ipfw/sys/netinet/libalias/alias_pptp.c Wed Apr 15 21:22:29 2009 (r191123) @@ -75,10 +75,10 @@ static void AliasHandlePptpIn(struct libalias *, struct ip *, struct alias_link *); static int -AliasHandlePptpGreOut(struct libalias *, struct ip *); +AliasHandlePptpGreOut(struct libalias *, pkt_t); static int -AliasHandlePptpGreIn(struct libalias *, struct ip *); +AliasHandlePptpGreIn(struct libalias *, pkt_t); static int fingerprint(struct libalias *la, struct alias_data *ah) @@ -132,16 +132,9 @@ protohandlerout(struct libalias *la, pkt static int protohandlergrein(struct libalias *la, pkt_t ptr, struct alias_data *ah) { - struct ip *pip; -#ifdef _KERNEL - if (ptr == NULL) - pip = (struct ip *)la->buf; - else -#endif - PULLUP_IPHDR(pip, ptr); if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY || - AliasHandlePptpGreIn(la, pip) == 0) + AliasHandlePptpGreIn(la, ptr) == 0) return (0); return (-1); } @@ -149,15 +142,8 @@ protohandlergrein(struct libalias *la, p static int protohandlergreout(struct libalias *la, pkt_t ptr, struct alias_data *ah) { - struct ip *pip; -#ifdef _KERNEL - if (ptr == NULL) - pip = (struct ip *)la->buf; - else -#endif - PULLUP_IPHDR(pip, ptr); - if (AliasHandlePptpGreOut(la, pip) == 0) + if (AliasHandlePptpGreOut(la, ptr) == 0) return (0); return (-1); } @@ -189,7 +175,7 @@ struct proto_handler handlers[] = { .pri = INT_MAX, .dir = IN, .proto = IP, - .legacy = 1, + .legacy = 0, .fingerprint = &fingerprintgre, .protohandler = &protohandlergrein }, @@ -197,7 +183,7 @@ struct proto_handler handlers[] = { .pri = INT_MAX, .dir = OUT, .proto = IP, - .legacy = 1, + .legacy = 0, .fingerprint = &fingerprintgre, .protohandler = &protohandlergreout }, @@ -506,11 +492,14 @@ AliasVerifyPptp(struct ip *pip, u_int16_ } static int -AliasHandlePptpGreOut(struct libalias *la, struct ip *pip) +AliasHandlePptpGreOut(struct libalias *la, pkt_t ptr) { + struct ip *pip; GreHdr *gr; struct alias_link *lnk; + PULLUP_IPHDR(pip, ptr); + PULLUP_SIZE(pip, ptr, (pip->ip_len << 2) + sizeof(GreHdr)); gr = (GreHdr *) ip_next(pip); /* Check GRE header bits. */ @@ -530,11 +519,14 @@ AliasHandlePptpGreOut(struct libalias *l } static int -AliasHandlePptpGreIn(struct libalias *la, struct ip *pip) +AliasHandlePptpGreIn(struct libalias *la, pkt_t ptr) { + struct ip *pip; GreHdr *gr; struct alias_link *lnk; + PULLUP_IPHDR(pip, ptr); + PULLUP_SIZE(pip, ptr, (pip->ip_len << 2) + sizeof(GreHdr)); gr = (GreHdr *) ip_next(pip); /* Check GRE header bits. */