Skip to contentSkip to conversation

: Fix multiple bugs in ip6rt.c

PATCH In review Patrick McHardy 1 participant 1 message Oct 14, 2004 netfilter

lore
Share & tools
lore
#0 lore raw

PATCH 3/5 : Fix multiple bugs in ip6rt.c

This patch fixes an invalid cast and wrong use of the segments_left field in the routing header in ip6rt.c.

# This is a BitKeeper generated diff -Nru style patch. #
# ChangeSet
# 2004/10/14 01:00:37+02:00 [email protected]
# [NETFILTER]: Fix multiple bugs in ip6rt.c
#
# The first patch fixes the following bugs
#
# - Wrong cast the pointer to extension header.
# - "Segments Left" field in Routing Header isn't treated as 1 octet.
#
# Signed-off-by: Yasuyuki KOZAKAI <[email protected]>
# Signed-off-by: Patrick McHardy <[email protected]>
#

# net/ipv6/netfilter/ip6t_rt.c
#   2004/10/14 01:00:09+02:00 [email protected] +4 -4
#   [NETFILTER]: Fix multiple bugs in ip6rt.c
#   
#   The first patch fixes the following bugs
#   
#     - Wrong cast the pointer to extension header.
#     - "Segments Left" field in Routing Header isn't treated as 1 octet.
#   
#   Signed-off-by: Yasuyuki KOZAKAI <[email protected]>
#   Signed-off-by: Patrick McHardy <[email protected]>
# 
diff -Nru a/net/ipv6/netfilter/ip6t_rt.c b/net/ipv6/netfilter/ip6t_rt.c
--- a/net/ipv6/netfilter/ip6t_rt.c	2004-10-14 01:36:59 +02:00
+++ b/net/ipv6/netfilter/ip6t_rt.c	2004-10-14 01:36:59 +02:00
@@ -85,7 +85,7 @@
                      break;
               }

- hdr=(struct ipv6_opt_hdr *)skb->data+ptr;
+ hdr=(struct ipv6_opt_hdr *)(skb->data+ptr);

               /* Calculate the header length */
                 if (nexthdr == NEXTHDR_FRAGMENT) {

@@ -142,11 +142,11 @@

        DEBUGP("IPv6 RT LEN %u %u ", hdrlen, route->hdrlen);
        DEBUGP("TYPE %04X ", route->type);

- DEBUGP("SGS_LEFT %u %08X\n", ntohl(route->segments_left), ntohl(route->segments_left));
+ DEBUGP("SGS_LEFT %u %02X\n", route->segments_left, route->segments_left);

DEBUGP("IPv6 RT segsleft %02X ",
(segsleft_match(rtinfo->segsleft[0], rtinfo->segsleft[1],
- ntohl(route->segments_left),
+ route->segments_left,

                            !!(rtinfo->invflags & IP6T_RT_INV_SGS))));
        DEBUGP("type %02X %02X %02X ",
        		rtinfo->rt_type, route->type, 
@@ -165,7 +165,7 @@
        ret = (route != NULL)
        		&&
        		(segsleft_match(rtinfo->segsleft[0], rtinfo->segsleft[1],
-                           ntohl(route->segments_left),
+                           route->segments_left,
                            !!(rtinfo->invflags & IP6T_RT_INV_SGS)))

&&
(!(rtinfo->flags & IP6T_RT_LEN) ||