Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 234821 (CVE-2008-3686) - Linux 2.6.26 rt6_fill_node() NULL dereference (CVE-2008-3686)
Summary: Linux 2.6.26 rt6_fill_node() NULL dereference (CVE-2008-3686)
Status: RESOLVED FIXED
Alias: CVE-2008-3686
Product: Gentoo Security
Classification: Unclassified
Component: Kernel (show other bugs)
Hardware: All Linux
: High normal (vote)
Assignee: Gentoo Security
URL: http://lkml.org/lkml/2008/8/7/230
Whiteboard: [linux >=2.6.26 <2.6.26.3] [gp >=2.6....
Keywords:
Depends on:
Blocks:
 
Reported: 2008-08-15 14:04 UTC by Robert Buchholz (RETIRED)
Modified: 2013-09-12 04:50 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Robert Buchholz (RETIRED) gentoo-dev 2008-08-15 14:04:18 UTC
CVE-2008-3686 (http://nvd.nist.gov/nvd.cfm?cvename=CVE-2008-3686):
  The rt6_fill_node function in Linux kernel 2.6.26-rc4, 2.6.26.2, and possibly
  other 2.6.26 versions, allows local users to cause a denial of service
  (kernel OOPS) via IPv6 requests when no IPv6 input device is in use, which
  triggers a NULL pointer dereference.
Comment 2 kfm 2009-07-20 19:41:37 UTC
Added <2.6.26.2 to version scope in status whiteboard as the aformentioned patch was added in 2.6.26.3. It could be that versions <2.6.26 are affected also but I haven't checked.

PS: Anything using >=genpatches-2.6.26-3 is unaffected
Comment 3 kfm 2009-07-20 19:43:01 UTC
I beg your pardon, the previous comment should have begun with "Added <2.6.26.3 to version scope ..."
Comment 4 kfm 2009-07-23 23:15:03 UTC
I needed to be sure that our 2.6.25 kernel wasn't affected so I took a closer look. In 2.6.26, the offending line of code is as follows:

> if (ipv6_dev_get_saddr(ip6_dst_idev(&rt->u.dst)->dev, dst, 0, &saddr_buf) == 0)

The problem being that the dst entry may be NULL and that there is no prior check for that eventuality. In 2.6.25, it looks like this:

> if (ipv6_get_saddr(&rt->u.dst, dst, &saddr_buf) == 0)

The arguments used by the ipv6_get_saddr() function are different; it doesn't require a net struct pointer as the first argument. Therefore, ip6_dst_idev() is not used here at all, which is where the dereference would otherwise have occurred (but it's an inline function, hence the finger being pointed in the direction of wherever it's employed).

Removing hardened-kernel under the presumption that the above isn't complete and utter nonsense.