svn commit: r191119 - user/piso/ipfw/sys/netinet/libalias

Paolo Pisati piso at FreeBSD.org
Wed Apr 15 13:46:48 PDT 2009


Author: piso
Date: Wed Apr 15 20:46:47 2009
New Revision: 191119
URL: http://svn.freebsd.org/changeset/base/191119

Log:
  Make AliasHandleCUSeeMeOut() mbuf safe.

Modified:
  user/piso/ipfw/sys/netinet/libalias/alias_cuseeme.c

Modified: user/piso/ipfw/sys/netinet/libalias/alias_cuseeme.c
==============================================================================
--- user/piso/ipfw/sys/netinet/libalias/alias_cuseeme.c	Wed Apr 15 20:43:12 2009	(r191118)
+++ user/piso/ipfw/sys/netinet/libalias/alias_cuseeme.c	Wed Apr 15 20:46:47 2009	(r191119)
@@ -59,12 +59,12 @@ __FBSDID("$FreeBSD$");
 #define CUSEEME_PORT_NUMBER 7648
 
 static void
-AliasHandleCUSeeMeOut(struct libalias *la, struct ip *pip, 
-		      struct alias_link *lnk);
+AliasHandleCUSeeMeOut(struct libalias *la, pkt_t ptr, 
+      struct alias_link *lnk);
 
 static void
 AliasHandleCUSeeMeIn(struct libalias *la, struct ip *pip, 
-		     struct in_addr original_addr);
+     struct in_addr original_addr);
 
 static int 
 fingerprint(struct libalias *la, struct alias_data *ah)
@@ -95,15 +95,8 @@ protohandlerin(struct libalias *la, pkt_
 static int 
 protohandlerout(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);
-	AliasHandleCUSeeMeOut(la, pip, ah->lnk);
+	AliasHandleCUSeeMeOut(la, ptr, ah->lnk);
 	return (0);
 }
 
@@ -113,7 +106,7 @@ struct proto_handler handlers[] = {
 	  .pri = 120, 
 	  .dir = OUT, 
 	  .proto = UDP, 
-	  .legacy = 1,
+	  .legacy = 0,
 	  .fingerprint = &fingerprint, 
 	  .protohandler = &protohandlerout
 	}, 
@@ -192,14 +185,20 @@ struct client_info {
 };
 
 static void
-AliasHandleCUSeeMeOut(struct libalias *la, struct ip *pip, struct alias_link *lnk)
+AliasHandleCUSeeMeOut(struct libalias *la, pkt_t ptr, struct alias_link *lnk)
 {
-	struct udphdr *ud = ip_next(pip);
+	struct ip *pip;
+	struct udphdr *ud;
 
+	PULLUP_UDPHDR(pip, ptr);
+	ud = ip_next(pip);
 	if (ntohs(ud->uh_ulen) - sizeof(struct udphdr) >= sizeof(struct cu_header)) {
 		struct cu_header *cu;
 		struct alias_link *cu_lnk;
 
+		PULLUP_SIZE(pip, ptr, (pip->ip_hl << 2) + sizeof(struct udphdr) + 
+		    sizeof(struct cu_header));
+		ud = ip_next(pip);
 		cu = udp_next(ud);
 		if (cu->addr)
 			cu->addr = (u_int32_t) GetAliasAddress(lnk).s_addr;


More information about the svn-src-user mailing list