[email protected]
[Top] [All Lists]

PERFORCE change 113845 for review

Subject: PERFORCE change 113845 for review
From: Paolo Pisati
Date: Thu, 1 Feb 2007 16:59:37 GMT
http://perforce.freebsd.org/chv.cgi?CH=113845

Change 113845 by [email protected]_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. */
 
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/p4-projects
To unsubscribe, send any mail to "[email protected]"

<Prev in Thread] Current Thread [Next in Thread>
  • PERFORCE change 113845 for review, Paolo Pisati <=