All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Haley <brian.haley@hp.com>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: John Gumb <john.gumb@tandberg.com>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: OOPS, ip -f inet6 route get fec0::1, linux-2.6.26,	ip6_route_output, rt6_fill_node+0x175
Date: Fri, 08 Aug 2008 00:57:11 -0400	[thread overview]
Message-ID: <489BD227.6000209@hp.com> (raw)
In-Reply-To: <20080807203748.GA5196@martell.zuzino.mipt.ru>

[-- Attachment #1: Type: text/plain, Size: 1153 bytes --]

Alexey Dobriyan wrote:
> On Thu, Aug 07, 2008 at 07:00:56PM +0200, John Gumb wrote:
>> Scenario: no ipv6 default route set.
> 
>> # ip -f inet6 route get fec0::1
>>
>> BUG: unable to handle kernel NULL pointer dereference at 00000000
>> IP: [<c0369b85>] rt6_fill_node+0x175/0x3b0
>> EIP is at rt6_fill_node+0x175/0x3b0
> 
> 0xffffffff80424dd3 is in rt6_fill_node (net/ipv6/route.c:2191).
> 2186                    } else
> 2187    #endif
> 2188                            NLA_PUT_U32(skb, RTA_IIF, iif);
> 2189            } else if (dst) {
> 2190                    struct in6_addr saddr_buf;
> 2191      ====>         if (ipv6_dev_get_saddr(ip6_dst_idev(&rt->u.dst)->dev,
> 					       ^^^^^^^^^^^^^^^^^^^^^^^^
> 					       		NULL
> 
> 2192                                           dst, 0, &saddr_buf) == 0)
> 2193                            NLA_PUT(skb, RTA_PREFSRC, 16, &saddr_buf);
> 2194            }

The commit that changed this can't be reverted easily, but the patch 
below works for me.

Fix NULL de-reference in rt6_fill_node() when there's no IPv6 input 
device present in the dst entry.

Signed-off-by: Brian Haley <brian.haley@hp.com>



[-- Attachment #2: idev.patch --]
[-- Type: text/x-patch, Size: 551 bytes --]

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 5a3e87e..303a245 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2188,7 +2188,8 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
 			NLA_PUT_U32(skb, RTA_IIF, iif);
 	} else if (dst) {
 		struct in6_addr saddr_buf;
-		if (ipv6_dev_get_saddr(ip6_dst_idev(&rt->u.dst)->dev,
+		struct inet6_dev *idev = ip6_dst_idev(&rt->u.dst);
+		if (ipv6_dev_get_saddr(idev ? idev->dev : NULL,
 				       dst, 0, &saddr_buf) == 0)
 			NLA_PUT(skb, RTA_PREFSRC, 16, &saddr_buf);
 	}

  reply	other threads:[~2008-08-08  4:57 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-07 17:00 OOPS, ip -f inet6 route get fec0::1, linux-2.6.26, ip6_route_output, rt6_fill_node+0x175 John Gumb
2008-08-07 20:37 ` Alexey Dobriyan
2008-08-08  4:57   ` Brian Haley [this message]
2008-08-11  7:41     ` John Gumb
2008-08-11  8:40     ` Eugene Teo
2008-08-11 20:50       ` David Miller
2008-08-12  0:13         ` Eugene Teo
2008-08-12  0:41           ` Eugene Teo
2008-08-12  1:40             ` Eugene Teo
2008-08-11 11:03     ` Eugene Teo
2008-08-12  0:41       ` Brian Haley
2008-08-12  9:11       ` OOPS, ip -f inet6 route get fec0::1, linux-2.6.26,ip6_route_output, rt6_fill_node+0x175 John Gumb
2008-08-13  9:01         ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=489BD227.6000209@hp.com \
    --to=brian.haley@hp.com \
    --cc=adobriyan@gmail.com \
    --cc=john.gumb@tandberg.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.