[PATCH 2.6] ip6t_LOG and packets with hop-by-hop options

From: Marcel Sebek
Date: Tue Jul 06 2004 - 10:11:08 EST


Packet with IPPROTO_HOPOPTS extended header isn't logged properly by
ip6t_LOG.c. It only prints PROTO=0 and nothing more, because
IPPROTO_HOPOPTS=0 and in this file 0 is used to indicate last header.
This patch fix it by using IPPROTO_NONE to indicate last header.

Signed-off-by: Marcel Sebek <sebek64@xxxxxxx>


diff -urpN linux-2.6/net/ipv6/netfilter/ip6t_LOG.c linux-2.6-new/net/ipv6/netfilter/ip6t_LOG.c
--- linux-2.6/net/ipv6/netfilter/ip6t_LOG.c 2004-04-21 20:01:54.000000000 +0200
+++ linux-2.6-new/net/ipv6/netfilter/ip6t_LOG.c 2004-07-06 16:48:20.000000000 +0200
@@ -48,10 +48,10 @@ static spinlock_t log_lock = SPIN_LOCK_U

/* takes in current header and pointer to the header */
/* if another header exists, sets hdrptr to the next header
- and returns the new header value, else returns 0 */
+ and returns the new header value, else returns IPPROTO_NONE */
static u_int8_t ip6_nexthdr(u_int8_t currenthdr, u_int8_t **hdrptr)
{
- u_int8_t hdrlen, nexthdr = 0;
+ u_int8_t hdrlen, nexthdr = IPPROTO_NONE;

switch(currenthdr){
case IPPROTO_AH:
@@ -77,7 +77,6 @@ static u_int8_t ip6_nexthdr(u_int8_t cur
break;
}
return nexthdr;
-
}

/* One level of recursion won't kill us */
@@ -101,7 +100,7 @@ static void dump_packet(const struct ip6

fragment = 0;
hdrptr = (u_int8_t *)(ipv6h + 1);
- while (currenthdr) {
+ while (currenthdr != IPPROTO_NONE) {
if ((currenthdr == IPPROTO_TCP) ||
(currenthdr == IPPROTO_UDP) ||
(currenthdr == IPPROTO_ICMPV6))
@@ -264,7 +263,7 @@ static void dump_packet(const struct ip6
}
break;
}
- /* Max length: 10 "PROTO 255 " */
+ /* Max length: 10 "PROTO=255 " */
default:
printk("PROTO=%u ", currenthdr);
}

--
Marcel Sebek
jabber: sebek@xxxxxxxxx ICQ: 279852819
linux user number: 307850 GPG ID: 5F88735E
GPG FP: 0F01 BAB8 3148 94DB B95D 1FCA 8B63 CA06 5F88 735E

Attachment: signature.asc
Description: Digital signature