svn commit: r191123 - user/piso/ipfw/sys/netinet/libalias
Paolo Pisati
piso at FreeBSD.org
Wed Apr 15 14:22:31 PDT 2009
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. */
More information about the svn-src-user
mailing list