PERFORCE change 113845 for review
Paolo Pisati
piso at FreeBSD.org
Thu Feb 1 16:59:38 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=113845
Change 113845 by piso at piso_newluxor on 2007/02/01 16:59:07
Teach mbuf to LibAliasUnaliasOut().
Affected files ...
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#51 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.h#12 edit
Differences ...
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#51 (text+ko) ====
@@ -167,7 +167,7 @@
#define PULLUP_ICMPHDR(pip, ptr) do { \
struct mbuf *m; \
- pip = ptr; \
+ pip = (struct ip *)ptr; \
m = m_pullup((ptr), (pip->ip_hl << 2) + sizeof(struct icmp)); \
(pip) = mtod(m, struct ip *); \
} while (0)
@@ -183,10 +183,10 @@
} while (0)
#else
-#define PULLUP_IPHDR(pip, ptr) pip = ptr
+#define PULLUP_IPHDR(pip, ptr) pip = (struct ip *)ptr
#define PULLUP_UDPHDR(pip, ptr) pip = ptr
#define PULLUP_TCPHDR(pip, ptr) pip = ptr
-#define PULLUP_ICMPHDR(pip, ptr) pip = ptr
+#define PULLUP_ICMPHDR(pip, ptr) pip = (struct ip *)ptr
#define PULLUP_ICMPIP64(pip, ptr, ic) pip = ptr
#endif
@@ -1533,9 +1533,15 @@
}
int
+#ifdef _KERNEL
+LibAliasUnaliasOut(struct libalias *la, struct mbuf *ptr, /* valid IP packet */
+ int maxpacketsize /* for error checking */
+)
+#else
LibAliasUnaliasOut(struct libalias *la, char *ptr, /* valid IP packet */
int maxpacketsize /* for error checking */
)
+#endif
{
struct ip *pip;
struct icmp *ic;
@@ -1545,13 +1551,19 @@
int iresult = PKT_ALIAS_IGNORED;
LIBALIAS_LOCK(la);
- pip = (struct ip *)ptr;
+ PULLUP_IPHDR(pip, ptr);
+ if (pip == NULL)
+ goto getout;
/* Defense against mangled packets */
if (ntohs(pip->ip_len) > maxpacketsize
|| (pip->ip_hl << 2) > maxpacketsize)
goto getout;
+ /* Let's make enough space for any of the protocols header below */
+ PULLUP_ICMPHDR(pip, ptr);
+ if (pip == NULL)
+ goto getout;
ud = (struct udphdr *)ip_next(pip);
tc = (struct tcphdr *)ip_next(pip);
ic = (struct icmp *)ip_next(pip);
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.h#12 (text+ko) ====
@@ -149,12 +149,13 @@
int LibAliasIn (struct libalias *, struct mbuf *_ptr, int _maxpacketsize);
int LibAliasOut(struct libalias *, struct mbuf *_ptr, int _maxpacketsize);
int LibAliasOutTry(struct libalias *, struct mbuf *_ptr, int _maxpacketsize, int _create);
+int LibAliasUnaliasOut(struct libalias *, struct mbuf *_ptr, int _maxpacketsize);
#else
int LibAliasIn (struct libalias *, char *_ptr, int _maxpacketsize);
int LibAliasOut(struct libalias *, char *_ptr, int _maxpacketsize);
int LibAliasOutTry(struct libalias *, char *_ptr, int _maxpacketsize, int _create);
+int LibAliasUnaliasOut(struct libalias *, char *_ptr, int _maxpacketsize);
#endif
-int LibAliasUnaliasOut(struct libalias *, char *_ptr, int _maxpacketsize);
/* Port and address redirection functions. */
More information about the p4-projects
mailing list