linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
@ 2010-11-04 10:09 Marcus Meissner
  2010-11-04 10:11 ` Tejun Heo
                   ` (2 more replies)
  0 siblings, 3 replies; 81+ messages in thread
From: Marcus Meissner @ 2010-11-04 10:09 UTC (permalink / raw)
  To: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm; +Cc: security


Hi,

Making /proc/kallsyms readable only for root makes it harder
for attackers to write generic kernel exploits by removing
one source of knowledge where things are in the kernel.

Signed-off-by: Marcus Meissner <meissner@suse.de>
---
 kernel/kallsyms.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 6f6d091..a8db257 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -546,7 +546,7 @@ static const struct file_operations kallsyms_operations = {
 
 static int __init kallsyms_init(void)
 {
-	proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
+	proc_create("kallsyms", 0400, NULL, &kallsyms_operations);
 	return 0;
 }
 device_initcall(kallsyms_init);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 10:09 [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking Marcus Meissner
@ 2010-11-04 10:11 ` Tejun Heo
  2010-11-05  0:11   ` [Security] " Eugene Teo
  2010-11-04 11:46 ` Ingo Molnar
  2010-11-05  0:20 ` Jesper Juhl
  2 siblings, 1 reply; 81+ messages in thread
From: Tejun Heo @ 2010-11-04 10:11 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, mort, akpm, security

On 11/04/2010 11:09 AM, Marcus Meissner wrote:
> Making /proc/kallsyms readable only for root makes it harder
> for attackers to write generic kernel exploits by removing
> one source of knowledge where things are in the kernel.
> 
> Signed-off-by: Marcus Meissner <meissner@suse.de>

I can't recall needing /proc/kallsyms when I wasn't root, so unless
there's a compelling use case.

Acked-by: Tejun Heo <tj@kernel.org>

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 10:09 [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking Marcus Meissner
  2010-11-04 10:11 ` Tejun Heo
@ 2010-11-04 11:46 ` Ingo Molnar
  2010-11-04 12:29   ` Marcus Meissner
  2010-11-05  0:20 ` Jesper Juhl
  2 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-04 11:46 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin


* Marcus Meissner <meissner@suse.de> wrote:

> Hi,
> 
> Making /proc/kallsyms readable only for root makes it harder for attackers to 
> write generic kernel exploits by removing one source of knowledge where things are 
> in the kernel.

Cc:-ed Linus - i think he argued in favor of such a patch in the past.

I generally agree with such patches (i have written some myself), but there's a few 
questions with this one, which make this limited change ineffective and which make 
it harder to implement a fuller patch that makes it truly harder to figure out the 
precise kernel build:

 - The real security obstruction effect is very small from this measure alone: the 
   overwhelming majority of our users are running distro kernels, so the Symbol.map 
   file (and hence 99% of /proc/kallsyms content) is well-known - unless we also 
   restrict 'uname -r' from nonprivileged users-ace. Hiding that might make sense - 
   but the two should be in one patch really.

 - ( It will break a few tools that can be run as a plain user out of box - perf
     for example. "chmod a+r /proc/kallsyms" during bootup will work that around so
     it's not the end of the world. )

 - For self-built kernels it might make sense - but there's "chmod a-r
   /proc/kallsyms" during bootup one can do already.

 - There's the side-question of module symbols - those are dynamically allocated
   hence arguably per system. But module symbols make up only 1% on a typical 
   booted up full distro box.

So what does a distribution like Suse expect from this change alone? Those have 
public packages in rpms which can be downloaded by anyone, so it makes little sense 
to hide it - unless _all_ version information is hidden.

So i'd like to see a _full_ version info sandboxing patch that thinks through all 
the angles and restricts uname -r kernel version info as well, and makes dmesg 
unaccessible to users - and closes a few other information holes as well that give 
away the exact kernel version - _that_ together will make it hard to blindly attack 
a very specific kernel version.

But without actually declaring and achieving that sandboxing goal this security 
measure is just a feel-good thing really - and makes it harder to make more 
difficult steps down the road, like closing 'uname -r' ...

I fully expect Linus to overrule me on this, but hey, i had to try it and lay out my 
arguments :-)

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 11:46 ` Ingo Molnar
@ 2010-11-04 12:29   ` Marcus Meissner
  2010-11-04 13:58     ` Ingo Molnar
  2010-11-05  2:38     ` Frank Rowand
  0 siblings, 2 replies; 81+ messages in thread
From: Marcus Meissner @ 2010-11-04 12:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin

On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
> 
> * Marcus Meissner <meissner@suse.de> wrote:
> 
> > Hi,
> > 
> > Making /proc/kallsyms readable only for root makes it harder for attackers to 
> > write generic kernel exploits by removing one source of knowledge where things are 
> > in the kernel.
> 
> Cc:-ed Linus - i think he argued in favor of such a patch in the past.
> 
> I generally agree with such patches (i have written some myself), but there's a few 
> questions with this one, which make this limited change ineffective and which make 
> it harder to implement a fuller patch that makes it truly harder to figure out the 
> precise kernel build:
> 
>  - The real security obstruction effect is very small from this measure alone: the 
>    overwhelming majority of our users are running distro kernels, so the Symbol.map 
>    file (and hence 99% of /proc/kallsyms content) is well-known - unless we also 
>    restrict 'uname -r' from nonprivileged users-ace. Hiding that might make sense - 
>    but the two should be in one patch really.

Of course. System.map and others also need to turn to mode 400.

>  - ( It will break a few tools that can be run as a plain user out of box - perf
>      for example. "chmod a+r /proc/kallsyms" during bootup will work that around so
>      it's not the end of the world. )

I was wondering about how much tools there are... I was also thinking of oprofile too.

>  - For self-built kernels it might make sense - but there's "chmod a-r
>    /proc/kallsyms" during bootup one can do already.
> 
>  - There's the side-question of module symbols - those are dynamically allocated
>    hence arguably per system. But module symbols make up only 1% on a typical 
>    booted up full distro box.
> 
> So what does a distribution like Suse expect from this change alone? Those have 
> public packages in rpms which can be downloaded by anyone, so it makes little sense 
> to hide it - unless _all_ version information is hidden.

It is the first patch, mostly an acceptance test balloon.

There are several other files handing information out, but kallsyms has
it all very nice and ready.

(timer_list, /proc/*/stat*, sl?binfo )
 
> So i'd like to see a _full_ version info sandboxing patch that thinks through all 
> the angles and restricts uname -r kernel version info as well, and makes dmesg 
> unaccessible to users - and closes a few other information holes as well that give 
> away the exact kernel version - _that_ together will make it hard to blindly attack 
> a very specific kernel version.

I am personally thinking of a "small steps" philosophy, one step after the other.

> But without actually declaring and achieving that sandboxing goal this security 
> measure is just a feel-good thing really - and makes it harder to make more 
> difficult steps down the road, like closing 'uname -r' ...
> 
> I fully expect Linus to overrule me on this, but hey, i had to try it and lay out my 
> arguments :-)

The goal we (SUSE Security and the oss-security list) had in mind is:

- Do not leak kernel addresses from kernel space to user space to make
  writing kernel exploits harder.

Even if attackers get to have lists of addresses in their exploits it will have made
the world a bit better.

Ciao, Marcus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 12:29   ` Marcus Meissner
@ 2010-11-04 13:58     ` Ingo Molnar
  2010-11-04 14:11       ` Ingo Molnar
  2010-11-05  2:38     ` Frank Rowand
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-04 13:58 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin


* Marcus Meissner <meissner@suse.de> wrote:

> On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
> > 
> > * Marcus Meissner <meissner@suse.de> wrote:
> > 
> > > Hi,
> > > 
> > > Making /proc/kallsyms readable only for root makes it harder for attackers to 
> > > write generic kernel exploits by removing one source of knowledge where things are 
> > > in the kernel.
> > 
> > Cc:-ed Linus - i think he argued in favor of such a patch in the past.
> > 
> > I generally agree with such patches (i have written some myself), but there's a few 
> > questions with this one, which make this limited change ineffective and which make 
> > it harder to implement a fuller patch that makes it truly harder to figure out the 
> > precise kernel build:
> > 
> >  - The real security obstruction effect is very small from this measure alone: the 
> >    overwhelming majority of our users are running distro kernels, so the Symbol.map 
> >    file (and hence 99% of /proc/kallsyms content) is well-known - unless we also 
> >    restrict 'uname -r' from nonprivileged users-ace. Hiding that might make sense - 
> >    but the two should be in one patch really.
> 
> Of course. System.map and others also need to turn to mode 400.

That is not what I meant, at all.

It's not the System.map _on the system_.

It's the SuSE or Fedora kernel rpm package with a System.map in it, which
package the attacker can download from a hundred mirrors on the internet,
based on 'uname -r' output.

You cannot obfuscate the System.map of a distro kernel without obfuscating all 
identification info. (Note that even the pure size of the System.map might tell a 
kernel rpm version from another ...)

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 13:58     ` Ingo Molnar
@ 2010-11-04 14:11       ` Ingo Molnar
  2010-11-04 14:33         ` Marcus Meissner
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-04 14:11 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin


* Ingo Molnar <mingo@elte.hu> wrote:

> * Marcus Meissner <meissner@suse.de> wrote:
> 
> > On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
> > > 
> > > * Marcus Meissner <meissner@suse.de> wrote:
> > > 
> > > > Hi,
> > > > 
> > > > Making /proc/kallsyms readable only for root makes it harder for attackers to 
> > > > write generic kernel exploits by removing one source of knowledge where things are 
> > > > in the kernel.
> > > 
> > > Cc:-ed Linus - i think he argued in favor of such a patch in the past.
> > > 
> > > I generally agree with such patches (i have written some myself), but there's a few 
> > > questions with this one, which make this limited change ineffective and which make 
> > > it harder to implement a fuller patch that makes it truly harder to figure out the 
> > > precise kernel build:
> > > 
> > >  - The real security obstruction effect is very small from this measure alone: the 
> > >    overwhelming majority of our users are running distro kernels, so the Symbol.map 
> > >    file (and hence 99% of /proc/kallsyms content) is well-known - unless we also 
> > >    restrict 'uname -r' from nonprivileged users-ace. Hiding that might make sense - 
> > >    but the two should be in one patch really.
> > 
> > Of course. System.map and others also need to turn to mode 400.
> 
> That is not what I meant, at all.
> 
> It's not the System.map _on the system_.
> 
> It's the SuSE or Fedora kernel rpm package with a System.map in it, which package 
> the attacker can download from a hundred mirrors on the internet, based on 'uname 
> -r' output.

For example, on a Fedora testbox i have this version info:

  $ uname -r
  2.6.35.6-48.fc14.x86_64

Any attacker can download that rpm from:

  http://download.fedora.redhat.com/pub/fedora/linux/updates/14/x86_64/kernel-2.6.35.6-48.fc14.x86_64.rpm

And can extract the System.map from it, using rpm2cpio and cpio -i -d. That will 
include all the symbol addresses - without the attacker having any access to the 
System.map or /proc/kallsyms on this particular box.

I.e. on distro kernel installations (which comprise the _vast_ majority of our 
userbase) your patch brings little security benefits.

What i suggested in later parts of my mail might provide more security: to sandbox 
kernel version information from unprivileged user-space - if we decide that we want 
to sandbox kernel version information ...

That is a big if, because it takes a considerable amount of work. Would be worth 
trying it - but feel-good non-solutions that do not bring much improvement to the 
majority of users IMHO hinder such efforts.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:11       ` Ingo Molnar
@ 2010-11-04 14:33         ` Marcus Meissner
  2010-11-04 14:38           ` Tejun Heo
                             ` (2 more replies)
  0 siblings, 3 replies; 81+ messages in thread
From: Marcus Meissner @ 2010-11-04 14:33 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin

On Thu, Nov 04, 2010 at 03:11:04PM +0100, Ingo Molnar wrote:
> 
> * Ingo Molnar <mingo@elte.hu> wrote:
> 
> > * Marcus Meissner <meissner@suse.de> wrote:
> > 
> > > On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
> > > > 
> > > > * Marcus Meissner <meissner@suse.de> wrote:
> > > > 
> > > > > Hi,
> > > > > 
> > > > > Making /proc/kallsyms readable only for root makes it harder for attackers to 
> > > > > write generic kernel exploits by removing one source of knowledge where things are 
> > > > > in the kernel.
> > > > 
> > > > Cc:-ed Linus - i think he argued in favor of such a patch in the past.
> > > > 
> > > > I generally agree with such patches (i have written some myself), but there's a few 
> > > > questions with this one, which make this limited change ineffective and which make 
> > > > it harder to implement a fuller patch that makes it truly harder to figure out the 
> > > > precise kernel build:
> > > > 
> > > >  - The real security obstruction effect is very small from this measure alone: the 
> > > >    overwhelming majority of our users are running distro kernels, so the Symbol.map 
> > > >    file (and hence 99% of /proc/kallsyms content) is well-known - unless we also 
> > > >    restrict 'uname -r' from nonprivileged users-ace. Hiding that might make sense - 
> > > >    but the two should be in one patch really.
> > > 
> > > Of course. System.map and others also need to turn to mode 400.
> > 
> > That is not what I meant, at all.
> > 
> > It's not the System.map _on the system_.
> > 
> > It's the SuSE or Fedora kernel rpm package with a System.map in it, which package 
> > the attacker can download from a hundred mirrors on the internet, based on 'uname 
> > -r' output.
> 
> For example, on a Fedora testbox i have this version info:
> 
>   $ uname -r
>   2.6.35.6-48.fc14.x86_64
> 
> Any attacker can download that rpm from:
> 
>   http://download.fedora.redhat.com/pub/fedora/linux/updates/14/x86_64/kernel-2.6.35.6-48.fc14.x86_64.rpm
> 
> And can extract the System.map from it, using rpm2cpio and cpio -i -d. That will 
> include all the symbol addresses - without the attacker having any access to the 
> System.map or /proc/kallsyms on this particular box.
> 
> I.e. on distro kernel installations (which comprise the _vast_ majority of our 
> userbase) your patch brings little security benefits.
> 
> What i suggested in later parts of my mail might provide more security: to sandbox 
> kernel version information from unprivileged user-space - if we decide that we want 
> to sandbox kernel version information ...
> 
> That is a big if, because it takes a considerable amount of work. Would be worth 
> trying it - but feel-good non-solutions that do not bring much improvement to the 
> majority of users IMHO hinder such efforts.

Hiding the OS version is really quite hard I think.

I mean the kernel could hide it from uname, but lsb_release,
/etc/redhat-release, /etc/SuSE-release etc still exist and then you
can still use the fixed address list table inside your exploit. But an
exploits needs to have such a list, making it harder to write.

If we avoid exploits being able to just do open("/boot/System.map") it would
make it a useful step harder for exploit writers.

(This will end up a arms race between us and the exploit toolkit writers of course,
but hopefully not a longer one than fixing all actual problems ;)


I also briefly thought about kernel ASLR, but my knowledge of the kernel
loading is too limited whether this is even possible or at all useful.

Ciao, Marcus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:33         ` Marcus Meissner
@ 2010-11-04 14:38           ` Tejun Heo
  2010-11-04 14:43             ` H. Peter Anvin
  2010-11-04 19:08           ` Ingo Molnar
  2010-11-07 18:02           ` Andi Kleen
  2 siblings, 1 reply; 81+ messages in thread
From: Tejun Heo @ 2010-11-04 14:38 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: Ingo Molnar, linux-kernel, jason.wessel, fweisbec, mort, akpm,
	security, Andrew Morton, Linus Torvalds, Peter Zijlstra,
	Thomas Gleixner, H. Peter Anvin

Hello,

On 11/04/2010 03:33 PM, Marcus Meissner wrote:
> I mean the kernel could hide it from uname, but lsb_release,
> /etc/redhat-release, /etc/SuSE-release etc still exist and then you
> can still use the fixed address list table inside your exploit. But an
> exploits needs to have such a list, making it harder to write.

I do believe that making things more difficult to exploit helps.  Many
people seem to think it only gives false sense of security tho.

> I also briefly thought about kernel ASLR, but my knowledge of the kernel
> loading is too limited whether this is even possible or at all useful.

We already have relocatable kernel for kdump and IIRC it doesn't add
runtime overhead, so putting the kernel at random address shouldn't be
too difficult.  Not sure how useful that would be tho.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:38           ` Tejun Heo
@ 2010-11-04 14:43             ` H. Peter Anvin
  2010-11-04 14:48               ` Tejun Heo
  0 siblings, 1 reply; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-04 14:43 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Marcus Meissner, Ingo Molnar, linux-kernel, jason.wessel,
	fweisbec, mort, akpm, security, Andrew Morton, Linus Torvalds,
	Peter Zijlstra, Thomas Gleixner

On 11/04/2010 10:38 AM, Tejun Heo wrote:
> Hello,
>
> On 11/04/2010 03:33 PM, Marcus Meissner wrote:
>> I mean the kernel could hide it from uname, but lsb_release,
>> /etc/redhat-release, /etc/SuSE-release etc still exist and then you
>> can still use the fixed address list table inside your exploit. But an
>> exploits needs to have such a list, making it harder to write.
>
> I do believe that making things more difficult to exploit helps.  Many
> people seem to think it only gives false sense of security tho.
>
>> I also briefly thought about kernel ASLR, but my knowledge of the kernel
>> loading is too limited whether this is even possible or at all useful.
>
> We already have relocatable kernel for kdump and IIRC it doesn't add
> runtime overhead, so putting the kernel at random address shouldn't be
> too difficult.  Not sure how useful that would be tho.
>

It's very coarse-grained relocation, which is why it works.

	-hpa

P.S. It's not just for kdump anymore.

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:43             ` H. Peter Anvin
@ 2010-11-04 14:48               ` Tejun Heo
  0 siblings, 0 replies; 81+ messages in thread
From: Tejun Heo @ 2010-11-04 14:48 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Marcus Meissner, Ingo Molnar, linux-kernel, jason.wessel,
	fweisbec, mort, akpm, security, Andrew Morton, Linus Torvalds,
	Peter Zijlstra, Thomas Gleixner

Hello,

On 11/04/2010 03:43 PM, H. Peter Anvin wrote:
>> We already have relocatable kernel for kdump and IIRC it doesn't add
>> runtime overhead, so putting the kernel at random address shouldn't be
>> too difficult.  Not sure how useful that would be tho.
> 
> It's very coarse-grained relocation, which is why it works.

Yeah, I recall reading the fairly simple relocator somewhere in the
x86 tree.  Would it be impossible/difficult to improve it?

> P.S. It's not just for kdump anymore.

Ah, didn't know that either.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:33         ` Marcus Meissner
  2010-11-04 14:38           ` Tejun Heo
@ 2010-11-04 19:08           ` Ingo Molnar
  2010-11-04 21:29             ` [Security] " Willy Tarreau
  2010-11-07 18:02           ` Andi Kleen
  2 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-04 19:08 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security,
	Andrew Morton, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	H. Peter Anvin


* Marcus Meissner <meissner@suse.de> wrote:

> > For example, on a Fedora testbox i have this version info:
> > 
> >   $ uname -r
> >   2.6.35.6-48.fc14.x86_64
> > 
> > Any attacker can download that rpm from:
> > 
> >   http://download.fedora.redhat.com/pub/fedora/linux/updates/14/x86_64/kernel-2.6.35.6-48.fc14.x86_64.rpm
> > 
> > And can extract the System.map from it, using rpm2cpio and cpio -i -d. That will 
> > include all the symbol addresses - without the attacker having any access to the 
> > System.map or /proc/kallsyms on this particular box.
> > 
> > I.e. on distro kernel installations (which comprise the _vast_ majority of our 
> > userbase) your patch brings little security benefits.
> > 
> > What i suggested in later parts of my mail might provide more security: to 
> > sandbox kernel version information from unprivileged user-space - if we decide 
> > that we want to sandbox kernel version information ...
> > 
> > That is a big if, because it takes a considerable amount of work. Would be worth 
> > trying it - but feel-good non-solutions that do not bring much improvement to 
> > the majority of users IMHO hinder such efforts.
> 
> Hiding the OS version is really quite hard I think.

Yes. Hard but it would be useful - especially if we start adding things like known 
exploit honeypots. Forcing attackers to probe the kernel by actually running a 
kernel exploit, and risking an alarm would be a very powerful security feature.

Removing version info will upset some tools/libraries that rely on kernel version 
information for quirks though.

> I mean the kernel could hide it from uname, but lsb_release, /etc/redhat-release, 
> /etc/SuSE-release etc still exist and then you can still use the fixed address 
> list table inside your exploit. But an exploits needs to have such a list, making 
> it harder to write.
> 
> If we avoid exploits being able to just do open("/boot/System.map") it would make 
> it a useful step harder for exploit writers.

Dunno. It's a very low 'barrier'.

> (This will end up a arms race between us and the exploit toolkit writers of 
> course, but hopefully not a longer one than fixing all actual problems ;)

That's not really an arms race. It's more like a 'throwing a feather in the path of 
a tornado' kind of defense. Sure, it has some effect.

> I also briefly thought about kernel ASLR, but my knowledge of the kernel loading 
> is too limited whether this is even possible or at all useful.

Now ASLR for kernel addresses would be _very_ useful. We could still 'expose' useful 
debug and instrumentation info like /proc/kallsyms, but the kernel internal offset 
would be a per bootup secret.

_That_ is a real statistical defensive security measure which would help everyone 
and everywhere. Not hiding public info on that system and still leaving the link to 
the public info (the version) available.

(Isn't such a feature available in one of the security patches? Porting that to 
distros and moving it upstream would add some real defense.)

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 19:08           ` Ingo Molnar
@ 2010-11-04 21:29             ` Willy Tarreau
  2010-11-04 21:51               ` Ingo Molnar
       [not found]               ` <20101104215157.GA25128@ <20101107090805.GA27983@elte.hu>
  0 siblings, 2 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-04 21:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Thu, Nov 04, 2010 at 08:08:04PM +0100, Ingo Molnar wrote:
> 
> * Marcus Meissner <meissner@suse.de> wrote:
> 
> > > For example, on a Fedora testbox i have this version info:
> > > 
> > >   $ uname -r
> > >   2.6.35.6-48.fc14.x86_64
> > > 
> > > Any attacker can download that rpm from:
> > > 
> > >   http://download.fedora.redhat.com/pub/fedora/linux/updates/14/x86_64/kernel-2.6.35.6-48.fc14.x86_64.rpm
> > > 
> > > And can extract the System.map from it, using rpm2cpio and cpio -i -d. That will 
> > > include all the symbol addresses - without the attacker having any access to the 
> > > System.map or /proc/kallsyms on this particular box.
> > > 
> > > I.e. on distro kernel installations (which comprise the _vast_ majority of our 
> > > userbase) your patch brings little security benefits.
> > > 
> > > What i suggested in later parts of my mail might provide more security: to 
> > > sandbox kernel version information from unprivileged user-space - if we decide 
> > > that we want to sandbox kernel version information ...
> > > 
> > > That is a big if, because it takes a considerable amount of work. Would be worth 
> > > trying it - but feel-good non-solutions that do not bring much improvement to 
> > > the majority of users IMHO hinder such efforts.
> > 
> > Hiding the OS version is really quite hard I think.
> 
> Yes. Hard but it would be useful - especially if we start adding things like known 
> exploit honeypots. Forcing attackers to probe the kernel by actually running a 
> kernel exploit, and risking an alarm would be a very powerful security feature.
> 
> Removing version info will upset some tools/libraries that rely on kernel version 
> information for quirks though.

Quite honnestly, it's the worst idea I've ever read to protect the kernel.
Kernel version is needed at many places, when building some code which relies
on presence of syscall X or Y depending on a version, etc... If our kernel is
so buggy that we can only rely on its version to be kept secret, then we have
already failed.

The kernel version should not be a secret, and anyway there are many ways to
guess it. And judging by past exploits, some of them work on a wide variety
of kernels so that's often pointless. It's just like when admins used to hide
their product names from HTTP response headers, this did not stop exploits at
all because there were always ways to guess the information.

Also, keep in mind that the most info you'll hide from unprivileged users,
the more you'll need root access for anything, which is a lot worse. On
systems that are secured that way, there are sudoers for everyone to do
anything (even ping). This becomes unmanageable and that opens even more
flaws in the whole system. We'll be proud of saying that those are not
kernel issues anymore but management issues but it's a bit easy to point
the finger at the poor guy who tries to keep his system usable despite
our efforts not to do so. And BTW, yes I *do* have access to such a system
where sudo is required for many things and some flaws already give me root
access.

When you secure an environment too much, users build a sub-environment inside
it with lower controls. It's common to see one user provide a complete tool
suite to other users because nothing was installed for fear of opening a hole.
But when you provide all the tools to everyone with you own account, it's just
as if you were root. So that's just pushing the problem somewhere else.

Focusing on ways to make the kernel more reliable when some information is
known is more efficient than trying to hide that information and relying on
this fact.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 21:29             ` [Security] " Willy Tarreau
@ 2010-11-04 21:51               ` Ingo Molnar
  2010-11-04 22:35                 ` Willy Tarreau
       [not found]               ` <20101104215157.GA25128@ <20101107090805.GA27983@elte.hu>
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-04 21:51 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> On Thu, Nov 04, 2010 at 08:08:04PM +0100, Ingo Molnar wrote:
> > 
> > * Marcus Meissner <meissner@suse.de> wrote:
> > 
> > > > For example, on a Fedora testbox i have this version info:
> > > > 
> > > >   $ uname -r
> > > >   2.6.35.6-48.fc14.x86_64
> > > > 
> > > > Any attacker can download that rpm from:
> > > > 
> > > >   http://download.fedora.redhat.com/pub/fedora/linux/updates/14/x86_64/kernel-2.6.35.6-48.fc14.x86_64.rpm
> > > > 
> > > > And can extract the System.map from it, using rpm2cpio and cpio -i -d. That will 
> > > > include all the symbol addresses - without the attacker having any access to the 
> > > > System.map or /proc/kallsyms on this particular box.
> > > > 
> > > > I.e. on distro kernel installations (which comprise the _vast_ majority of our 
> > > > userbase) your patch brings little security benefits.
> > > > 
> > > > What i suggested in later parts of my mail might provide more security: to 
> > > > sandbox kernel version information from unprivileged user-space - if we decide 
> > > > that we want to sandbox kernel version information ...
> > > > 
> > > > That is a big if, because it takes a considerable amount of work. Would be worth 
> > > > trying it - but feel-good non-solutions that do not bring much improvement to 
> > > > the majority of users IMHO hinder such efforts.
> > > 
> > > Hiding the OS version is really quite hard I think.
> > 
> > Yes. Hard but it would be useful - especially if we start adding things like known 
> > exploit honeypots. Forcing attackers to probe the kernel by actually running a 
> > kernel exploit, and risking an alarm would be a very powerful security feature.
> > 
> > Removing version info will upset some tools/libraries that rely on kernel 
> > version information for quirks though.
> 
> Quite honnestly, it's the worst idea I've ever read to protect the kernel. Kernel 
> version is needed at many places, when building some code which relies on presence 
> of syscall X or Y depending on a version, etc... [...]

Actually that's not true, since we have a kernel ABI, and since there's many 
backports of newer kernel features into older kernels that it's generally not
needed nor meaningful to know the kernel version for syscalls.

Returning -ENOSYS is the general standard we use to communicate syscall 
capabilities.

In fact using kernel version to switch around library functionality is a bug i'd 
argue.

> [...] If our kernel is so buggy that we can only rely on its version to be kept 
> secret, then we have already failed.

That mischaracterises my suggestion rather heavily - which makes me suspect that you 
misunderstood it. Here's the relevant section of what i suggested here:

> > Hard but it would be useful - especially if we start adding things like known 
> > exploit honeypots. Forcing attackers to probe the kernel by actually running a 
> > kernel exploit, and risking an alarm would be a very powerful security feature.

An 'exploit honeypot' would be some small amount of 'detection' code for the 
exploitable pattern of parameters (most attacks come via ioctls so we can add 
detection for known holes without any performance hit), and the kernel would warn 
the sysadmin that an exploit attempt has occured.

The point is to make it riskier to run exploits - not to 'hide version because we 
are so buggy'. Unprivileged attackers wont be able to know whether a kernel is 
unpatched and wont know whether trying an actual exploit triggers a silent alarm or 
not.

I.e. i think the only true break-through in kernel security will be to add credible 
and substantial 'strike back' functionality - to increase the risks of detection 
(which necessiates the removal of the information whether a kernel is patched or 
not).

As i said it's hard - but it would be a rather break-through security feature for 
Linux. Not an 'arms race' thing where we just put obstruction in the road of 
attackers - but some real, unavoidable risk not detectable by attackers - running on 
most stock distro kernels. (so there would be a real economy of scale)

The kerneloops client could also collect exploit attempt stats.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 21:51               ` Ingo Molnar
@ 2010-11-04 22:35                 ` Willy Tarreau
  2010-11-04 23:46                   ` Willy Tarreau
                                     ` (3 more replies)
  0 siblings, 4 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-04 22:35 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Thu, Nov 04, 2010 at 10:51:57PM +0100, Ingo Molnar wrote:
> > Quite honnestly, it's the worst idea I've ever read to protect the kernel. Kernel 
> > version is needed at many places, when building some code which relies on presence 
> > of syscall X or Y depending on a version, etc... [...]
> 
> Actually that's not true, since we have a kernel ABI, and since there's many 
> backports of newer kernel features into older kernels that it's generally not
> needed nor meaningful to know the kernel version for syscalls.
> 
> Returning -ENOSYS is the general standard we use to communicate syscall 
> capabilities.
> 
> In fact using kernel version to switch around library functionality is a bug i'd 
> argue.

I'm sorry Ingo, but I still don't agree. We've had several versions of epoll,
several (some even buggy) versions of splice() which cannot even be detected
without checking the kernel release. And those are just two that immediately
come to my mind. If we've been providing a version for the last 19 years, it
surely had some valid uses.

> > [...] If our kernel is so buggy that we can only rely on its version to be kept 
> > secret, then we have already failed.
> 
> That mischaracterises my suggestion rather heavily - which makes me suspect that you 
> misunderstood it. Here's the relevant section of what i suggested here:
> 
> > > Hard but it would be useful - especially if we start adding things like known 
> > > exploit honeypots. Forcing attackers to probe the kernel by actually running a 
> > > kernel exploit, and risking an alarm would be a very powerful security feature.

I have read it, but this does not require hiding the kernel version. You can
still keep your honey pots if you want (provided that they don't slow down
normal syscall path) and log suspect attempts. But if you're hiding the version,
those tricks will be used by valid programs too.

> An 'exploit honeypot' would be some small amount of 'detection' code for the 
> exploitable pattern of parameters (most attacks come via ioctls so we can add 
> detection for known holes without any performance hit), and the kernel would warn 
> the sysadmin that an exploit attempt has occured.

If we pollute the ioctl code with all the CVEs we have accumulated over the
years, I bet we'd get a performance hit and will probably introduce new bugs
due to the harder to maintain code.

> The point is to make it riskier to run exploits - not to 'hide version because we 
> are so buggy'. Unprivileged attackers wont be able to know whether a kernel is 
> unpatched and wont know whether trying an actual exploit triggers a silent alarm or 
> not.

In my opinion, hiding the distro-specific part of the version should not cause
too much harm, but still I find this useless.

You see, I've used the vmsplice exploit at one place. Do you know how I did ?
$ cat /etc/redhat-release

Then I opened the box and installed the DVD showing the same version on a
spare PC to experiment with it. Once I got the exploit to reliably work without
crashing the kernel nor leaving traces, I dared launching it on the target
machine and it worked. Uname -r was not involved there. I simply relied on
the fact that updating a distro is a pain at many places and that it's very
rare to find an updated one because of that, so they remain with the shipped
kernel for months if not years, and sometimes even because some product
vendors say "my product supports Red Hat kernel 2.6.18-128xxx" so they don't
want to risk losing the support because they don't understand anything to
versioning.

So if we make fixes easier to install, we'd probably have less issues with
unfixed code than if we try to pretend they're not vulnerable by hiding the
version.

> I.e. i think the only true break-through in kernel security will be to add credible 
> and substantial 'strike back' functionality - to increase the risks of detection 
> (which necessiates the removal of the information whether a kernel is patched or 
> not).
> 
> As i said it's hard - but it would be a rather break-through security feature for 
> Linux.

It requires hiding so many things for providing so little protection that I
really don't believe in it at all. Simply checking the system uptime the
last most date of /boot generally tells you precise info about the last
udpate.

> Not an 'arms race' thing where we just put obstruction in the road of 
> attackers - but some real, unavoidable risk not detectable by attackers - running on 
> most stock distro kernels. (so there would be a real economy of scale)
> 
> The kerneloops client could also collect exploit attempt stats.

Well, in my opinion, either the attacker is remote and you can already get
many info, or he's local and has time to precisely qualify the environment
in order not to leave the slightest trace. The rule is simple : if you don't
trust your local users, remain up to date. One day lag once and you lose.

Regards,
Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 22:35                 ` Willy Tarreau
@ 2010-11-04 23:46                   ` Willy Tarreau
  2010-11-07  8:50                   ` Ingo Molnar
                                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-04 23:46 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: security, Marcus Meissner, mort, Peter Zijlstra, fweisbec,
	jason.wessel, linux-kernel, H. Peter Anvin, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Thu, Nov 04, 2010 at 11:35:26PM +0100, Willy Tarreau wrote:
> > The point is to make it riskier to run exploits - not to 'hide version because we 
> > are so buggy'. Unprivileged attackers wont be able to know whether a kernel is 
> > unpatched and wont know whether trying an actual exploit triggers a silent alarm or 
> > not.
> 
> In my opinion, hiding the distro-specific part of the version should not cause
> too much harm, but still I find this useless.

BTW, if you want to hide the kernel version for the 99% distro kernels,
there's a very simple way to do that : just don't bump EXTRAVERSION nor
the build date in official builds. Keep it the same for all the product's
life, and provide the real name in a /proc entry that is only readable by
root by default. This will solve your issue with the exact kernel version
revealing pointers/bugs without hurting compatibility with user space
tools.

That will not hide the hints I was talking about though (uptime, dir mod
time, ...) but it will provide you with a version unrelated to the bug
level.

Regards,
Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 10:11 ` Tejun Heo
@ 2010-11-05  0:11   ` Eugene Teo
  0 siblings, 0 replies; 81+ messages in thread
From: Eugene Teo @ 2010-11-05  0:11 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Marcus Meissner, security, mort, fweisbec, linux-kernel,
	jason.wessel, Linus Torvalds

On Thu, Nov 4, 2010 at 6:11 PM, Tejun Heo <tj@kernel.org> wrote:
> On 11/04/2010 11:09 AM, Marcus Meissner wrote:
>> Making /proc/kallsyms readable only for root makes it harder
>> for attackers to write generic kernel exploits by removing
>> one source of knowledge where things are in the kernel.
>>
>> Signed-off-by: Marcus Meissner <meissner@suse.de>
>
> I can't recall needing /proc/kallsyms when I wasn't root, so unless
> there's a compelling use case.
>
> Acked-by: Tejun Heo <tj@kernel.org>

Looks good to me too.

Acked-by: Eugene Teo <eugeneteo@kernel.org>

Eugene

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 10:09 [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking Marcus Meissner
  2010-11-04 10:11 ` Tejun Heo
  2010-11-04 11:46 ` Ingo Molnar
@ 2010-11-05  0:20 ` Jesper Juhl
  2 siblings, 0 replies; 81+ messages in thread
From: Jesper Juhl @ 2010-11-05  0:20 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: linux-kernel, jason.wessel, fweisbec, tj, mort, akpm, security

On Thu, 4 Nov 2010, Marcus Meissner wrote:

> 
> Hi,
> 
> Making /proc/kallsyms readable only for root makes it harder
> for attackers to write generic kernel exploits by removing
> one source of knowledge where things are in the kernel.
> 
> Signed-off-by: Marcus Meissner <meissner@suse.de>
> ---
>  kernel/kallsyms.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
> index 6f6d091..a8db257 100644
> --- a/kernel/kallsyms.c
> +++ b/kernel/kallsyms.c
> @@ -546,7 +546,7 @@ static const struct file_operations kallsyms_operations = {
>  
>  static int __init kallsyms_init(void)
>  {
> -	proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
> +	proc_create("kallsyms", 0400, NULL, &kallsyms_operations);
>  	return 0;
>  }
>  device_initcall(kallsyms_init);
> 

This doesn't harden things much, but a little is better than nothing.
This makes sense to me and looks OK.

Reviewed-by: Jesper Juhl <jj@chaosbits.net>


-- 
Jesper Juhl <jj@chaosbits.net>             http://www.chaosbits.net/
Plain text mails only, please      http://www.expita.com/nomime.html
Don't top-post  http://www.catb.org/~esr/jargon/html/T/top-post.html


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 12:29   ` Marcus Meissner
  2010-11-04 13:58     ` Ingo Molnar
@ 2010-11-05  2:38     ` Frank Rowand
  2010-11-10 20:58       ` Jesper Juhl
  1 sibling, 1 reply; 81+ messages in thread
From: Frank Rowand @ 2010-11-05  2:38 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: Ingo Molnar, linux-kernel, jason.wessel, fweisbec, tj, mort,
	akpm, security, Andrew Morton, Linus Torvalds, Peter Zijlstra,
	Thomas Gleixner, H. Peter Anvin

On 11/04/10 05:29, Marcus Meissner wrote:
> On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
>>
>> * Marcus Meissner <meissner@suse.de> wrote:
>>
>>> Hi,
>>>
>>> Making /proc/kallsyms readable only for root makes it harder for attackers to 
>>> write generic kernel exploits by removing one source of knowledge where things are 
>>> in the kernel.

< snip >

>> So what does a distribution like Suse expect from this change alone? Those have 
>> public packages in rpms which can be downloaded by anyone, so it makes little sense 
>> to hide it - unless _all_ version information is hidden.
> 
> It is the first patch, mostly an acceptance test balloon.
> 
> There are several other files handing information out, but kallsyms has
> it all very nice and ready.
> 
> (timer_list, /proc/*/stat*, sl?binfo )
>  
>> So i'd like to see a _full_ version info sandboxing patch that thinks through all 
>> the angles and restricts uname -r kernel version info as well, and makes dmesg 
>> unaccessible to users - and closes a few other information holes as well that give 
>> away the exact kernel version - _that_ together will make it hard to blindly attack 
>> a very specific kernel version.
> 
> I am personally thinking of a "small steps" philosophy, one step after the other.

< snip >

The idea of trying to hide the kernel version is absurd.  The number of different
places that can provide a precise fingerprint of a kernel version, or a small range of
possible kernel versions is immense.  Closing all of those places makes use and
administration of a system more difficult, and encourages frequent use of su.

Dumb examples of version clues (beyond the obvious simple ones):

$ gcc -v
Target: x86_64-redhat-linux
gcc version 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC)

$ rpm -qi gcc
Release     : 10.fc13                       Build Date: Wed Jun 30 02:54:10 2010

$ rpm -qi kernel
Version     : 2.6.33.3                          Vendor: Fedora Project
Release     : 85.fc13                       Build Date: Thu May  6 11:35:36 2010

$ ls -l /lib64
$ ls -l /boot
$ lsmod


-Frank


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 22:35                 ` Willy Tarreau
  2010-11-04 23:46                   ` Willy Tarreau
@ 2010-11-07  8:50                   ` Ingo Molnar
  2010-11-07  9:08                     ` Ingo Molnar
  2010-11-07  9:49                     ` Willy Tarreau
  2010-11-07  8:56                   ` Ingo Molnar
  2010-11-07  9:03                   ` Ingo Molnar
  3 siblings, 2 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07  8:50 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> On Thu, Nov 04, 2010 at 10:51:57PM +0100, Ingo Molnar wrote:
> > > Quite honnestly, it's the worst idea I've ever read to protect the kernel. Kernel 
> > > version is needed at many places, when building some code which relies on presence 
> > > of syscall X or Y depending on a version, etc... [...]
> > 
> > Actually that's not true, since we have a kernel ABI, and since there's many 
> > backports of newer kernel features into older kernels that it's generally not
> > needed nor meaningful to know the kernel version for syscalls.
> > 
> > Returning -ENOSYS is the general standard we use to communicate syscall 
> > capabilities.
> > 
> > In fact using kernel version to switch around library functionality is a bug i'd 
> > argue.
> 
> I'm sorry Ingo, but I still don't agree. We've had several versions of epoll, 
> several (some even buggy) versions of splice() which cannot even be detected 
> without checking the kernel release. And those are just two that immediately come 
> to my mind. If we've been providing a version for the last 19 years, it surely had 
> some valid uses.

I'm sorry Willy, but you are mostly wrong - and there's no need to speculate here 
really. Just try the patch below :-)

If your claim that 'kernel version is needed at many places' is true then why am i 
seeing this on a pretty general distro box bootup:

 [root@aldebaran ~]# uname -a
 Linux aldebaran 2.6.99-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7 10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux

?

Yes, some user-space might be unhappy if we set the version _back_ to say 2.4.0, but 
we could (as the patch below) fuzz up the version information from unprivileged 
attackers easily.

_Future_ ABI breakages that necessiate a version check are clearly frowned upon, so 
this patch could even be considered a debugging feature: it makes it harder to 
create ABI incompatibilities (at least for unprivileged user-space).

So you can think of version fuzzing also as the ultimate ABI check.

( This is a real defensive measure - here's a reason why attackers try stealth
  remote fingerprinting of a target system first: they really want to avoid 
  detection and knowing the exact OS and version of a target tells them which 
  attacks can be tried with a higher chance of success. Same goes for local attacks 
  as well.

  And once we have _that_, version fuzzing, removing kallsyms is one of the many 
  measures we need to use to hide the true version of the kernel from unprivileged 
  user-space. )

Thanks,

	Ingo

Index: linux/Makefile
===================================================================
--- linux.orig/Makefile
+++ linux/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
-SUBLEVEL = 37
-EXTRAVERSION = -rc1
+SUBLEVEL = 99
+EXTRAVERSION =
 NAME = Flesh-Eating Bats with Fangs
 
 # *DOCUMENTATION*

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 22:35                 ` Willy Tarreau
  2010-11-04 23:46                   ` Willy Tarreau
  2010-11-07  8:50                   ` Ingo Molnar
@ 2010-11-07  8:56                   ` Ingo Molnar
  2010-11-07  9:03                   ` Ingo Molnar
  3 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07  8:56 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> > Not an 'arms race' thing where we just put obstruction in the road of attackers 
> > - but some real, unavoidable risk not detectable by attackers - running on most 
> > stock distro kernels. (so there would be a real economy of scale)
> > 
> > The kerneloops client could also collect exploit attempt stats.
> 
> Well, in my opinion, either the attacker is remote and you can already get many 
> info, or he's local and has time to precisely qualify the environment in order not 
> to leave the slightest trace. [...]

Your view of how attackers operate is rather simplistic. Knowing the precise 
environment (via remote or local measures) is a big tactical advantage to them.

See the very patch we are discussing. People are submitting patches to hide certain 
pieces of information exactly because that information is an advantage to attackers.

And my point is that "if you want to hide information do it effectively - or if it's 
too hard dont do it at all".

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 22:35                 ` Willy Tarreau
                                     ` (2 preceding siblings ...)
  2010-11-07  8:56                   ` Ingo Molnar
@ 2010-11-07  9:03                   ` Ingo Molnar
  3 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07  9:03 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> > An 'exploit honeypot' would be some small amount of 'detection' code for the 
> > exploitable pattern of parameters (most attacks come via ioctls so we can add 
> > detection for known holes without any performance hit), and the kernel would 
> > warn the sysadmin that an exploit attempt has occured.
> 
> If we pollute the ioctl code with all the CVEs we have accumulated over the years, 
> I bet we'd get a performance hit and will probably introduce new bugs due to the 
> harder to maintain code.

That's just wrong, because it's usually not the same ioctl hit with dozens of CVEs, 
but lots of CVEs are spread out amongst lots of ioctls. You need to come up with 
something more concrete than "I bet" to support that claim ;-)

> > The point is to make it riskier to run exploits - not to 'hide version because 
> > we are so buggy'. Unprivileged attackers wont be able to know whether a kernel 
> > is unpatched and wont know whether trying an actual exploit triggers a silent 
> > alarm or not.
> 
> In my opinion, hiding the distro-specific part of the version should not cause too 
> much harm, but still I find this useless.
>
> 
> You see, I've used the vmsplice exploit at one place. Do you know how I did ? $ 
> cat /etc/redhat-release
> 
> Then I opened the box and installed the DVD showing the same version on a spare PC 
> to experiment with it. Once I got the exploit to reliably work without crashing 
> the kernel nor leaving traces, I dared launching it on the target machine and it 
> worked. Uname -r was not involved there. [...]

Sigh, you _still_ have not understood my point and you clearly dont seem to know how 
honeypots work.

An 'exploit honeypot' kernel feature, on a patched kernel, would at that point warn 
the admin that local user XXX tried to run an exploit.

The point is that the attacker cannot know whether it's safe to run the exploit on 
the box (will result in a compromise), or is not safe to run the exploit (the 
honeypot code will warn the admin).

Uname -r fuzzing is not needed because the attacker 'needs to run it' to compromise 
a vulnerable system (as you seem to believe). It's done because if the attacker runs 
it on a _not vulnerable machine_, it keeps him from running the exploit.

In short, it removes the 'is it safe to try this exploit' information from the 
system - and if there's also a honeypot there, it introduces a real (and if done 
well enough, undetectable) risk of detection for the attacker.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07  8:50                   ` Ingo Molnar
@ 2010-11-07  9:08                     ` Ingo Molnar
  2010-11-07  9:49                     ` Willy Tarreau
  1 sibling, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07  9:08 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Ingo Molnar <mingo@elte.hu> wrote:

> If your claim that 'kernel version is needed at many places' is true then why am i 
> seeing this on a pretty general distro box bootup:
> 
>  [root@aldebaran ~]# uname -a
>  Linux aldebaran 2.6.99-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7 10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux
> 
> ?
> 
> Yes, some user-space might be unhappy if we set the version _back_ to say 2.4.0, 
> but we could (as the patch below) fuzz up the version information from 
> unprivileged attackers easily.

Btw., with an 'exploit honeypot' and 'version fuzzing' the uname output would look 
like this to an unprivileged user:

  $ uname -a
  Linux aldebaran 2.6.99 x86_64 x86_64 x86_64 GNU/Linux

[ we wouldnt want to include the date or the SHA1 of the kernel, obviously. ]

And it would look like this to root:

  # uname -a
  Linux aldebaran 2.6.37-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7 10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07  8:50                   ` Ingo Molnar
  2010-11-07  9:08                     ` Ingo Molnar
@ 2010-11-07  9:49                     ` Willy Tarreau
  2010-11-07 11:27                       ` Ingo Molnar
  2010-11-07 11:42                       ` Ingo Molnar
  1 sibling, 2 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07  9:49 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

Hi Ingo,

On Sun, Nov 07, 2010 at 09:50:16AM +0100, Ingo Molnar wrote:
> 
> * Willy Tarreau <w@1wt.eu> wrote:
> 
> > On Thu, Nov 04, 2010 at 10:51:57PM +0100, Ingo Molnar wrote:
> > > > Quite honnestly, it's the worst idea I've ever read to protect the kernel. Kernel 
> > > > version is needed at many places, when building some code which relies on presence 
> > > > of syscall X or Y depending on a version, etc... [...]
> > > 
> > > Actually that's not true, since we have a kernel ABI, and since there's many 
> > > backports of newer kernel features into older kernels that it's generally not
> > > needed nor meaningful to know the kernel version for syscalls.
> > > 
> > > Returning -ENOSYS is the general standard we use to communicate syscall 
> > > capabilities.
> > > 
> > > In fact using kernel version to switch around library functionality is a bug i'd 
> > > argue.
> > 
> > I'm sorry Ingo, but I still don't agree. We've had several versions of epoll, 
> > several (some even buggy) versions of splice() which cannot even be detected 
> > without checking the kernel release. And those are just two that immediately come 
> > to my mind. If we've been providing a version for the last 19 years, it surely had 
> > some valid uses.
> 
> I'm sorry Willy, but you are mostly wrong - and there's no need to speculate here 
> really. Just try the patch below :-)
> 
> If your claim that 'kernel version is needed at many places' is true then why am i 
> seeing this on a pretty general distro box bootup:
> 
>  [root@aldebaran ~]# uname -a
>  Linux aldebaran 2.6.99-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7 10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux

I don't understand the point you're trying to make with this patch. Obviously
we can pretend to be any version, and by doing that, you also pretend not to
have some bugs that would have been fixed later after the *real* version.

What I'm saying is that history has shown that we have known bugs that are
not detectable by any other way than the kernel version. Take the splice()
data corruption bug for instance. I believe it was fixed in 2.6.26 or 2.6.27
and backported late in the 2.6.25.X stable branch. Due to this, without
knowing the kernel version, the user can't know whether it's safe to use
splice() or not. I'm particularly aware of this one because I got quite a
bunch of questions from users on this subject. But certainly there are a
bunch of other ones.

> Yes, some user-space might be unhappy if we set the version _back_ to say 2.4.0, but 
> we could (as the patch below) fuzz up the version information from unprivileged 
> attackers easily.

I think you understood my concerns about breaking compatibility with userspace
by announcing a wrong version. That's not what I'm saying, but rather that
user-space couldn't rely on the version anymore to avoid known bugs.

> _Future_ ABI breakages that necessiate a version check are clearly frowned upon, so 
> this patch could even be considered a debugging feature: it makes it harder to 
> create ABI incompatibilities (at least for unprivileged user-space).

Stating this will not change the behaviour WRT bugs unfortunately.

> So you can think of version fuzzing also as the ultimate ABI check.
>
> 
> ( This is a real defensive measure - here's a reason why attackers try stealth
>   remote fingerprinting of a target system first: they really want to avoid 
>   detection and knowing the exact OS and version of a target tells them which 
>   attacks can be tried with a higher chance of success. Same goes for local attacks 
>   as well.
> 
>   And once we have _that_, version fuzzing, removing kallsyms is one of the many 
>   measures we need to use to hide the true version of the kernel from unprivileged 
>   user-space. )

I think you didn't understand me. I was explaining that doing this will not
prevent them from guessing the precise kernel version, because if you're on
a mainstream distro, just check the uptime. If last reboot matches the next
day of a kernel release, most likely it's this version. Same for /boot
modification date. And conversely, when you find an uptime of 800 days, you
know for sure that your freshly discovered bug is still present, no need of
uname for that. And I gave you examples of that which have worked.

That's why I'm claiming that version fuzzing brings nothing *really* useful.
It just makes admin think they're secure but that's false.

Also as I said, if you want your distro to hide the bug fix level, simply
rebuild the kernel with a fixed EXTRAVERSION string, or ask the kernel
maintainers there not to update the EXTRAVERSION anymore and you'll have
your version fuzzing for free without changing any kernel code. But I'm
still certain it will not bring any value.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07  9:49                     ` Willy Tarreau
@ 2010-11-07 11:27                       ` Ingo Molnar
  2010-11-07 11:41                         ` Willy Tarreau
  2010-11-07 11:42                       ` Ingo Molnar
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 11:27 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> Hi Ingo,
> 
> On Sun, Nov 07, 2010 at 09:50:16AM +0100, Ingo Molnar wrote:
> > 
> > * Willy Tarreau <w@1wt.eu> wrote:
> > 
> > > On Thu, Nov 04, 2010 at 10:51:57PM +0100, Ingo Molnar wrote:
> > > > > Quite honnestly, it's the worst idea I've ever read to protect the kernel. Kernel 
> > > > > version is needed at many places, when building some code which relies on presence 
> > > > > of syscall X or Y depending on a version, etc... [...]
> > > > 
> > > > Actually that's not true, since we have a kernel ABI, and since there's many 
> > > > backports of newer kernel features into older kernels that it's generally not
> > > > needed nor meaningful to know the kernel version for syscalls.
> > > > 
> > > > Returning -ENOSYS is the general standard we use to communicate syscall 
> > > > capabilities.
> > > > 
> > > > In fact using kernel version to switch around library functionality is a bug i'd 
> > > > argue.
> > > 
> > > I'm sorry Ingo, but I still don't agree. We've had several versions of epoll, 
> > > several (some even buggy) versions of splice() which cannot even be detected 
> > > without checking the kernel release. And those are just two that immediately come 
> > > to my mind. If we've been providing a version for the last 19 years, it surely had 
> > > some valid uses.
> > 
> > I'm sorry Willy, but you are mostly wrong - and there's no need to speculate here 
> > really. Just try the patch below :-)
> > 
> > If your claim that 'kernel version is needed at many places' is true then why am i 
> > seeing this on a pretty general distro box bootup:
> > 
> >  [root@aldebaran ~]# uname -a
> >  Linux aldebaran 2.6.99-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7 10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux
> 
> I don't understand the point you're trying to make with this patch. [...]

It was a simple experiement to support my rather simple argument which you disputed.

> [...] Obviously we can pretend to be any version, [...]

Ok, it's a pretty cavalier style of arguing that you now essentially turn around 
your earlier claim that the 'kernel version is needed at many places' and say what 
i've been saying, prefixed with 'obviously' ;-)

Yes, it's obvious that the kernel version is not needed for many functional purposes 
on a modern distro - and that was my exact point.

I cannot think of a single valid case where the proper user-space solution to some 
ABI compatibility detail is a kernel version check. I'd even argue that we want to 
keep unprivileged user-space from being able to implement such crappy version checks 
...

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:27                       ` Ingo Molnar
@ 2010-11-07 11:41                         ` Willy Tarreau
  2010-11-07 11:47                           ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 11:41 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 12:27:09PM +0100, Ingo Molnar wrote:
> > I don't understand the point you're trying to make with this patch. [...]
> 
> It was a simple experiement to support my rather simple argument which you disputed.

OK

> > [...] Obviously we can pretend to be any version, [...]
> 
> Ok, it's a pretty cavalier style of arguing that you now essentially turn around 
> your earlier claim that the 'kernel version is needed at many places' and say what 
> i've been saying, prefixed with 'obviously' ;-)

Huh ?

> Yes, it's obvious that the kernel version is not needed for many functional purposes 
> on a modern distro - and that was my exact point.
> 
> I cannot think of a single valid case where the proper user-space solution to some 
> ABI compatibility detail is a kernel version check.

Ingo, I believe you did not read a single line of my previous mail, because I
precisely gave you counter-examples of that. The first use is simply the user
running "uname -a" to see if *he* can safely enable feature X or Y which is
known to be badly broken in some old versions.

> I'd even argue that we want to 
> keep unprivileged user-space from being able to implement such crappy version checks 
> ...

I'd say that *YOU* want that despite the fact that on mainstream distros, it
buys nothing since it's easy to guess the real version anyway as I showed you.
Don't forget that you proposed this in order to hide symbols from a small set
of well-known distro kernels. And the most important in my opinion is that it
does not bring anything to those who are currently victim of exploits : those
who don't upgrade, because their uptime alone is enough to *know* that the
vuln you want to exploit is still there.

At some places, your proposal would probably end up with uname being
chmoded +s so that users stop asking the admin for trivial things. That
really makes no sense.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07  9:49                     ` Willy Tarreau
  2010-11-07 11:27                       ` Ingo Molnar
@ 2010-11-07 11:42                       ` Ingo Molnar
  2010-11-07 11:51                         ` Willy Tarreau
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 11:42 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> [...] I was explaining that doing this will not prevent them from guessing the 
> precise kernel version, [...]

Well, which is exactly what i have said to Marcus early on in this discussion:

 |
 | What i suggested in later parts of my mail might provide more security: to sandbox 
 | kernel version information from unprivileged user-space - if we decide that we 
 | want to sandbox kernel version information ...
 |
 | That is a big if, because it takes a considerable amount of work. Would be worth 
 | trying it - but feel-good non-solutions that do not bring much improvement to the 
 | majority of users IMHO hinder such efforts.
 |

The 'considerable amount of work' refers not to the utsname version fuzzing patch 
(it's a 10-liner patch, literally), but to controlling the channels of version 
information you mentioned (uptime, the /boot timestamp), and some other channels you 
did not mention: dmesg, various /sys and /proc entries that leak version 
information, etc.

All must be closed down for unprivileged user-space, for this to be effective, 
obviously.

( Note that there will also be some channels of information that cannot
  realistically be closed down (such as the presence of sys_perf_event_open()
  indicates a v2.6.32+ kernel - or a backported, patched kernel) - but what matters
  mostly is to fuzz the _precise_ version information, to inject uncertainty into
  the equation of attackers. Combined with honeypot silent alarm functionality it
  turns the equation around and creates an outright risk of detection. )

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:41                         ` Willy Tarreau
@ 2010-11-07 11:47                           ` Ingo Molnar
  2010-11-07 11:56                             ` Willy Tarreau
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 11:47 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> On Sun, Nov 07, 2010 at 12:27:09PM +0100, Ingo Molnar wrote:
> > > I don't understand the point you're trying to make with this patch. [...]
> > 
> > It was a simple experiement to support my rather simple argument which you disputed.
> 
> OK
> 
> > > [...] Obviously we can pretend to be any version, [...]
> > 
> > Ok, it's a pretty cavalier style of arguing that you now essentially turn around 
> > your earlier claim that the 'kernel version is needed at many places' and say what 
> > i've been saying, prefixed with 'obviously' ;-)
> 
> Huh ?
> 
> > Yes, it's obvious that the kernel version is not needed for many functional purposes 
> > on a modern distro - and that was my exact point.
> > 
> > I cannot think of a single valid case where the proper user-space solution to some 
> > ABI compatibility detail is a kernel version check.
> 
> Ingo, I believe you did not read a single line of my previous mail, because I 
> precisely gave you counter-examples of that. [...]

I did read it and saw no valid counter-examples. You mentioned this one:

 > Take the splice() data corruption bug for instance. I believe it was fixed in 
 > 2.6.26 or 2.6.27 and backported late in the 2.6.25.X stable branch. Due to this, 
 > without knowing the kernel version, the user can't know whether it's safe to use 
 > splice() or not. I'm particularly aware of this one because I got quite a bunch 
 > of questions from users on this subject. But certainly there are a bunch of other 
 > ones.

That example is entirely bogus. The correct answer to a buggy, data-corrupting 
kernel is a fixed kernel. No ifs and when. No version checks in user-space. If 
user-space ever works around a bug in that fashion it's entirely broken and 
_deserves_ to be further broken via version fuzzing.

Do you know of a single such actual vmsplice() version check example in user-space, 
or have you just made it up?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:42                       ` Ingo Molnar
@ 2010-11-07 11:51                         ` Willy Tarreau
  2010-11-07 12:37                           ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 11:51 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 12:42:37PM +0100, Ingo Molnar wrote:
> 
> * Willy Tarreau <w@1wt.eu> wrote:
> 
> > [...] I was explaining that doing this will not prevent them from guessing the 
> > precise kernel version, [...]
> 
> Well, which is exactly what i have said to Marcus early on in this discussion:
> 
>  |
>  | What i suggested in later parts of my mail might provide more security: to sandbox 
>  | kernel version information from unprivileged user-space - if we decide that we 
>  | want to sandbox kernel version information ...
>  |
>  | That is a big if, because it takes a considerable amount of work. Would be worth 
>  | trying it - but feel-good non-solutions that do not bring much improvement to the 
>  | majority of users IMHO hinder such efforts.
>  |
> 
> The 'considerable amount of work' refers not to the utsname version fuzzing patch 
> (it's a 10-liner patch, literally), but to controlling the channels of version 
> information you mentioned (uptime, the /boot timestamp), and some other channels you 
> did not mention: dmesg, various /sys and /proc entries that leak version 
> information, etc.

I did not mention dmesg because it's already sometimes hidden from users (eg,
when iptables logs there).

> All must be closed down for unprivileged user-space, for this to be effective, 
> obviously.

This would only be effective against finding a precise version. There's
no need for that, what you want is to hide kernel pointers, and your issue
is that in distro kernels, same kernels have the same pointers. It would be
much more efficient to work on a method to randomize all pointers than to
try to hide a kernel version hoping a user is not able to guess what it is.
Even if you'd hide the uptime, there are many ways to find it. In my opinion,
it's a race in the wrong direction, and which has several negative side
effects on the normal user.

Better attack the problem than its symptoms.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:47                           ` Ingo Molnar
@ 2010-11-07 11:56                             ` Willy Tarreau
  2010-11-07 12:12                               ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 11:56 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 12:47:56PM +0100, Ingo Molnar wrote:
> I did read it and saw no valid counter-examples. You mentioned this one:
> 
>  > Take the splice() data corruption bug for instance. I believe it was fixed in 
>  > 2.6.26 or 2.6.27 and backported late in the 2.6.25.X stable branch. Due to this, 
>  > without knowing the kernel version, the user can't know whether it's safe to use 
>  > splice() or not. I'm particularly aware of this one because I got quite a bunch 
>  > of questions from users on this subject. But certainly there are a bunch of other 
>  > ones.
> 
> That example is entirely bogus. The correct answer to a buggy, data-corrupting 
> kernel is a fixed kernel. No ifs and when. No version checks in user-space. If 
> user-space ever works around a bug in that fashion it's entirely broken and 
> _deserves_ to be further broken via version fuzzing.

It's not working around a bug, it's that using splice() instead of
recv()+send() brings an important speed up in some environments, and that
it is suggested to make use of it when possible, except on buggy kernels.
Some user-space code simply have a tunable to enable it or not.

> Do you know of a single such actual vmsplice() version check example in user-space, 
> or have you just made it up?

I was not speaking about vmsplice() but about splice(). And yes it's a real
world example. Haproxy makes use of it when the option is specified. And it
will never enable it automatically due to that nasty data corruption bug
that cannot be detected. Only the user can run "uname -a" and compare with
his distro's fixes (or mainline kernel fixes) and know what to do. Once again
it's just *one* example. A version is beforeall an indication of features and
bugs status.

It's precisely because you're making a special case of the security bug that
you want to hide bugs from user-space by cheating on version.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:56                             ` Willy Tarreau
@ 2010-11-07 12:12                               ` Ingo Molnar
  2010-11-07 12:22                                 ` Willy Tarreau
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 12:12 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> [...]
>
> It's precisely because you're making a special case of the security bug that you 
> want to hide bugs from user-space by cheating on version.

You claimed this for the second time and i'm denying it for the second time.

The goal of fuzzing the version inforation is _not_ to 'hide bugs from user-space by 
cheating on version'. The goal is to introduce uncertainty to attackers, so that a 
honeypot silent alarm can warn the admin.

Why are you putting words in my mouth?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:12                               ` Ingo Molnar
@ 2010-11-07 12:22                                 ` Willy Tarreau
  2010-11-07 12:25                                   ` Ingo Molnar
  2010-11-07 12:32                                   ` Ingo Molnar
  0 siblings, 2 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 12:22 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 01:12:35PM +0100, Ingo Molnar wrote:
> 
> * Willy Tarreau <w@1wt.eu> wrote:
> 
> > [...]
> >
> > It's precisely because you're making a special case of the security bug that you 
> > want to hide bugs from user-space by cheating on version.
> 
> You claimed this for the second time and i'm denying it for the second time.
> 
> The goal of fuzzing the version inforation is _not_ to 'hide bugs from user-space by 
> cheating on version'. The goal is to introduce uncertainty to attackers, so that a 
> honeypot silent alarm can warn the admin.

My interpretation of this mechanism is what I explained above. "Introducing
uncertainty" means hiding a version so that the attacker doesn't precisely
know which one it is and has to send a few probes to guess it. That's not
much different than trying to fire the exploit itself. When you run a
null-deref kernel exploit, better be sure of what you're doing, otherwise
the admin will shortly be aware of it too.

You could as well consider that launching some commands is suspicious
(eg: uname). You'll obviously get a lot of false-positive alarms from
all autoconf scripts run in local, but this gives an idea. Anyway, when
local users have their time (eg: students), it's still easy to guess the
version.

> Why are you putting words in my mouth?

I'm not putting anything in your mouth Ingo :-)

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:22                                 ` Willy Tarreau
@ 2010-11-07 12:25                                   ` Ingo Molnar
  2010-11-07 12:39                                     ` Willy Tarreau
  2010-11-07 12:32                                   ` Ingo Molnar
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 12:25 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> > Why are you putting words in my mouth?
> 
> I'm not putting anything in your mouth Ingo :-)

To quote you:

  " you're making a special case of the security bug that you want to hide bugs from
    user-space by cheating on version. "

No, i did not say that i want to hide bugs from user-space by cheating on the 
version. Why are you claiming that i said that? Why are you putting words in my 
mouth?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:22                                 ` Willy Tarreau
  2010-11-07 12:25                                   ` Ingo Molnar
@ 2010-11-07 12:32                                   ` Ingo Molnar
  2010-11-07 12:51                                     ` Willy Tarreau
  2010-11-07 15:27                                     ` Alan Cox
  1 sibling, 2 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 12:32 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> On Sun, Nov 07, 2010 at 01:12:35PM +0100, Ingo Molnar wrote:
> > 
> > * Willy Tarreau <w@1wt.eu> wrote:
> > 
> > > [...]
> > >
> > > It's precisely because you're making a special case of the security bug that you 
> > > want to hide bugs from user-space by cheating on version.
> > 
> > You claimed this for the second time and i'm denying it for the second time.
> > 
> > The goal of fuzzing the version inforation is _not_ to 'hide bugs from user-space by 
> > cheating on version'. The goal is to introduce uncertainty to attackers, so that a 
> > honeypot silent alarm can warn the admin.
> 
> My interpretation of this mechanism is what I explained above. [...]

( Well, if it's "your interpretation" only then stop claiming that i said it. )

> [...] "Introducing uncertainty" means hiding a version so that the attacker 
> doesn't precisely know which one it is and has to send a few probes to guess it.

No. The 'exploit honeypot' mechanism i outlined is really simple, and it means what 
i explained already:

 - attacker breaks into unprivileged user-space

 - attacker runs exploit

 - exploit attempt gets detected by the 'exploit honeypot' kernel code and a 
   (silent) warning goes to the admin (via a syslog message for example)

 - attacker only sees that the attack did not succeed

This makes it _unsafe_ (for many types of attackers) to run an exploit locally.

> That's not much different than trying to fire the exploit itself. [...]

Erm, the difference is possible _detection_ via a silent alarm.

There's a huge difference between 'attempting an exploit and being caught' and 'not 
even trying the exploit because based on the kernel version the attacker knows it 
wont work'.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 11:51                         ` Willy Tarreau
@ 2010-11-07 12:37                           ` Ingo Molnar
  2010-11-07 12:55                             ` Willy Tarreau
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-07 12:37 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner


* Willy Tarreau <w@1wt.eu> wrote:

> > All must be closed down for unprivileged user-space, for this to be effective, 
> > obviously.
> 
> This would only be effective against finding a precise version. [...]

I'm glad that you agree with my point.

> [...] There's no need for that, what you want is to hide kernel pointers, [...]

That's a new claim from you - and when put like that it's wrong too: if the goal is 
to introduce risk of detection to attackers (which i suggested to be an efficient 
security measure), then hiding/fuzzing version information is an essential/needed 
piece of such a measure, not something for which there is 'no need'.

Hiding the address of kernel data/code structures is another piece of such a larger 
goal. Btw., as i argued it to Marcus already, hiding /proc/kallsyms will not hide 
these addresses on the vast majority of Linux systems, and that the patch would only 
cure the symptom, not the cause:

 |
 | But without actually declaring and achieving that sandboxing goal this security 
 | measure is just a feel-good thing really [...]
 |

Anyway, i wasnt particularly successful in conveying my past arguments to you so i'd 
rather leave the discussion at this point. You made your points and i made my points 
as well.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:25                                   ` Ingo Molnar
@ 2010-11-07 12:39                                     ` Willy Tarreau
  0 siblings, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 12:39 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 01:25:33PM +0100, Ingo Molnar wrote:
> 
> * Willy Tarreau <w@1wt.eu> wrote:
> 
> > > Why are you putting words in my mouth?
> > 
> > I'm not putting anything in your mouth Ingo :-)
> 
> To quote you:
> 
>   " you're making a special case of the security bug that you want to hide bugs from
>     user-space by cheating on version. "
> 
> No, i did not say that i want to hide bugs from user-space by cheating on the 
> version. Why are you claiming that i said that? Why are you putting words in my 
> mouth?

I'm not claiming that "you said that", it's my interpretation of what
you're trying to achieve with what you're defending. I'm free to interprete
as I want. Probably it's a very synthetical analysis, but it's my analysis.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:32                                   ` Ingo Molnar
@ 2010-11-07 12:51                                     ` Willy Tarreau
  2010-11-07 15:27                                     ` Alan Cox
  1 sibling, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 12:51 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 01:32:32PM +0100, Ingo Molnar wrote:
> No. The 'exploit honeypot' mechanism i outlined is really simple, and it means what 
> i explained already:
> 
>  - attacker breaks into unprivileged user-space
> 
>  - attacker runs exploit
> 
>  - exploit attempt gets detected by the 'exploit honeypot' kernel code and a 
>    (silent) warning goes to the admin (via a syslog message for example)
> 
>  - attacker only sees that the attack did not succeed
> 
> This makes it _unsafe_ (for many types of attackers) to run an exploit locally.

It's already unsafe and has always been. When running local kernel exploits,
it's common to find lots of segfault traces in dmesg. It's common to hang the
machine (the vmsplice exploit had a 50% failure rate from my tests).

> > That's not much different than trying to fire the exploit itself. [...]
> 
> Erm, the difference is possible _detection_ via a silent alarm.
>
> There's a huge difference between 'attempting an exploit and being caught' and 'not 
> even trying the exploit because based on the kernel version the attacker knows it 
> wont work'.

And there's an even bigger difference between leaving traces of a failed
exploit attempt and successfully getting the exploit to work because the
system is not updated in time. That's been my point since the beginning,
most kernel exploits are run very early when released to the public. So
that's when a simple "uptime" will tell you it's safe to run your exploit.
And if you want to hide the uptime, let's simply check the creation date
of /dev/shm, or that a file you left in /tmp has not been removed by the
admin's scripts which clean that up at boot, etc...

In my opinion this is not efficient at all. Also, I've already been involved
in post-mortem diags on compromised machines. If the intruder is not a known
local user, he does not care at all being caught. Leaving rootkits everywhere
is generally not a problem for them, some don't even take care of clearing
the logs, because they bounced from already compromised systems.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:37                           ` Ingo Molnar
@ 2010-11-07 12:55                             ` Willy Tarreau
  0 siblings, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-07 12:55 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew Morton,
	Linus Torvalds, Thomas Gleixner

On Sun, Nov 07, 2010 at 01:37:46PM +0100, Ingo Molnar wrote:
> > [...] There's no need for that, what you want is to hide kernel pointers, [...]
> 
> That's a new claim from you - and when put like that it's wrong too:

It's where the discussion started and it's still in the subject of the thread !
You noted that with distro kernels, hiding kallsyms is useless since uname -r
reveals what kernel to download to get them anyway. Which is true !

Reason why it would be more efficient to find how we could randomize those
pointers at runtime.

(...)
> Anyway, i wasnt particularly successful in conveying my past arguments to you so i'd 
> rather leave the discussion at this point. You made your points and i made my points 
> as well.

That's also what I was about to say. Let's agree we disagree and have a
nice sunday afternoon. We can bring the discussion back around a beer if
you happen to pass by Paris :-)

Cheers,
Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 12:32                                   ` Ingo Molnar
  2010-11-07 12:51                                     ` Willy Tarreau
@ 2010-11-07 15:27                                     ` Alan Cox
  2010-11-08  6:29                                       ` Ingo Molnar
  1 sibling, 1 reply; 81+ messages in thread
From: Alan Cox @ 2010-11-07 15:27 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Willy Tarreau, Marcus Meissner, security, mort, Peter Zijlstra,
	fweisbec, H. Peter Anvin, linux-kernel, jason.wessel, tj,
	Andrew Morton, Linus Torvalds, Thomas Gleixner

> This makes it _unsafe_ (for many types of attackers) to run an exploit locally.

They don't care.

Firstly it 's trivial to identify the true kernel version from all sorts
of other methods and secondly almost all exploiting is done by robots
running from box to box and which are completely disposable.

They simply *don't* care and if they do the rpm -q, tcp finger prints and
a few other tricks such as clock timing a couple of syscalls will answer
the question reliably anyway.


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-04 14:33         ` Marcus Meissner
  2010-11-04 14:38           ` Tejun Heo
  2010-11-04 19:08           ` Ingo Molnar
@ 2010-11-07 18:02           ` Andi Kleen
  2010-11-07 18:32             ` H. Peter Anvin
  2 siblings, 1 reply; 81+ messages in thread
From: Andi Kleen @ 2010-11-07 18:02 UTC (permalink / raw)
  To: Marcus Meissner
  Cc: Ingo Molnar, linux-kernel, jason.wessel, fweisbec, tj, mort,
	akpm, security, Andrew Morton, Linus Torvalds, Peter Zijlstra,
	Thomas Gleixner, H. Peter Anvin

Marcus Meissner <meissner@suse.de> writes:
>
> I also briefly thought about kernel ASLR, but my knowledge of the kernel
> loading is too limited whether this is even possible or at all useful.

Kernel ASLR sounds like a good idea, although there are some traps.

On 32bit the available range is not too great, only a few hundred MB
max. Probably less on a larger systems, there will conflicts with a
large mem_map.  On 64bit x86 it's nearly 2GB and somewhat easier
(although a large mem_map may still be a problem)

You still want to not stray too much from a 2MB alignment
to make sure most of the main kernel is handled by a single 2MB TLB
entry. 

It would not be too hard to do today using kexec and loading the kernel
twice.  Right now the kexec command doesn't allow specifying
the address, but the kernel interface supports it, so it could
be just implemented in the user tool.

Doing it with a single boot sequence would be a bit more work.
Right now the relocation entries are not put into the bzImage
and that would be needed.

That would not cover modules, but it shouldn't be too difficult
to do it for those either.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only.

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 18:02           ` Andi Kleen
@ 2010-11-07 18:32             ` H. Peter Anvin
  2010-11-10  8:53               ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-07 18:32 UTC (permalink / raw)
  To: Andi Kleen, Marcus Meissner
  Cc: Ingo Molnar, linux-kernel, jason.wessel, fweisbec, tj, mort,
	akpm, security, Andrew Morton, Linus Torvalds, Peter Zijlstra,
	Thomas Gleixner

We already do virtual relocation on 32 bits, and replicating that on 64 bits wouldn't be hard.  However, the linkage script strongly assumes congruency mod 2/4 MiB, and that is probably nontrivial to change.  However, that still gives about 9 bits of entrophy to play with.  The question is if that is enough, or if we'd have to do more clever hacks.



"Andi Kleen" <andi@firstfloor.org> wrote:

>Marcus Meissner <meissner@suse.de> writes:
>>
>> I also briefly thought about kernel ASLR, but my knowledge of the
>kernel
>> loading is too limited whether this is even possible or at all
>useful.
>
>Kernel ASLR sounds like a good idea, although there are some traps.
>
>On 32bit the available range is not too great, only a few hundred MB
>max. Probably less on a larger systems, there will conflicts with a
>large mem_map.  On 64bit x86 it's nearly 2GB and somewhat easier
>(although a large mem_map may still be a problem)
>
>You still want to not stray too much from a 2MB alignment
>to make sure most of the main kernel is handled by a single 2MB TLB
>entry. 
>
>It would not be too hard to do today using kexec and loading the kernel
>twice.  Right now the kexec command doesn't allow specifying
>the address, but the kernel interface supports it, so it could
>be just implemented in the user tool.
>
>Doing it with a single boot sequence would be a bit more work.
>Right now the relocation entries are not put into the bzImage
>and that would be needed.
>
>That would not cover modules, but it shouldn't be too difficult
>to do it for those either.
>
>-Andi
>
>-- 
>ak@linux.intel.com -- Speaking for myself only.

-- 
Sent from my mobile phone.  Please pardon any lack of formatting.

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 15:27                                     ` Alan Cox
@ 2010-11-08  6:29                                       ` Ingo Molnar
  0 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-08  6:29 UTC (permalink / raw)
  To: Alan Cox
  Cc: Willy Tarreau, Marcus Meissner, security, mort, Peter Zijlstra,
	fweisbec, H. Peter Anvin, linux-kernel, jason.wessel, tj,
	Andrew Morton, Linus Torvalds, Thomas Gleixner


* Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:

> > This makes it _unsafe_ (for many types of attackers) to run an exploit locally.
> 
> They don't care.

Sure, script kiddies and botnet builders wont care - i.e. attacks where the 
individual target is low value, or where either the attacker or the attacked is 
stupid.

But it's different when a skilled attacker meets a skilled defense: all the 
exploits/attacks against high-value targets i've seen showed a great deal of care 
taken to avoid detection.

Future trends are also clear: eventually, as more and more of our lives are lived on 
the network, home boxes are becoming more and more valuable. So i think 
concentrating on the psychology of the skilled attacker would not be unwise. YMMV.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-07 18:32             ` H. Peter Anvin
@ 2010-11-10  8:53               ` Ingo Molnar
  2010-11-11  2:51                 ` H. Peter Anvin
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-10  8:53 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Andi Kleen, Marcus Meissner, linux-kernel, jason.wessel,
	fweisbec, tj, mort, akpm, security, Andrew Morton,
	Linus Torvalds, Peter Zijlstra, Thomas Gleixner


* H. Peter Anvin <hpa@zytor.com> wrote:

> We already do virtual relocation on 32 bits, and replicating that on 64 bits 
> wouldn't be hard.  However, the linkage script strongly assumes congruency mod 2/4 
> MiB, and that is probably nontrivial to change.  However, that still gives about 9 
> bits of entrophy to play with.  The question is if that is enough, or if we'd have 
> to do more clever hacks.

Even 1 bit of entropy would bring a visible improvement: a failed exploit attempt to 
the wrong address can crash the kernel with a 50% chance. 9 bits would be very nice.

If an exploit can be brute-forced without crashing the kernel then only some 
significantly large bitness would help. So while 9 bits would be rather low for a 
user-space ASLR scheme [many user-space bugs can be brute-forced without crashing 
the system and raising alarms], it's very attractive for kernel ASLR.

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-05  2:38     ` Frank Rowand
@ 2010-11-10 20:58       ` Jesper Juhl
  0 siblings, 0 replies; 81+ messages in thread
From: Jesper Juhl @ 2010-11-10 20:58 UTC (permalink / raw)
  To: Frank Rowand
  Cc: Marcus Meissner, Ingo Molnar, linux-kernel, jason.wessel,
	fweisbec, tj, mort, akpm, security, Andrew Morton,
	Linus Torvalds, Peter Zijlstra, Thomas Gleixner, H. Peter Anvin

On Thu, 4 Nov 2010, Frank Rowand wrote:

> On 11/04/10 05:29, Marcus Meissner wrote:
> > On Thu, Nov 04, 2010 at 12:46:48PM +0100, Ingo Molnar wrote:
> >>
> >> * Marcus Meissner <meissner@suse.de> wrote:
> >>
> >>> Hi,
> >>>
> >>> Making /proc/kallsyms readable only for root makes it harder for attackers to 
> >>> write generic kernel exploits by removing one source of knowledge where things are 
> >>> in the kernel.
> 
> < snip >
> 
> >> So what does a distribution like Suse expect from this change alone? Those have 
> >> public packages in rpms which can be downloaded by anyone, so it makes little sense 
> >> to hide it - unless _all_ version information is hidden.
> > 
> > It is the first patch, mostly an acceptance test balloon.
> > 
> > There are several other files handing information out, but kallsyms has
> > it all very nice and ready.
> > 
> > (timer_list, /proc/*/stat*, sl?binfo )
> >  
> >> So i'd like to see a _full_ version info sandboxing patch that thinks through all 
> >> the angles and restricts uname -r kernel version info as well, and makes dmesg 
> >> unaccessible to users - and closes a few other information holes as well that give 
> >> away the exact kernel version - _that_ together will make it hard to blindly attack 
> >> a very specific kernel version.
> > 
> > I am personally thinking of a "small steps" philosophy, one step after the other.
> 
> < snip >
> 
> The idea of trying to hide the kernel version is absurd.  The number of different
> places that can provide a precise fingerprint of a kernel version, or a small range of
> possible kernel versions is immense.  Closing all of those places makes use and
> administration of a system more difficult, and encourages frequent use of su.
> 

I agree. Hiding the kernel version is silly. But that's not what the 
original patch was about. The original patch was about "Making 
/proc/kallsyms readable only for root ..." and that (IMVHO) makes sense 
for a number of reasons.

1. For those people running (popular) distro kernels, hiding the 
information on /proc/kallsyms doesn't achieve much, true, an attacker can 
get the information easily online. But it still makes it slightly more 
involved for exploits to gain access to information about the addresses of 
kernel functions - at the very least they now have to hard-code lists of 
addresses for the kernels they target - not much pain, but the more pain 
we can inflict upon these people without hurting legitimate users, the 
better.

2. For people running niche-distros that attackers cannot be bothered to 
target explicitly, but where they previously relied on obtaining these 
addresses from /proc/kallsyms we have a real gain - the attackers can no 
longer get the info they need.

3. For people running custom compiled kernels (and I personally know of a 
few large businesses that do so and several individuals, and I'll bet real 
money that there are more than you suspect "out there"), attacks relying 
on /proc/kallsyms for info are completely defeated.

4. Once we get (and I'm sure that's only a matter of time) randomization 
of the addresses that kernel functions are loaded at, even popular distros 
where the kernel version and config are known to attackers will gain a 
valuable defence by ths patch. Attackers will then no longer be able to 
just download the info from the distro repositories and hard-code 
addresses since they will be randomized, but if they have access to 
/proc/kallsyms they won't need to since they can then just look up the 
addresses there - this patch closes that info path to them which is good.


-- 
Jesper Juhl <jj@chaosbits.net>             http://www.chaosbits.net/
Don't top-post  http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please.


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-10  8:53               ` Ingo Molnar
@ 2010-11-11  2:51                 ` H. Peter Anvin
  2010-11-11  7:05                   ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-11  2:51 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Andi Kleen, Marcus Meissner, linux-kernel, jason.wessel,
	fweisbec, tj, mort, akpm, security, Andrew Morton,
	Linus Torvalds, Peter Zijlstra, Thomas Gleixner

On 11/10/2010 12:53 AM, Ingo Molnar wrote:
> 
> * H. Peter Anvin <hpa@zytor.com> wrote:
> 
>> We already do virtual relocation on 32 bits, and replicating that on 64 bits 
>> wouldn't be hard.  However, the linkage script strongly assumes congruency mod 2/4 
>> MiB, and that is probably nontrivial to change.  However, that still gives about 9 
>> bits of entrophy to play with.  The question is if that is enough, or if we'd have 
>> to do more clever hacks.
> 
> Even 1 bit of entropy would bring a visible improvement: a failed exploit attempt to 
> the wrong address can crash the kernel with a 50% chance. 9 bits would be very nice.
> 
> If an exploit can be brute-forced without crashing the kernel then only some 
> significantly large bitness would help. So while 9 bits would be rather low for a 
> user-space ASLR scheme [many user-space bugs can be brute-forced without crashing 
> the system and raising alarms], it's very attractive for kernel ASLR.
> 

Now, *relative* symbol addresses will typically not have any randomness
at all, which may limit the usefulness, of course.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-11  2:51                 ` H. Peter Anvin
@ 2010-11-11  7:05                   ` Ingo Molnar
  0 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-11  7:05 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Andi Kleen, Marcus Meissner, linux-kernel, jason.wessel,
	fweisbec, tj, mort, akpm, security, Andrew Morton,
	Linus Torvalds, Peter Zijlstra, Thomas Gleixner


* H. Peter Anvin <hpa@zytor.com> wrote:

> Now, *relative* symbol addresses will typically not have any randomness at all, 
> which may limit the usefulness, of course.

Yeah - but it happens quite often that the scope of the vulnerability only allows 
absolute addresses. In fact it's a pretty common case: basically most derefs into 
attacker-controlled data pointers are like that.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
       [not found]               ` <20101104215157.GA25128@ <20101107090805.GA27983@elte.hu>
@ 2010-11-13 13:06                 ` Gilles Espinasse
  0 siblings, 0 replies; 81+ messages in thread
From: Gilles Espinasse @ 2010-11-13 13:06 UTC (permalink / raw)
  To: Ingo Molnar, Willy Tarreau
  Cc: Marcus Meissner, security, mort, Peter Zijlstra, fweisbec,
	H. Peter Anvin, linux-kernel, jason.wessel, tj, Andrew,
	Morton <


----- Original Message ----- 
From: "Ingo Molnar" <mingo@elte.hu>
To: "Willy Tarreau" <w@1wt.eu>
Cc: "Marcus Meissner" <meissner@suse.de>; <security@kernel.org>;
<mort@sgi.com>; "Peter Zijlstra" <a.p.zijlstra@chello.nl>;
<fweisbec@gmail.com>; "H. Peter Anvin" <hpa@zytor.com>;
<linux-kernel@vger.kernel.org>; <jason.wessel@windriver.com>;
<tj@kernel.org>; <Andrew@zimbra8-e1.priv.proxad.net>; <"Morton
<"@zimbra8-e1.priv.proxad.net>
Sent: Sunday, November 07, 2010 10:08 AM
Subject: Re: [Security] [PATCH] kernel: make /proc/kallsyms mode 400 to
reduce ease of attacking


>
> * Ingo Molnar <mingo@elte.hu> wrote:
>
> > If your claim that 'kernel version is needed at many places' is true
then why am i
> > seeing this on a pretty general distro box bootup:
> >
> >  [root@aldebaran ~]# uname -a
> >  Linux aldebaran 2.6.99-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7
10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux
> >
> > ?
> >
> > Yes, some user-space might be unhappy if we set the version _back_ to
say 2.4.0,
> > but we could (as the patch below) fuzz up the version information from
> > unprivileged attackers easily.
>
> Btw., with an 'exploit honeypot' and 'version fuzzing' the uname output
would look
> like this to an unprivileged user:
>
>   $ uname -a
>   Linux aldebaran 2.6.99 x86_64 x86_64 x86_64 GNU/Linux
>
> [ we wouldnt want to include the date or the SHA1 of the kernel,
obviously. ]
>
> And it would look like this to root:
>
>   # uname -a
>   Linux aldebaran 2.6.37-tip-01574-g6ba54c9-dirty #1 SMP Sun Nov 7
10:24:38 CET 2010 x86_64 x86_64 x86_64 GNU/Linux
>
> Ingo

A bit late comment
gesp@a7n8x-e:~$ strings /lib/modules/*/kernel/drivers/scsi/in2000.ko | grep
2010
Sep 16 2010
gesp@a7n8x-e:~$ strings /lib/modules/*/kernel/drivers/char/nozomi.ko | grep
2010
Nozomi driver 2.1d (build date: Sep 16 2010 19:01:27)
gesp@a7n8x-e:~$ uname -a
Linux a7n8x-e 2.6.26-2-686 #1 SMP Thu Sep 16 19:35:51 UTC 2010 i686
GNU/Linux

Should it not be considered before to remove __DATE__ and __TIME__ from
module code?
That would have too the good effect that everyone that compile same code
with same compiler get exactly same file.

Gilles


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 23:31         ` Alan Cox
@ 2010-11-30 11:58           ` Ingo Molnar
  0 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-30 11:58 UTC (permalink / raw)
  To: Alan Cox
  Cc: Sarah Sharp, Linus Torvalds, Marcus Meissner, linux-kernel, tj,
	akpm, hpa, w


* Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:

> > >  	/* Some debugging symbols have no name.  Ignore them. */
> > > -	if (!iter->name[0])
> > > +	if (!iter->name[0] || !capable(CAP_SYS_ADMIN))
> > >  		return 0;
> 
> This is hardcoding file permission policy into the kernel in a way the
> user cannot change - its bogus in the extreme. Use file permissions that
> way saner people can chmod them as they like. Indeed quite a few people
> *already* chmod chunks of /proc.

Peter already pointed that out and i agree.

The main goal here was to establish that a regression-free patch can be implemented 
by giving user-space a *empty /proc/kallsyms file* - that we older systems do not 
crash on bootup.

> It also means that things like SELinux and Tomoyo can be used to manage security 
> on it in clever ways - something that using a capability completely buggers up.

Frankly, our security interfaces are a mess - i did not even try to figure out the 
'right' way to do it. Modularization of security subsystem made it all distinctly 
worse.

Why dont we have coherent, easy to use (and hard to mess up) security interfaces to 
begin with? The moment a kernel developer has to think of:

        retval = -EPERM;
        if (capable(CAP_SETUID)) {
                new->suid = new->uid = uid;
                if (uid != old->uid) {
                        retval = set_user(new);
                        if (retval < 0)
                                goto error;
                }
        } else if (uid != old->uid && uid != new->suid) {
                goto error;
        }

        new->fsuid = new->euid = uid;

        retval = security_task_fix_setuid(new, old, LSM_SETID_ID);
        if (retval < 0)
                goto error;


As the 'secure' implementation of a piece of kernel logic we have lost the 
'security' battle ...

The current security callbacks are absolutely nonsensical random crap slapped all 
around the kernel. It increases our security complexity and has thus the opposite 
effect - it makes us _less_ secure.

Did no-one think of merging the capabilities checks and the security subsystem 
callbacks in some easy-to-use manner, which makes the default security policy 
apparent at first sight?

This code should be written in a simpler form, something like:

        retval = -EPERM;
	if (!security_allow_task_fix_setuid(new, old)) {
                new->suid = new->uid = uid;
                if (uid != old->uid) {
                        retval = set_user(new);
                        if (retval < 0)
                                goto error;
                }
        } else if (uid != old->uid && uid != new->suid) {
                goto error;
        }

        new->fsuid = new->euid = uid;

Where the default security_allow_task_fix_setuid() is basically a CAP_SETUID check - 
and we know this from the 'security_allow_task_fix_setuid' name already.

This way all those stupid, passive security callbacks become _active participants of 
the code_, and the code becomes more compact and easier to understand - and it 
becomes harder to mess up both compatibility details and permission details.

[ And yes, i realize that this isnt a 100% replacement of the existing callback,
  because some of the default logic cannot be turned off - but heck, that's a 
  feature not a bug! We dont want to allow security modules to make things _less_ 
  secure, or break legacies, right? So they should be shaped as _additional_
  restrictions on the coarse default semantics.

  And dont get me started about the idiocy of LSM_SETID_ID. Why isnt that detail put 
  into the callback name? What's wrong with security_task_fix_setuid_id(new, old)? ]

Whoever allowed security modules to be added in their current form needs some 
talking to.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 16:33       ` Sarah Sharp
  2010-11-29 18:04         ` Ingo Molnar
@ 2010-11-29 23:31         ` Alan Cox
  2010-11-30 11:58           ` Ingo Molnar
  1 sibling, 1 reply; 81+ messages in thread
From: Alan Cox @ 2010-11-29 23:31 UTC (permalink / raw)
  To: Sarah Sharp
  Cc: Ingo Molnar, Linus Torvalds, Marcus Meissner, linux-kernel, tj,
	akpm, hpa, w

> >  	/* Some debugging symbols have no name.  Ignore them. */
> > -	if (!iter->name[0])
> > +	if (!iter->name[0] || !capable(CAP_SYS_ADMIN))
> >  		return 0;

This is hardcoding file permission policy into the kernel in a way the
user cannot change - its bogus in the extreme. Use file permissions that
way saner people can chmod them as they like. Indeed quite a few people
*already* chmod chunks of /proc.

It also means that things like SELinux and Tomoyo can be used to manage
security on it in clever ways - something that using a capability
completely buggers up.

Alan

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-20 19:47     ` Henrique de Moraes Holschuh
@ 2010-11-29 22:58       ` Kevin Easton
  0 siblings, 0 replies; 81+ messages in thread
From: Kevin Easton @ 2010-11-29 22:58 UTC (permalink / raw)
  To: Henrique de Moraes Holschuh
  Cc: Kees Cook, Linus Torvalds, Andy Walls, linux-kernel, sarah.a.sharp

On Sat, Nov 20, 2010 at 05:47:23PM -0200, Henrique de Moraes Holschuh wrote:
> On Fri, 19 Nov 2010, Kees Cook wrote:
> > On Fri, Nov 19, 2010 at 03:22:00PM -0800, Linus Torvalds wrote:
> > > In this case, the upside just wasn't big enough to accept _any_
> > > breakage, especially since people and distributions can just do the
> > > "chmod" themselves if they want to. There was a lot of discussion
> > > whether the patch should even go in in the first place. So this time,
> > > the "let's just revert it" was a very easy decision for me.
> > 
> > The downside is that /proc can be remounted multiple times for different
> > containers, etc. Having to patch everything that mounts /proc to do the
> > chmod seems much more painful that fixing a simple userspace bug in an old
> > klog daemon.
> > 
> 
> As an user and sysadmin, I'd rather not have to find out every place that
> mounts /proc in a chroot to chmod all relevant files :(  That's fighting a
> loosing battle, unlike fixing broken tools (which at least will stay fixed).

There's only one set of "kallsyms" permissions.  If you chmod it in one
mount of proc, the permissions apply in *all* mounts of proc, current
or future.

So you don't have to find every place that mounts /proc - you can just
chmod it once at startup and be done.

    - Kevin


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 19:05           ` H. Peter Anvin
  2010-11-29 19:21             ` Eric Paris
@ 2010-11-29 21:49             ` Willy Tarreau
  1 sibling, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-29 21:49 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Sarah Sharp, Linus Torvalds, Marcus Meissner,
	linux-kernel, tj, akpm, alan

On Mon, Nov 29, 2010 at 11:05:58AM -0800, H. Peter Anvin wrote:
> Can we please not use CAP_SYS_ADMIN for this?  Relying on CAP_SYS_ADMIN
> is worse than anything else -- it is a fixed policy hardcoded in the
> kernel, with no ability for the system owner to delegate the policy
> outward, e.g. by adding group read permission and/or chgrp the file.
> 
> Delegating CAP_SYS_ADMIN, of course, otherwise known as "everything", is
> worse than anything...

Agreed, that's why I still think that hiding lots of valuable information to
non-root users will get more users added to unmanaged sudoers files, which
will result in much more holes in the systems than we currently have.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 19:21             ` Eric Paris
@ 2010-11-29 19:38               ` H. Peter Anvin
  0 siblings, 0 replies; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-29 19:38 UTC (permalink / raw)
  To: Eric Paris
  Cc: Ingo Molnar, Sarah Sharp, Linus Torvalds, Marcus Meissner,
	linux-kernel, tj, akpm, w, alan, serue, LSM List, James Morris

On 11/29/2010 11:21 AM, Eric Paris wrote:
>>
>> Delegating CAP_SYS_ADMIN, of course, otherwise known as "everything", is
>> worse than anything...
> 
> Serge just proposed a new CAP_SYSLOG
> 
> http://lwn.net/Articles/378472/
> 
> Which could probably still be renamed and used to cover this access as well....
> 

Quite frankly, the Linux capability system is largely a mess, with big
bundled capacities that don't make much sense and are hideously
inconvenient with the capability system used in user space (groups).
For things like this that genuinely has a file node, *let's use it* and
allow permissions to be controlled by the file node!

	-hpa

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 19:05           ` H. Peter Anvin
@ 2010-11-29 19:21             ` Eric Paris
  2010-11-29 19:38               ` H. Peter Anvin
  2010-11-29 21:49             ` Willy Tarreau
  1 sibling, 1 reply; 81+ messages in thread
From: Eric Paris @ 2010-11-29 19:21 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Sarah Sharp, Linus Torvalds, Marcus Meissner,
	linux-kernel, tj, akpm, w, alan, serue, LSM List, James Morris

On Mon, Nov 29, 2010 at 2:05 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> On 11/29/2010 10:04 AM, Ingo Molnar wrote:
>>
>> * Sarah Sharp <sarah.a.sharp@linux.intel.com> wrote:
>>
>>> On Fri, Nov 26, 2010 at 08:48:09AM +0100, Ingo Molnar wrote:

>>>> Sarah,
>>>>
>>>> Does your system boot fine if we make /proc/kallsyms simply an empty file to
>>>> unprivileged users? Something like the (untested ...) patch below.
>>>
>>> Yes, that works.  The system boots as normal. `cat /proc/kallsyms`
>>> returns an empty file, and `sudo cat /proc/kallsyms` does not.
>>
>> Great! Marcus, mind respinning your patch with that approach?
>>
>
> Can we please not use CAP_SYS_ADMIN for this?  Relying on CAP_SYS_ADMIN
> is worse than anything else -- it is a fixed policy hardcoded in the
> kernel, with no ability for the system owner to delegate the policy
> outward, e.g. by adding group read permission and/or chgrp the file.
>
> Delegating CAP_SYS_ADMIN, of course, otherwise known as "everything", is
> worse than anything...

Serge just proposed a new CAP_SYSLOG

http://lwn.net/Articles/378472/

Which could probably still be renamed and used to cover this access as well....

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 18:04         ` Ingo Molnar
@ 2010-11-29 19:05           ` H. Peter Anvin
  2010-11-29 19:21             ` Eric Paris
  2010-11-29 21:49             ` Willy Tarreau
  0 siblings, 2 replies; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-29 19:05 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Sarah Sharp, Linus Torvalds, Marcus Meissner, linux-kernel, tj,
	akpm, w, alan

On 11/29/2010 10:04 AM, Ingo Molnar wrote:
> 
> * Sarah Sharp <sarah.a.sharp@linux.intel.com> wrote:
> 
>> On Fri, Nov 26, 2010 at 08:48:09AM +0100, Ingo Molnar wrote:
>>>
>>> * Linus Torvalds <torvalds@linux-foundation.org> wrote:
>>>
>>>> On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
>>>> <sarah.a.sharp@linux.intel.com> wrote:
>>>>>
>>>>> .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
>>>>> (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
>>>>> about changing the permissions of kallsyms after boot, but if I can't
>>>>> boot that doesn't help.  Perhaps this can be made a configuration
>>>>> option?
>>>>
>>>> It's not worth a config option.
>>>>
>>>> If it actually breaks user-space, I think we should just revert it.
>>>
>>> Sarah,
>>>
>>> Does your system boot fine if we make /proc/kallsyms simply an empty file to 
>>> unprivileged users? Something like the (untested ...) patch below.
>>
>> Yes, that works.  The system boots as normal. `cat /proc/kallsyms`
>> returns an empty file, and `sudo cat /proc/kallsyms` does not.
> 
> Great! Marcus, mind respinning your patch with that approach?
> 

Can we please not use CAP_SYS_ADMIN for this?  Relying on CAP_SYS_ADMIN
is worse than anything else -- it is a fixed policy hardcoded in the
kernel, with no ability for the system owner to delegate the policy
outward, e.g. by adding group read permission and/or chgrp the file.

Delegating CAP_SYS_ADMIN, of course, otherwise known as "everything", is
worse than anything...
	
	-hpa

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-26  7:38       ` Ingo Molnar
@ 2010-11-29 19:03         ` H. Peter Anvin
  0 siblings, 0 replies; 81+ messages in thread
From: H. Peter Anvin @ 2010-11-29 19:03 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Pavel Machek, Kyle Moffett, Marcus Meissner, torvalds,
	linux-kernel, tj, akpm, w, alan

On 11/25/2010 11:38 PM, Ingo Molnar wrote:
> 
> Yeah, restricting information is always a double edged sword - and by locking down 
> we are implicitly assuming that the number of people trying to do harm is larger 
> than the number of people trying to help. It is probably true though - and the 
> damage they can inflict is becoming more and more serious (financially, legally and 
> socially - and, in some cases, physically) with every year of humanity moving their 
> lives to the 'net.
> 
> So yes, the time has probably come to lock up "potentially harmful" information from 
> the default unprivileged user on Linux - at least from a default kernel policies 
> POV.
> 

The setting of these policies needs to be figured out sensibly.

One of my great complaints about several Linux distributions is that
they keep forcing log files to be readable only by root, even though
they do put the adm group in their default group file -- the adm group
is traditionally the group allowed to read log files.

It is a *good* thing for a *restricted set* of users to have *readonly*
access to this kind of information -- i.e., a group.  It is *not* a good
thing for system security or reliability to force the administrator to
assert root privileges to merely monitor information.

	-hpa

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-29 16:33       ` Sarah Sharp
@ 2010-11-29 18:04         ` Ingo Molnar
  2010-11-29 19:05           ` H. Peter Anvin
  2010-11-29 23:31         ` Alan Cox
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-29 18:04 UTC (permalink / raw)
  To: Sarah Sharp
  Cc: Linus Torvalds, Marcus Meissner, linux-kernel, tj, akpm, hpa, w, alan


* Sarah Sharp <sarah.a.sharp@linux.intel.com> wrote:

> On Fri, Nov 26, 2010 at 08:48:09AM +0100, Ingo Molnar wrote:
> > 
> > * Linus Torvalds <torvalds@linux-foundation.org> wrote:
> > 
> > > On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
> > > <sarah.a.sharp@linux.intel.com> wrote:
> > > >
> > > > .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
> > > > (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
> > > > about changing the permissions of kallsyms after boot, but if I can't
> > > > boot that doesn't help.  Perhaps this can be made a configuration
> > > > option?
> > > 
> > > It's not worth a config option.
> > > 
> > > If it actually breaks user-space, I think we should just revert it.
> > 
> > Sarah,
> > 
> > Does your system boot fine if we make /proc/kallsyms simply an empty file to 
> > unprivileged users? Something like the (untested ...) patch below.
> 
> Yes, that works.  The system boots as normal. `cat /proc/kallsyms`
> returns an empty file, and `sudo cat /proc/kallsyms` does not.

Great! Marcus, mind respinning your patch with that approach?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-26  7:48     ` Ingo Molnar
@ 2010-11-29 16:33       ` Sarah Sharp
  2010-11-29 18:04         ` Ingo Molnar
  2010-11-29 23:31         ` Alan Cox
  0 siblings, 2 replies; 81+ messages in thread
From: Sarah Sharp @ 2010-11-29 16:33 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Linus Torvalds, Marcus Meissner, linux-kernel, tj, akpm, hpa, w, alan

On Fri, Nov 26, 2010 at 08:48:09AM +0100, Ingo Molnar wrote:
> 
> * Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> > On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
> > <sarah.a.sharp@linux.intel.com> wrote:
> > >
> > > .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
> > > (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
> > > about changing the permissions of kallsyms after boot, but if I can't
> > > boot that doesn't help.  Perhaps this can be made a configuration
> > > option?
> > 
> > It's not worth a config option.
> > 
> > If it actually breaks user-space, I think we should just revert it.
> 
> Sarah,
> 
> Does your system boot fine if we make /proc/kallsyms simply an empty file to 
> unprivileged users? Something like the (untested ...) patch below.

Yes, that works.  The system boots as normal. `cat /proc/kallsyms`
returns an empty file, and `sudo cat /proc/kallsyms` does not.

Sarah Sharp


> diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
> index 6f6d091..d54c993 100644
> --- a/kernel/kallsyms.c
> +++ b/kernel/kallsyms.c
> @@ -465,7 +465,7 @@ static int s_show(struct seq_file *m, void *p)
>  	struct kallsym_iter *iter = m->private;
>  
>  	/* Some debugging symbols have no name.  Ignore them. */
> -	if (!iter->name[0])
> +	if (!iter->name[0] || !capable(CAP_SYS_ADMIN))
>  		return 0;
>  
>  	if (iter->module_name[0]) {

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-20  3:18     ` Kees Cook
@ 2010-11-26  7:51       ` Ingo Molnar
  0 siblings, 0 replies; 81+ messages in thread
From: Ingo Molnar @ 2010-11-26  7:51 UTC (permalink / raw)
  To: Kees Cook
  Cc: Kyle McMartin, Marcus Meissner, torvalds, linux-kernel, tj, akpm,
	hpa, w, alan, Andrew Morton


* Kees Cook <kees.cook@canonical.com> wrote:

> On Thu, Nov 18, 2010 at 08:48:04AM +0100, Ingo Molnar wrote:
> > Agreed. A few other kernel address things that should be hidden are:
> > [snip]
> 
> For reference, here's what GRKERNSEC_HIDESYM looks like in grsecurity.
> It's quite a sledgehammer, but it does help to point out at least the
> minimum number of things that need fixing.

Yeah, it's a somewhat disgusting patch - but it also looks useful.

It would be more palatable for upstream if it was:

 - split up

 - if all those GRKERNSEC_HIDESYM #ifdefs were removed, either by making the 
   grsecurity defaults the default behavior, or by intelligently hiding it behinds 
   wrappers.

I'd suggest a single CONFIG_LEGACY_SYMBOLS=y config option for this, but only used 
to show those symbols that are absolutely needed for compatibility - like 
/proc/kallsyms. (Newer distros could disable this option and the kernel could 
eventually default to it being disabled as well.)

Also, while changing hexa output to symbolic output is fine, changing the oops 
output is borderline - that is an absolutely useful piece of information that helps 
us in decoding crashes. So i'd suggest to split that into a super-paranoid option or 
so.

Anyway, after a split-up we'll see how good the individual bits are - it's a bit of 
a mixed bag right now.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 19:54   ` Linus Torvalds
  2010-11-19 19:58     ` david
@ 2010-11-26  7:48     ` Ingo Molnar
  2010-11-29 16:33       ` Sarah Sharp
  1 sibling, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-26  7:48 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Sarah Sharp, Marcus Meissner, linux-kernel, tj, akpm, hpa, w, alan


* Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
> <sarah.a.sharp@linux.intel.com> wrote:
> >
> > .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
> > (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
> > about changing the permissions of kallsyms after boot, but if I can't
> > boot that doesn't help.  Perhaps this can be made a configuration
> > option?
> 
> It's not worth a config option.
> 
> If it actually breaks user-space, I think we should just revert it.

Sarah,

Does your system boot fine if we make /proc/kallsyms simply an empty file to 
unprivileged users? Something like the (untested ...) patch below.

	Ingo

diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 6f6d091..d54c993 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -465,7 +465,7 @@ static int s_show(struct seq_file *m, void *p)
 	struct kallsym_iter *iter = m->private;
 
 	/* Some debugging symbols have no name.  Ignore them. */
-	if (!iter->name[0])
+	if (!iter->name[0] || !capable(CAP_SYS_ADMIN))
 		return 0;
 
 	if (iter->module_name[0]) {

^ permalink raw reply related	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-23 17:24     ` Pavel Machek
@ 2010-11-26  7:38       ` Ingo Molnar
  2010-11-29 19:03         ` H. Peter Anvin
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-26  7:38 UTC (permalink / raw)
  To: Pavel Machek
  Cc: Kyle Moffett, Marcus Meissner, torvalds, linux-kernel, tj, akpm,
	hpa, w, alan


* Pavel Machek <pavel@ucw.cz> wrote:

> Hi!
> 
> > >   (2) Most of the arguments about introducing "uncertainty" into the
> > > hacking process are specious as well. [...]
> > 
> > It is only specious if you ignore the arguments i made in the previous
> > discussion. One argument i made was:
> 
> Well, but it has downsides, too.
> 
> If I know school server is vulnerable, I can get admin to fix it... if
> I can see dmesg without being root, I can help with problems. I have
> done both before...

Yeah, restricting information is always a double edged sword - and by locking down 
we are implicitly assuming that the number of people trying to do harm is larger 
than the number of people trying to help. It is probably true though - and the 
damage they can inflict is becoming more and more serious (financially, legally and 
socially - and, in some cases, physically) with every year of humanity moving their 
lives to the 'net.

So yes, the time has probably come to lock up "potentially harmful" information from 
the default unprivileged user on Linux - at least from a default kernel policies 
POV.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-18  7:31   ` Ingo Molnar
@ 2010-11-23 17:24     ` Pavel Machek
  2010-11-26  7:38       ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: Pavel Machek @ 2010-11-23 17:24 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Kyle Moffett, Marcus Meissner, torvalds, linux-kernel, tj, akpm,
	hpa, w, alan

Hi!

> >   (2) Most of the arguments about introducing "uncertainty" into the
> > hacking process are specious as well. [...]
> 
> It is only specious if you ignore the arguments i made in the previous
> discussion. One argument i made was:

Well, but it has downsides, too.

If I know school server is vulnerable, I can get admin to fix it... if
I can see dmesg without being root, I can help with problems. I have
done both before...

									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-20  2:40   ` Kees Cook
@ 2010-11-20 19:47     ` Henrique de Moraes Holschuh
  2010-11-29 22:58       ` Kevin Easton
  0 siblings, 1 reply; 81+ messages in thread
From: Henrique de Moraes Holschuh @ 2010-11-20 19:47 UTC (permalink / raw)
  To: Kees Cook; +Cc: Linus Torvalds, Andy Walls, linux-kernel, sarah.a.sharp

On Fri, 19 Nov 2010, Kees Cook wrote:
> On Fri, Nov 19, 2010 at 03:22:00PM -0800, Linus Torvalds wrote:
> > In this case, the upside just wasn't big enough to accept _any_
> > breakage, especially since people and distributions can just do the
> > "chmod" themselves if they want to. There was a lot of discussion
> > whether the patch should even go in in the first place. So this time,
> > the "let's just revert it" was a very easy decision for me.
> 
> The downside is that /proc can be remounted multiple times for different
> containers, etc. Having to patch everything that mounts /proc to do the
> chmod seems much more painful that fixing a simple userspace bug in an old
> klog daemon.
> 
> (For example, rsyslogd handles this fine since it's root to open it, and
> even if it fails, it doesn't do the broken fclose().)

If it is a pain only for buggy old/legacy userspace like klogd or a few
tools, it would still be very useful as a Kconfig option defaulting to
disabled.

As an user and sysadmin, I'd rather not have to find out every place that
mounts /proc in a chroot to chmod all relevant files :(  That's fighting a
loosing battle, unlike fixing broken tools (which at least will stay fixed).

Distros could get any fixing done they require, and then enable it for all
their users.  Ubuntu and Debian are likely to do it, and I'd guess so is
Fedora.

-- 
  "One disk to rule them all, One disk to find them. One disk to bring
  them all and in the darkness grind them. In the Land of Redmond
  where the shadows lie." -- The Silicon Valley Tarot
  Henrique Holschuh

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:40 ` Kyle Moffett
                     ` (2 preceding siblings ...)
  2010-11-18  7:31   ` Ingo Molnar
@ 2010-11-20 11:32   ` Avi Kivity
  3 siblings, 0 replies; 81+ messages in thread
From: Avi Kivity @ 2010-11-20 11:32 UTC (permalink / raw)
  To: Kyle Moffett
  Cc: Marcus Meissner, torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

On 11/17/2010 07:40 AM, Kyle Moffett wrote:
>    (1) For 99%+ of all the computers out there you can get a 90%+
> accurate guess for what kernel is running by looking at the version of
> libc installed on the system.  All you have to do for those computers
> is download a bunch of distro kernels and look at the libc packages
> and build a table of "libc6-SOMEVERSION =>  0xADDRESS", etc.  Because
> of how all the vendors backport and track versions, "SOMEVERSION"
> usually includes something wonderfully helpful like "el5" or "squeeze"
> or whatever.  This does *nothing* for those users, and it's not clear
> that it ever *could*.

Isn't the kernel relocatable these days?  We can randomize the kernel 
load address at boot time and make this information useless.

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-16 10:46 Marcus Meissner
                   ` (2 preceding siblings ...)
  2010-11-19 19:19 ` Sarah Sharp
@ 2010-11-20 11:05 ` Richard W.M. Jones
  3 siblings, 0 replies; 81+ messages in thread
From: Richard W.M. Jones @ 2010-11-20 11:05 UTC (permalink / raw)
  To: Marcus Meissner; +Cc: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan


Sorry for being late to join this thread.

I thought I'd also mention that if you can insert a small amount of
shell code into the kernel, it's trivial to search kernel memory for
the symbol table and derive anything else you want from that.

I wrote some proof of concept code to do this a few years ago[1].  I'm
pretty sure you could compress this down to a few bytes of assembler.

(Plus I don't think that removing pointers is a good idea anyway -- it
just breaks userspace tools, and any real world system is going to be
running a well-known kernel that can be downloaded from some mirror
somewhere)

Rich.

[1] It's a poor example, but in here is code that searched for ksyms
and kallsyms in 32 bit i386 kernels (files virt_mem_ksyms.ml and
virt_mem_kallsyms.ml).
http://git.annexia.org/?p=virt-mem.git;a=tree;f=lib;hb=HEAD

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-18  7:48   ` Ingo Molnar
@ 2010-11-20  3:18     ` Kees Cook
  2010-11-26  7:51       ` Ingo Molnar
  0 siblings, 1 reply; 81+ messages in thread
From: Kees Cook @ 2010-11-20  3:18 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Kyle McMartin, Marcus Meissner, torvalds, linux-kernel, tj, akpm,
	hpa, w, alan, Andrew Morton

On Thu, Nov 18, 2010 at 08:48:04AM +0100, Ingo Molnar wrote:
> Agreed. A few other kernel address things that should be hidden are:
> [snip]

For reference, here's what GRKERNSEC_HIDESYM looks like in grsecurity.
It's quite a sledgehammer, but it does help to point out at least the
minimum number of things that need fixing.

And, more directly related to this thread, kallsyms hiding is implemented
in s_show instead of via DAC:


@@ -464,6 +467,11 @@ static int s_show(struct seq_file *m, vo
 {
    struct kallsym_iter *iter = m->private;
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+   if (current_uid())
+       return 0;
+#endif
+
    /* Some debugging symbols have no name.  Ignore them. */
    if (!iter->name[0])
        return 0;

Here's the rest, manually extracted, untested, etc...

---
 arch/powerpc/kernel/process.c    |   10 +++++-----
 arch/sparc/kernel/process_32.c   |    8 ++++----
 arch/sparc/kernel/process_64.c   |    8 ++++----
 arch/sparc/kernel/traps_32.c     |    2 +-
 arch/sparc/kernel/traps_64.c     |   22 +++++++++++-----------
 arch/sparc/kernel/unaligned_64.c |    2 +-
 arch/sparc/mm/fault_64.c         |    2 +-
 arch/x86/kernel/dumpstack.c      |    2 +-
 drivers/message/fusion/mptbase.c |    5 +++++
 fs/proc/array.c                  |    6 ++++++
 fs/proc/base.c                   |   12 ++++++------
 fs/proc/kcore.c                  |    3 +++
 include/linux/kallsyms.h         |   11 ++++++++++-
 kernel/configs.c                 |    6 ++++++
 kernel/kallsyms.c                |   10 +++++++++-
 kernel/module.c                  |    5 +++++
 kernel/panic.c                   |    5 +++--
 kernel/time/timer_list.c         |    8 ++++++++
 kernel/time/timer_stats.c        |    4 ++++
 lib/Kconfig.debug                |    1 +
 lib/vsprintf.c                   |   16 ++++++++++++++--
 mm/kmemleak.c                    |    2 +-
 mm/slub.c                        |    2 +-
 net/atm/proc.c                   |    5 +++++
 net/ipv4/inet_diag.c             |   21 +++++++++++++++++++++
 net/ipv4/tcp_ipv4.c              |   19 +++++++++++++++++--
 net/ipv4/udp.c                   |    7 ++++++-
 net/ipv6/raw.c                   |    8 +++++++-
 net/ipv6/tcp_ipv6.c              |   23 ++++++++++++++++++++---
 net/ipv6/udp.c                   |    7 ++++++-
 net/key/af_key.c                 |    4 ++++
 net/netlink/af_netlink.c         |    8 ++++++++
 net/packet/af_packet.c           |    4 ++++
 net/phonet/socket.c              |    7 ++++++-
 net/sctp/proc.c                  |   14 ++++++++++++--
 net/unix/af_unix.c               |    4 ++++
 36 files changed, 230 insertions(+), 53 deletions(-)


diff -urNp linux-2.6.36/drivers/message/fusion/mptbase.c linux-2.6.36/drivers/message/fusion/mptbase.c
--- linux-2.6.36/drivers/message/fusion/mptbase.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/drivers/message/fusion/mptbase.c	2010-11-06 19:06:37.000000000 -0400
@@ -6681,8 +6681,13 @@ static int mpt_iocinfo_proc_show(struct 
 	seq_printf(m, "  MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth);
 	seq_printf(m, "  MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize);
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	seq_printf(m, "  RequestFrames @ 0x%p (Dma @ 0x%p)\n", NULL, NULL);
+#else
 	seq_printf(m, "  RequestFrames @ 0x%p (Dma @ 0x%p)\n",
 					(void *)ioc->req_frames, (void *)(ulong)ioc->req_frames_dma);
+#endif
+
 	/*
 	 *  Rounding UP to nearest 4-kB boundary here...
 	 */
diff -urNp linux-2.6.36/fs/proc/array.c linux-2.6.36/fs/proc/array.c
--- linux-2.6.36/fs/proc/array.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/fs/proc/array.c	2010-11-06 18:58:50.000000000 -0400
@@ -452,6 +452,12 @@ static int do_task_stat(struct seq_file 
 		gtime = task->gtime;
 	}
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	wchan = 0;
+	eip =0;
+	esp =0;
+#endif
+
 	/* scale priority and nice values from timeslices to -20..20 */
 	/* to make it look like a "normal" Unix priority/nice value  */
 	priority = task_prio(task);
diff -urNp linux-2.6.36/fs/proc/base.c linux-2.6.36/fs/proc/base.c
--- linux-2.6.36/fs/proc/base.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/fs/proc/base.c	2010-11-06 18:58:50.000000000 -0400
@@ -296,7 +296,7 @@ static int proc_pid_auxv(struct task_str
 }
 
 
-#ifdef CONFIG_KALLSYMS
+#if defined(CONFIG_KALLSYMS) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 /*
  * Provides a wchan file via kallsyms in a proper one-value-per-file format.
  * Returns the resolved symbol.  If that fails, simply return the address.
@@ -318,7 +318,7 @@ static int proc_pid_wchan(struct task_st
 }
 #endif /* CONFIG_KALLSYMS */
 
-#ifdef CONFIG_STACKTRACE
+#if defined(CONFIG_STACKTRACE) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 
 #define MAX_STACK_TRACE_DEPTH	64
 
@@ -2705,10 +2705,10 @@ static const struct pid_entry tgid_base_
 #ifdef CONFIG_SECURITY
 	DIR("attr",       S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
 #endif
-#ifdef CONFIG_KALLSYMS
+#if defined(CONFIG_KALLSYMS) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 	INF("wchan",      S_IRUGO, proc_pid_wchan),
 #endif
-#ifdef CONFIG_STACKTRACE
+#if defined(CONFIG_STACKTRACE) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
 #ifdef CONFIG_SCHEDSTATS
@@ -3040,10 +3040,10 @@ static const struct pid_entry tid_base_s
 #ifdef CONFIG_SECURITY
 	DIR("attr",      S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
 #endif
-#ifdef CONFIG_KALLSYMS
+#if defined(CONFIG_KALLSYMS) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 	INF("wchan",     S_IRUGO, proc_pid_wchan),
 #endif
-#ifdef CONFIG_STACKTRACE
+#if defined(CONFIG_STACKTRACE) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
 #ifdef CONFIG_SCHEDSTATS
diff -urNp linux-2.6.36/fs/proc/kcore.c linux-2.6.36/fs/proc/kcore.c
--- linux-2.6.36/fs/proc/kcore.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/fs/proc/kcore.c	2010-11-06 18:58:50.000000000 -0400
@@ -542,6 +542,9 @@ read_kcore(struct file *file, char __use
 
 static int open_kcore(struct inode *inode, struct file *filp)
 {
+#if defined(CONFIG_GRKERNSEC_HIDESYM)
+	return -EPERM;
+#endif
 	if (!capable(CAP_SYS_RAWIO))
 		return -EPERM;
 	if (kcore_need_update)
diff -urNp linux-2.6.36/include/linux/kallsyms.h linux-2.6.36/include/linux/kallsyms.h
--- linux-2.6.36/include/linux/kallsyms.h	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/include/linux/kallsyms.h	2010-11-15 17:10:35.000000000 -0500
@@ -15,7 +15,8 @@
 
 struct module;
 
-#ifdef CONFIG_KALLSYMS
+#if !defined(__INCLUDED_BY_HIDESYM) || !defined(CONFIG_KALLSYMS)
+#if defined(CONFIG_KALLSYMS) && !defined(CONFIG_GRKERNSEC_HIDESYM)
 /* Lookup the address for a symbol. Returns 0 if not found. */
 unsigned long kallsyms_lookup_name(const char *name);
 
@@ -92,6 +93,14 @@ static inline int lookup_symbol_attrs(un
 /* Stupid that this does nothing, but I didn't create this mess. */
 #define __print_symbol(fmt, addr)
 #endif /*CONFIG_KALLSYMS*/
+#else /* when included by kallsyms.c or vsnprintf.c, with HIDESYM enabled */
+extern void __print_symbol(const char *fmt, unsigned long address);
+extern int sprint_symbol(char *buffer, unsigned long address);
+const char *kallsyms_lookup(unsigned long addr,
+			    unsigned long *symbolsize,
+			    unsigned long *offset,
+			    char **modname, char *namebuf);
+#endif
 
 /* This macro allows us to keep printk typechecking */
 static void __check_printsym_format(const char *fmt, ...)
diff -urNp linux-2.6.36/kernel/configs.c linux-2.6.36/kernel/configs.c
--- linux-2.6.36/kernel/configs.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/configs.c	2010-11-06 18:58:50.000000000 -0400
@@ -73,8 +73,14 @@ static int __init ikconfig_init(void)
 	struct proc_dir_entry *entry;
 
 	/* create the current config file */
+#if defined(CONFIG_GRKERNSEC_HIDESYM)
+	entry = proc_create("config.gz", S_IFREG | S_IRUSR, NULL,
+			    &ikconfig_file_ops);
+#else
 	entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
 			    &ikconfig_file_ops);
+#endif
+
 	if (!entry)
 		return -ENOMEM;
 
diff -urNp linux-2.6.36/kernel/kallsyms.c linux-2.6.36/kernel/kallsyms.c
--- linux-2.6.36/kernel/kallsyms.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/kallsyms.c	2010-11-06 18:58:50.000000000 -0400
@@ -11,6 +11,9 @@
  *      Changed the compression method from stem compression to "table lookup"
  *      compression (see scripts/kallsyms.c for a more complete description)
  */
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+#define __INCLUDED_BY_HIDESYM 1
+#endif
 #include <linux/kallsyms.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -464,6 +467,11 @@ static int s_show(struct seq_file *m, vo
 {
 	struct kallsym_iter *iter = m->private;
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	if (current_uid())
+		return 0;
+#endif
+
 	/* Some debugging symbols have no name.  Ignore them. */
 	if (!iter->name[0])
 		return 0;
@@ -504,7 +512,7 @@ static int kallsyms_open(struct inode *i
 	struct kallsym_iter *iter;
 	int ret;
 
-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
 	if (!iter)
 		return -ENOMEM;
 	reset_iter(iter, 0);
diff -urNp linux-2.6.36/kernel/module.c linux-2.6.36/kernel/module.c
--- linux-2.6.36/kernel/module.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/module.c	2010-11-06 18:58:50.000000000 -0400
@@ -3075,6 +3075,11 @@ static const struct file_operations proc
 
 static int __init proc_modules_init(void)
 {
+#ifndef CONFIG_GRKERNSEC_HIDESYM
+	proc_create("modules", S_IRUSR, NULL, &proc_modules_operations);
+#else
+	proc_create("modules", S_IRUSR, NULL, &proc_modules_operations);
+#endif
 	return 0;
 }
 module_init(proc_modules_init);
diff -urNp linux-2.6.36/kernel/time/timer_list.c linux-2.6.36/kernel/time/timer_list.c
--- linux-2.6.36/kernel/time/timer_list.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/time/timer_list.c	2010-11-06 18:58:50.000000000 -0400
@@ -38,12 +38,16 @@ DECLARE_PER_CPU(struct hrtimer_cpu_base,
 
 static void print_name_offset(struct seq_file *m, void *sym)
 {
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	SEQ_printf(m, "<%p>", NULL);
+#else
 	char symname[KSYM_NAME_LEN];
 
 	if (lookup_symbol_name((unsigned long)sym, symname) < 0)
 		SEQ_printf(m, "<%p>", sym);
 	else
 		SEQ_printf(m, "%s", symname);
+#endif
 }
 
 static void
@@ -112,7 +116,11 @@ next_one:
 static void
 print_base(struct seq_file *m, struct hrtimer_clock_base *base, u64 now)
 {
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	SEQ_printf(m, "  .base:       %p\n", NULL);
+#else
 	SEQ_printf(m, "  .base:       %p\n", base);
+#endif
 	SEQ_printf(m, "  .index:      %d\n",
 			base->index);
 	SEQ_printf(m, "  .resolution: %Lu nsecs\n",
diff -urNp linux-2.6.36/kernel/time/timer_stats.c linux-2.6.36/kernel/time/timer_stats.c
--- linux-2.6.36/kernel/time/timer_stats.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/time/timer_stats.c	2010-11-06 18:58:50.000000000 -0400
@@ -269,12 +269,16 @@ void timer_stats_update_stats(void *time
 
 static void print_name_offset(struct seq_file *m, unsigned long addr)
 {
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	seq_printf(m, "<%p>", NULL);
+#else
 	char symname[KSYM_NAME_LEN];
 
 	if (lookup_symbol_name(addr, symname) < 0)
 		seq_printf(m, "<%p>", (void *)addr);
 	else
 		seq_printf(m, "%s", symname);
+#endif
 }
 
 static int tstats_show(struct seq_file *m, void *v)
diff -urNp linux-2.6.36/lib/Kconfig.debug linux-2.6.36/lib/Kconfig.debug
--- linux-2.6.36/lib/Kconfig.debug	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/lib/Kconfig.debug	2010-11-06 19:03:24.000000000 -0400
@@ -998,6 +998,7 @@ config LATENCYTOP
 	depends on DEBUG_KERNEL
 	depends on STACKTRACE_SUPPORT
 	depends on PROC_FS
+	depends on !GRKERNSEC_HIDESYM
 	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE
 	select KALLSYMS
 	select KALLSYMS_ALL
diff -urNp linux-2.6.36/lib/vsprintf.c linux-2.6.36/lib/vsprintf.c
--- linux-2.6.36/lib/vsprintf.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/lib/vsprintf.c	2010-11-13 16:31:35.000000000 -0500
@@ -16,6 +16,9 @@
  * - scnprintf and vscnprintf
  */
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+#define __INCLUDED_BY_HIDESYM 1
+#endif
 #include <stdarg.h>
 #include <linux/module.h>
 #include <linux/types.h>
@@ -574,7 +577,7 @@ char *symbol_string(char *buf, char *end
 	unsigned long value = (unsigned long) ptr;
 #ifdef CONFIG_KALLSYMS
 	char sym[KSYM_SYMBOL_LEN];
-	if (ext != 'f' && ext != 's')
+	if (ext != 'f' && ext != 's' && ext != 'a')
 		sprint_symbol(sym, value);
 	else
 		kallsyms_lookup(value, NULL, NULL, NULL, sym);
@@ -947,6 +950,8 @@ char *uuid_string(char *buf, char *end, 
  * - 'f' For simple symbolic function names without offset
  * - 'S' For symbolic direct pointers with offset
  * - 's' For symbolic direct pointers without offset
+ * - 'A' For symbolic direct pointers with offset approved for use with GRKERNSEC_HIDESYM
+ * - 'a' For symbolic direct pointers without offset approved for use with GRKERNSEC_HIDESYM
  * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
  * - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201]
  * - 'M' For a 6-byte MAC address, it prints the address in the
@@ -989,7 +994,7 @@ char *pointer(const char *fmt, char *buf
 	      struct printf_spec spec)
 {
 	if (!ptr)
-		return string(buf, end, "(null)", spec);
+		return string(buf, end, "(nil)", spec);
 
 	switch (*fmt) {
 	case 'F':
@@ -998,6 +1003,13 @@ char *pointer(const char *fmt, char *buf
 		/* Fallthrough */
 	case 'S':
 	case 's':
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		break;
+#else
+		return symbol_string(buf, end, ptr, spec, *fmt);
+#endif
+	case 'A':
+	case 'a':
 		return symbol_string(buf, end, ptr, spec, *fmt);
 	case 'R':
 	case 'r':
diff -urNp linux-2.6.36/net/atm/proc.c linux-2.6.36/net/atm/proc.c
--- linux-2.6.36/net/atm/proc.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/atm/proc.c	2010-11-06 18:58:50.000000000 -0400
@@ -190,7 +190,12 @@ static void vcc_info(struct seq_file *se
 {
 	struct sock *sk = sk_atm(vcc);
 
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	seq_printf(seq, "%p ", NULL);
+#else
 	seq_printf(seq, "%p ", vcc);
+#endif
+
 	if (!vcc->dev)
 		seq_printf(seq, "Unassigned    ");
 	else
diff -urNp linux-2.6.36/net/ipv4/inet_diag.c linux-2.6.36/net/ipv4/inet_diag.c
--- linux-2.6.36/net/ipv4/inet_diag.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv4/inet_diag.c	2010-11-13 16:33:13.000000000 -0500
@@ -114,8 +114,14 @@ static int inet_csk_diag_fill(struct soc
 	r->idiag_retrans = 0;
 
 	r->id.idiag_if = sk->sk_bound_dev_if;
+
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	r->id.idiag_cookie[0] = 0;
+	r->id.idiag_cookie[1] = 0;
+#else
 	r->id.idiag_cookie[0] = (u32)(unsigned long)sk;
 	r->id.idiag_cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1);
+#endif
 
 	r->id.idiag_sport = inet->inet_sport;
 	r->id.idiag_dport = inet->inet_dport;
@@ -201,8 +207,15 @@ static int inet_twsk_diag_fill(struct in
 	r->idiag_family	      = tw->tw_family;
 	r->idiag_retrans      = 0;
 	r->id.idiag_if	      = tw->tw_bound_dev_if;
+
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	r->id.idiag_cookie[0] = 0;
+	r->id.idiag_cookie[1] = 0;
+#else
 	r->id.idiag_cookie[0] = (u32)(unsigned long)tw;
 	r->id.idiag_cookie[1] = (u32)(((unsigned long)tw >> 31) >> 1);
+#endif
+
 	r->id.idiag_sport     = tw->tw_sport;
 	r->id.idiag_dport     = tw->tw_dport;
 	r->id.idiag_src[0]    = tw->tw_rcv_saddr;
@@ -285,12 +298,14 @@ static int inet_diag_get_exact(struct sk
 	if (sk == NULL)
 		goto unlock;
 
+#ifndef CONFIG_GRKERNSEC_HIDESYM
 	err = -ESTALE;
 	if ((req->id.idiag_cookie[0] != INET_DIAG_NOCOOKIE ||
 	     req->id.idiag_cookie[1] != INET_DIAG_NOCOOKIE) &&
 	    ((u32)(unsigned long)sk != req->id.idiag_cookie[0] ||
 	     (u32)((((unsigned long)sk) >> 31) >> 1) != req->id.idiag_cookie[1]))
 		goto out;
+#endif
 
 	err = -ENOMEM;
 	rep = alloc_skb(NLMSG_SPACE((sizeof(struct inet_diag_msg) +
@@ -578,8 +593,14 @@ static int inet_diag_fill_req(struct sk_
 	r->idiag_retrans = req->retrans;
 
 	r->id.idiag_if = sk->sk_bound_dev_if;
+
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+	r->id.idiag_cookie[0] = 0;
+	r->id.idiag_cookie[1] = 0;
+#else
 	r->id.idiag_cookie[0] = (u32)(unsigned long)req;
 	r->id.idiag_cookie[1] = (u32)(((unsigned long)req >> 31) >> 1);
+#endif
 
 	tmo = req->expires - jiffies;
 	if (tmo < 0)
diff -urNp linux-2.6.36/net/ipv4/tcp_ipv4.c linux-2.6.36/net/ipv4/tcp_ipv4.c
--- linux-2.6.36/net/ipv4/tcp_ipv4.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv4/tcp_ipv4.c	2010-11-06 19:08:40.000000000 -0400
@@ -2400,7 +2400,11 @@ static void get_openreq4(struct sock *sk
 		0,  /* non standard timer */
 		0, /* open_requests have no inode */
 		atomic_read(&sk->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		NULL,
+#else
 		req,
+#endif
 		len);
 }
 
@@ -2450,7 +2454,12 @@ static void get_tcp4_sock(struct sock *s
 		sock_i_uid(sk),
 		icsk->icsk_probes_out,
 		sock_i_ino(sk),
-		atomic_read(&sk->sk_refcnt), sk,
+		atomic_read(&sk->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		NULL,
+#else
+		sk,
+#endif
 		jiffies_to_clock_t(icsk->icsk_rto),
 		jiffies_to_clock_t(icsk->icsk_ack.ato),
 		(icsk->icsk_ack.quick << 1) | icsk->icsk_ack.pingpong,
@@ -2478,7 +2487,13 @@ static void get_timewait4_sock(struct in
 		" %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p%n",
 		i, src, srcp, dest, destp, tw->tw_substate, 0, 0,
 		3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
-		atomic_read(&tw->tw_refcnt), tw, len);
+		atomic_read(&tw->tw_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		NULL,
+#else
+		tw,
+#endif
+		len);
 }
 
 #define TMPSZ 150
diff -urNp linux-2.6.36/net/ipv4/udp.c linux-2.6.36/net/ipv4/udp.c
--- linux-2.6.36/net/ipv4/udp.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv4/udp.c	2010-11-06 18:58:50.000000000 -0400
@@ -2051,7 +2051,12 @@ static void udp4_format_sock(struct sock
 		sk_wmem_alloc_get(sp),
 		sk_rmem_alloc_get(sp),
 		0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
-		atomic_read(&sp->sk_refcnt), sp,
+		atomic_read(&sp->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		NULL,
+#else
+		sp,
+#endif
 		atomic_read(&sp->sk_drops), len);
 }
 
diff -urNp linux-2.6.36/net/ipv6/raw.c linux-2.6.36/net/ipv6/raw.c
--- linux-2.6.36/net/ipv6/raw.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv6/raw.c	2010-11-06 18:58:50.000000000 -0400
@@ -1243,7 +1243,13 @@ static void raw6_sock_seq_show(struct se
 		   0, 0L, 0,
 		   sock_i_uid(sp), 0,
 		   sock_i_ino(sp),
-		   atomic_read(&sp->sk_refcnt), sp, atomic_read(&sp->sk_drops));
+		   atomic_read(&sp->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		   NULL,
+#else
+		   sp,
+#endif
+		   atomic_read(&sp->sk_drops));
 }
 
 static int raw6_seq_show(struct seq_file *seq, void *v)
diff -urNp linux-2.6.36/net/ipv6/tcp_ipv6.c linux-2.6.36/net/ipv6/tcp_ipv6.c
--- linux-2.6.36/net/ipv6/tcp_ipv6.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv6/tcp_ipv6.c	2010-11-06 18:58:50.000000000 -0400
@@ -1987,7 +1987,13 @@ static void get_openreq6(struct seq_file
 		   uid,
 		   0,  /* non standard timer */
 		   0, /* open_requests have no inode */
-		   0, req);
+		   0,
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		   NULL
+#else
+		   req
+#endif
+		   );
 }
 
 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
@@ -2037,7 +2043,12 @@ static void get_tcp6_sock(struct seq_fil
 		   sock_i_uid(sp),
 		   icsk->icsk_probes_out,
 		   sock_i_ino(sp),
-		   atomic_read(&sp->sk_refcnt), sp,
+		   atomic_read(&sp->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		   NULL,
+#else
+		   sp,
+#endif
 		   jiffies_to_clock_t(icsk->icsk_rto),
 		   jiffies_to_clock_t(icsk->icsk_ack.ato),
 		   (icsk->icsk_ack.quick << 1 ) | icsk->icsk_ack.pingpong,
@@ -2072,7 +2083,13 @@ static void get_timewait6_sock(struct se
 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
 		   tw->tw_substate, 0, 0,
 		   3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
-		   atomic_read(&tw->tw_refcnt), tw);
+		   atomic_read(&tw->tw_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		   NULL
+#else
+		   tw
+#endif
+		   );
 }
 
 static int tcp6_seq_show(struct seq_file *seq, void *v)
diff -urNp linux-2.6.36/net/ipv6/udp.c linux-2.6.36/net/ipv6/udp.c
--- linux-2.6.36/net/ipv6/udp.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/ipv6/udp.c	2010-11-06 18:58:50.000000000 -0400
@@ -1399,7 +1399,12 @@ static void udp6_sock_seq_show(struct se
 		   0, 0L, 0,
 		   sock_i_uid(sp), 0,
 		   sock_i_ino(sp),
-		   atomic_read(&sp->sk_refcnt), sp,
+		   atomic_read(&sp->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+		   NULL,
+#else
+		   sp,
+#endif
 		   atomic_read(&sp->sk_drops));
 }
 
diff -urNp linux-2.6.36/net/key/af_key.c linux-2.6.36/net/key/af_key.c
--- linux-2.6.36/net/key/af_key.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/key/af_key.c	2010-11-06 18:58:50.000000000 -0400
@@ -3644,7 +3644,11 @@ static int pfkey_seq_show(struct seq_fil
 		seq_printf(f ,"sk       RefCnt Rmem   Wmem   User   Inode\n");
 	else
 		seq_printf(f ,"%p %-6d %-6u %-6u %-6u %-6lu\n",
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			       NULL,
+#else
 			       s,
+#endif
 			       atomic_read(&s->sk_refcnt),
 			       sk_rmem_alloc_get(s),
 			       sk_wmem_alloc_get(s),
diff -urNp linux-2.6.36/net/netlink/af_netlink.c linux-2.6.36/net/netlink/af_netlink.c
--- linux-2.6.36/net/netlink/af_netlink.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/netlink/af_netlink.c	2010-11-06 18:58:50.000000000 -0400
@@ -2007,13 +2007,21 @@ static int netlink_seq_show(struct seq_f
 		struct netlink_sock *nlk = nlk_sk(s);
 
 		seq_printf(seq, "%p %-3d %-6d %08x %-8d %-8d %p %-8d %-8d %-8lu\n",
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			   NULL,
+#else
 			   s,
+#endif
 			   s->sk_protocol,
 			   nlk->pid,
 			   nlk->groups ? (u32)nlk->groups[0] : 0,
 			   sk_rmem_alloc_get(s),
 			   sk_wmem_alloc_get(s),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			   NULL,
+#else
 			   nlk->cb,
+#endif
 			   atomic_read(&s->sk_refcnt),
 			   atomic_read(&s->sk_drops),
 			   sock_i_ino(s)
diff -urNp linux-2.6.36/net/packet/af_packet.c linux-2.6.36/net/packet/af_packet.c
--- linux-2.6.36/net/packet/af_packet.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/packet/af_packet.c	2010-11-06 18:58:50.000000000 -0400
@@ -2637,7 +2637,11 @@ static int packet_seq_show(struct seq_fi
 
 		seq_printf(seq,
 			   "%p %-6d %-4d %04x   %-5d %1d %-6u %-6u %-6lu\n",
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			   NULL,
+#else
 			   s,
+#endif
 			   atomic_read(&s->sk_refcnt),
 			   s->sk_type,
 			   ntohs(po->num),
diff -urNp linux-2.6.36/net/phonet/socket.c linux-2.6.36/net/phonet/socket.c
--- linux-2.6.36/net/phonet/socket.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/phonet/socket.c	2010-11-13 16:29:01.000000000 -0500
@@ -535,7 +535,12 @@ static int pn_sock_seq_show(struct seq_f
 			sk->sk_state,
 			sk_wmem_alloc_get(sk), sk_rmem_alloc_get(sk),
 			sock_i_uid(sk), sock_i_ino(sk),
-			atomic_read(&sk->sk_refcnt), sk,
+			atomic_read(&sk->sk_refcnt),
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			NULL,
+#else
+			sk,
+#endif
 			atomic_read(&sk->sk_drops), &len);
 	}
 	seq_printf(seq, "%*s\n", 127 - len, "");
diff -urNp linux-2.6.36/net/sctp/proc.c linux-2.6.36/net/sctp/proc.c
--- linux-2.6.36/net/sctp/proc.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/sctp/proc.c	2010-11-13 16:29:01.000000000 -0500
@@ -212,7 +212,12 @@ static int sctp_eps_seq_show(struct seq_
 	sctp_for_each_hentry(epb, node, &head->chain) {
 		ep = sctp_ep(epb);
 		sk = epb->sk;
-		seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk,
+		seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ",
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			   NULL, NULL,
+#else
+			   ep, sk,
+#endif
 			   sctp_sk(sk)->type, sk->sk_state, hash,
 			   epb->bind_addr.port,
 			   sock_i_uid(sk), sock_i_ino(sk));
@@ -318,7 +323,12 @@ static int sctp_assocs_seq_show(struct s
 		seq_printf(seq,
 			   "%8p %8p %-3d %-3d %-2d %-4d "
 			   "%4d %8d %8d %7d %5lu %-5d %5d ",
-			   assoc, sk, sctp_sk(sk)->type, sk->sk_state,
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			   NULL, NULL,
+#else
+			   assoc, sk,
+#endif
+			   sctp_sk(sk)->type, sk->sk_state,
 			   assoc->state, hash,
 			   assoc->assoc_id,
 			   assoc->sndbuf_used,
diff -urNp linux-2.6.36/net/unix/af_unix.c linux-2.6.36/net/unix/af_unix.c
--- linux-2.6.36/net/unix/af_unix.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/net/unix/af_unix.c	2010-11-06 20:08:14.000000000 -0400
@@ -2195,7 +2195,11 @@ static int unix_seq_show(struct seq_file
 		unix_state_lock(s);
 
 		seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu",
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+			NULL,
+#else
 			s,
+#endif
 			atomic_read(&s->sk_refcnt),
 			0,
 			s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0,
diff -urNp linux-2.6.36/arch/powerpc/kernel/process.c linux-2.6.36/arch/powerpc/kernel/process.c
--- linux-2.6.36/arch/powerpc/kernel/process.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/powerpc/kernel/process.c	2010-11-13 16:29:01.000000000 -0500
@@ -654,8 +654,8 @@ void show_regs(struct pt_regs * regs)
 	 * Lookup NIP late so we have the best change of getting the
 	 * above info out without failing
 	 */
-	printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip);
-	printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link);
+	printk("NIP ["REG"] %pA\n", regs->nip, (void *)regs->nip);
+	printk("LR ["REG"] %pA\n", regs->link, (void *)regs->link);
 #endif
 	show_stack(current, (unsigned long *) regs->gpr[1]);
 	if (!user_mode(regs))
@@ -1145,10 +1145,10 @@ void show_stack(struct task_struct *tsk,
 		newsp = stack[0];
 		ip = stack[STACK_FRAME_LR_SAVE];
 		if (!firstframe || ip != lr) {
-			printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
+			printk("["REG"] ["REG"] %pA", sp, ip, (void *)ip);
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 			if ((ip == rth || ip == mrth) && curr_frame >= 0) {
-				printk(" (%pS)",
+				printk(" (%pA)",
 				       (void *)current->ret_stack[curr_frame].ret);
 				curr_frame--;
 			}
@@ -1168,7 +1168,7 @@ void show_stack(struct task_struct *tsk,
 			struct pt_regs *regs = (struct pt_regs *)
 				(sp + STACK_FRAME_OVERHEAD);
 			lr = regs->link;
-			printk("--- Exception: %lx at %pS\n    LR = %pS\n",
+			printk("--- Exception: %lx at %pA\n    LR = %pA\n",
 			       regs->trap, (void *)regs->nip, (void *)lr);
 			firstframe = 1;
 		}
diff -urNp linux-2.6.36/arch/sparc/kernel/process_32.c linux-2.6.36/arch/sparc/kernel/process_32.c
--- linux-2.6.36/arch/sparc/kernel/process_32.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/kernel/process_32.c	2010-11-13 16:29:01.000000000 -0500
@@ -196,7 +196,7 @@ void __show_backtrace(unsigned long fp)
 		       rw->ins[4], rw->ins[5],
 		       rw->ins[6],
 		       rw->ins[7]);
-		printk("%pS\n", (void *) rw->ins[7]);
+		printk("%pA\n", (void *) rw->ins[7]);
 		rw = (struct reg_window32 *) rw->ins[6];
 	}
 	spin_unlock_irqrestore(&sparc_backtrace_lock, flags);
@@ -263,14 +263,14 @@ void show_regs(struct pt_regs *r)
 
         printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx    %s\n",
 	       r->psr, r->pc, r->npc, r->y, print_tainted());
-	printk("PC: <%pS>\n", (void *) r->pc);
+	printk("PC: <%pA>\n", (void *) r->pc);
 	printk("%%G: %08lx %08lx  %08lx %08lx  %08lx %08lx  %08lx %08lx\n",
 	       r->u_regs[0], r->u_regs[1], r->u_regs[2], r->u_regs[3],
 	       r->u_regs[4], r->u_regs[5], r->u_regs[6], r->u_regs[7]);
 	printk("%%O: %08lx %08lx  %08lx %08lx  %08lx %08lx  %08lx %08lx\n",
 	       r->u_regs[8], r->u_regs[9], r->u_regs[10], r->u_regs[11],
 	       r->u_regs[12], r->u_regs[13], r->u_regs[14], r->u_regs[15]);
-	printk("RPC: <%pS>\n", (void *) r->u_regs[15]);
+	printk("RPC: <%pA>\n", (void *) r->u_regs[15]);
 
 	printk("%%L: %08lx %08lx  %08lx %08lx  %08lx %08lx  %08lx %08lx\n",
 	       rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3],
@@ -305,7 +305,7 @@ void show_stack(struct task_struct *tsk,
 		rw = (struct reg_window32 *) fp;
 		pc = rw->ins[7];
 		printk("[%08lx : ", pc);
-		printk("%pS ] ", (void *) pc);
+		printk("%pA ] ", (void *) pc);
 		fp = rw->ins[6];
 	} while (++count < 16);
 	printk("\n");
diff -urNp linux-2.6.36/arch/sparc/kernel/process_64.c linux-2.6.36/arch/sparc/kernel/process_64.c
--- linux-2.6.36/arch/sparc/kernel/process_64.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/kernel/process_64.c	2010-11-13 16:34:22.000000000 -0500
@@ -180,14 +180,14 @@ static void show_regwindow(struct pt_reg
 	printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n",
 	       rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]);
 	if (regs->tstate & TSTATE_PRIV)
-		printk("I7: <%pS>\n", (void *) rwk->ins[7]);
+		printk("I7: <%pA>\n", (void *) rwk->ins[7]);
 }
 
 void show_regs(struct pt_regs *regs)
 {
 	printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x    %s\n", regs->tstate,
 	       regs->tpc, regs->tnpc, regs->y, print_tainted());
-	printk("TPC: <%pS>\n", (void *) regs->tpc);
+	printk("TPC: <%pA>\n", (void *) regs->tpc);
 	printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n",
 	       regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
 	       regs->u_regs[3]);
@@ -200,7 +200,7 @@ void show_regs(struct pt_regs *regs)
 	printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n",
 	       regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
 	       regs->u_regs[15]);
-	printk("RPC: <%pS>\n", (void *) regs->u_regs[15]);
+	printk("RPC: <%pA>\n", (void *) regs->u_regs[15]);
 	show_regwindow(regs);
 	show_stack(current, (unsigned long *) regs->u_regs[UREG_FP]);
 }
@@ -285,7 +285,7 @@ void arch_trigger_all_cpu_backtrace(void
 		       ((tp && tp->task) ? tp->task->pid : -1));
 
 		if (gp->tstate & TSTATE_PRIV) {
-			printk("             TPC[%pS] O7[%pS] I7[%pS] RPC[%pS]\n",
+			printk("             TPC[%pA] O7[%pA] I7[%pA] RPC[%pA]\n",
 			       (void *) gp->tpc,
 			       (void *) gp->o7,
 			       (void *) gp->i7,
diff -urNp linux-2.6.36/arch/sparc/kernel/traps_32.c linux-2.6.36/arch/sparc/kernel/traps_32.c
--- linux-2.6.36/arch/sparc/kernel/traps_32.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/kernel/traps_32.c	2010-11-13 16:29:01.000000000 -0500
@@ -76,7 +76,7 @@ void die_if_kernel(char *str, struct pt_
 		      count++ < 30				&&
                       (((unsigned long) rw) >= PAGE_OFFSET)	&&
 		      !(((unsigned long) rw) & 0x7)) {
-			printk("Caller[%08lx]: %pS\n", rw->ins[7],
+			printk("Caller[%08lx]: %pA\n", rw->ins[7],
 			       (void *) rw->ins[7]);
 			rw = (struct reg_window32 *)rw->ins[6];
 		}
diff -urNp linux-2.6.36/arch/sparc/kernel/traps_64.c linux-2.6.36/arch/sparc/kernel/traps_64.c
--- linux-2.6.36/arch/sparc/kernel/traps_64.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/kernel/traps_64.c	2010-11-13 16:34:06.000000000 -0500
@@ -75,7 +75,7 @@ static void dump_tl1_traplog(struct tl1_
 		       i + 1,
 		       p->trapstack[i].tstate, p->trapstack[i].tpc,
 		       p->trapstack[i].tnpc, p->trapstack[i].tt);
-		printk("TRAPLOG: TPC<%pS>\n", (void *) p->trapstack[i].tpc);
+		printk("TRAPLOG: TPC<%pA>\n", (void *) p->trapstack[i].tpc);
 	}
 }
 
@@ -1141,7 +1141,7 @@ static void cheetah_log_errors(struct pt
 	       regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate);
 	printk("%s" "ERROR(%d): ",
 	       (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id());
-	printk("TPC<%pS>\n", (void *) regs->tpc);
+	printk("TPC<%pA>\n", (void *) regs->tpc);
 	printk("%s" "ERROR(%d): M_SYND(%lx),  E_SYND(%lx)%s%s\n",
 	       (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(),
 	       (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT,
@@ -1748,7 +1748,7 @@ void cheetah_plus_parity_error(int type,
 		       smp_processor_id(),
 		       (type & 0x1) ? 'I' : 'D',
 		       regs->tpc);
-		printk(KERN_EMERG "TPC<%pS>\n", (void *) regs->tpc);
+		printk(KERN_EMERG "TPC<%pA>\n", (void *) regs->tpc);
 		panic("Irrecoverable Cheetah+ parity error.");
 	}
 
@@ -1756,7 +1756,7 @@ void cheetah_plus_parity_error(int type,
 	       smp_processor_id(),
 	       (type & 0x1) ? 'I' : 'D',
 	       regs->tpc);
-	printk(KERN_WARNING "TPC<%pS>\n", (void *) regs->tpc);
+	printk(KERN_WARNING "TPC<%pA>\n", (void *) regs->tpc);
 }
 
 struct sun4v_error_entry {
@@ -1963,9 +1963,9 @@ void sun4v_itlb_error_report(struct pt_r
 
 	printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n",
 	       regs->tpc, tl);
-	printk(KERN_EMERG "SUN4V-ITLB: TPC<%pS>\n", (void *) regs->tpc);
+	printk(KERN_EMERG "SUN4V-ITLB: TPC<%pA>\n", (void *) regs->tpc);
 	printk(KERN_EMERG "SUN4V-ITLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
-	printk(KERN_EMERG "SUN4V-ITLB: O7<%pS>\n",
+	printk(KERN_EMERG "SUN4V-ITLB: O7<%pA>\n",
 	       (void *) regs->u_regs[UREG_I7]);
 	printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] "
 	       "pte[%lx] error[%lx]\n",
@@ -1987,9 +1987,9 @@ void sun4v_dtlb_error_report(struct pt_r
 
 	printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n",
 	       regs->tpc, tl);
-	printk(KERN_EMERG "SUN4V-DTLB: TPC<%pS>\n", (void *) regs->tpc);
+	printk(KERN_EMERG "SUN4V-DTLB: TPC<%pA>\n", (void *) regs->tpc);
 	printk(KERN_EMERG "SUN4V-DTLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
-	printk(KERN_EMERG "SUN4V-DTLB: O7<%pS>\n",
+	printk(KERN_EMERG "SUN4V-DTLB: O7<%pA>\n",
 	       (void *) regs->u_regs[UREG_I7]);
 	printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] "
 	       "pte[%lx] error[%lx]\n",
@@ -2196,13 +2196,13 @@ void show_stack(struct task_struct *tsk,
 			fp = (unsigned long)sf->fp + STACK_BIAS;
 		}
 
-		printk(" [%016lx] %pS\n", pc, (void *) pc);
+		printk(" [%016lx] %pA\n", pc, (void *) pc);
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 		if ((pc + 8UL) == (unsigned long) &return_to_handler) {
 			int index = tsk->curr_ret_stack;
 			if (tsk->ret_stack && index >= graph) {
 				pc = tsk->ret_stack[index - graph].ret;
-				printk(" [%016lx] %pS\n", pc, (void *) pc);
+				printk(" [%016lx] %pA\n", pc, (void *) pc);
 				graph++;
 			}
 		}
@@ -2255,7 +2255,7 @@ void die_if_kernel(char *str, struct pt_
 		while (rw &&
 		       count++ < 30 &&
 		       kstack_valid(tp, (unsigned long) rw)) {
-			printk("Caller[%016lx]: %pS\n", rw->ins[7],
+			printk("Caller[%016lx]: %pA\n", rw->ins[7],
 			       (void *) rw->ins[7]);
 
 			rw = kernel_stack_up(rw);
diff -urNp linux-2.6.36/arch/sparc/kernel/unaligned_64.c linux-2.6.36/arch/sparc/kernel/unaligned_64.c
--- linux-2.6.36/arch/sparc/kernel/unaligned_64.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/kernel/unaligned_64.c	2010-11-13 16:33:46.000000000 -0500
@@ -278,7 +278,7 @@ static void log_unaligned(struct pt_regs
 	static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5);
 
 	if (__ratelimit(&ratelimit)) {
-		printk("Kernel unaligned access at TPC[%lx] %pS\n",
+		printk("Kernel unaligned access at TPC[%lx] %pA\n",
 		       regs->tpc, (void *) regs->tpc);
 	}
 }
diff -urNp linux-2.6.36/arch/sparc/mm/fault_64.c linux-2.6.36/arch/sparc/mm/fault_64.c
--- linux-2.6.36/arch/sparc/mm/fault_64.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/sparc/mm/fault_64.c	2010-11-13 16:29:01.000000000 -0500
@@ -74,7 +74,7 @@ static void __kprobes bad_kernel_pc(stru
 	printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
 	       regs->tpc);
 	printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]);
-	printk("OOPS: RPC <%pS>\n", (void *) regs->u_regs[15]);
+	printk("OOPS: RPC <%pA>\n", (void *) regs->u_regs[15]);
 	printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
 	dump_stack();
 	unhandled_fault(regs->tpc, current, regs);
diff -urNp linux-2.6.36/arch/x86/kernel/dumpstack.c linux-2.6.36/arch/x86/kernel/dumpstack.c
--- linux-2.6.36/arch/x86/kernel/dumpstack.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/arch/x86/kernel/dumpstack.c	2010-11-13 16:29:01.000000000 -0500
@@ -27,7 +27,7 @@ static int die_counter;
 
 void printk_address(unsigned long address, int reliable)
 {
-	printk(" [<%p>] %s%pS\n", (void *) address,
+	printk(" [<%p>] %s%pA\n", (void *) address,
 			reliable ? "" : "? ", (void *) address);
 }
 
diff -urNp linux-2.6.36/kernel/panic.c linux-2.6.36/kernel/panic.c
--- linux-2.6.36/kernel/panic.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/kernel/panic.c	2010-11-13 16:29:01.000000000 -0500
@@ -368,7 +368,7 @@ static void warn_slowpath_common(const c
 	const char *board;
 
 	printk(KERN_WARNING "------------[ cut here ]------------\n");
-	printk(KERN_WARNING "WARNING: at %s:%d %pS()\n", file, line, caller);
+	printk(KERN_WARNING "WARNING: at %s:%d %pA()\n", file, line, caller);
 	board = dmi_get_system_info(DMI_PRODUCT_NAME);
 	if (board)
 		printk(KERN_WARNING "Hardware name: %s\n", board);
@@ -423,7 +423,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
  */
 void __stack_chk_fail(void)
 {
-	panic("stack-protector: Kernel stack is corrupted in: %p\n",
+	dump_stack();
+	panic("stack-protector: Kernel stack is corrupted in: %pA\n",
 		__builtin_return_address(0));
 }
 EXPORT_SYMBOL(__stack_chk_fail);
diff -urNp linux-2.6.36/mm/kmemleak.c linux-2.6.36/mm/kmemleak.c
--- linux-2.6.36/mm/kmemleak.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/mm/kmemleak.c	2010-11-13 16:29:01.000000000 -0500
@@ -355,7 +355,7 @@ static void print_unreferenced(struct se
 
 	for (i = 0; i < object->trace_len; i++) {
 		void *ptr = (void *)object->trace[i];
-		seq_printf(seq, "    [<%p>] %pS\n", ptr, ptr);
+		seq_printf(seq, "    [<%p>] %pA\n", ptr, ptr);
 	}
 }
 
diff -urNp linux-2.6.36/mm/slub.c linux-2.6.36/mm/slub.c
--- linux-2.6.36/mm/slub.c	2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/mm/slub.c	2010-11-13 16:29:01.000000000 -0500
@@ -392,7 +392,7 @@ static void print_track(const char *s, s
 	if (!t->addr)
 		return;
 
-	printk(KERN_ERR "INFO: %s in %pS age=%lu cpu=%u pid=%d\n",
+	printk(KERN_ERR "INFO: %s in %pA age=%lu cpu=%u pid=%d\n",
 		s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid);
 }
 


-- 
Kees Cook
Ubuntu Security Team

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 23:22 ` Linus Torvalds
@ 2010-11-20  2:40   ` Kees Cook
  2010-11-20 19:47     ` Henrique de Moraes Holschuh
  0 siblings, 1 reply; 81+ messages in thread
From: Kees Cook @ 2010-11-20  2:40 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Andy Walls, linux-kernel, sarah.a.sharp

On Fri, Nov 19, 2010 at 03:22:00PM -0800, Linus Torvalds wrote:
> In this case, the upside just wasn't big enough to accept _any_
> breakage, especially since people and distributions can just do the
> "chmod" themselves if they want to. There was a lot of discussion
> whether the patch should even go in in the first place. So this time,
> the "let's just revert it" was a very easy decision for me.

The downside is that /proc can be remounted multiple times for different
containers, etc. Having to patch everything that mounts /proc to do the
chmod seems much more painful that fixing a simple userspace bug in an old
klog daemon.

(For example, rsyslogd handles this fine since it's root to open it, and
even if it fails, it doesn't do the broken fclose().)

-Kees

-- 
Kees Cook
Ubuntu Security Team

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 21:12 Andy Walls
@ 2010-11-19 23:22 ` Linus Torvalds
  2010-11-20  2:40   ` Kees Cook
  0 siblings, 1 reply; 81+ messages in thread
From: Linus Torvalds @ 2010-11-19 23:22 UTC (permalink / raw)
  To: Andy Walls; +Cc: linux-kernel, sarah.a.sharp

On Fri, Nov 19, 2010 at 1:12 PM, Andy Walls <andy@silverblocksystems.net> wrote:
>>
>> If it actually breaks user-space, I think we should just revert it.
>
> User space klogd is what's broken in this case:

Sure. I'm not surprised. I didn't really expect the /proc/kallsyms
mode change to trigger anything like what Sarah reported, and
user-space just being buggy because the error case had never even been
tested is quite understandable.

But the thing is, it doesn't even matter.

The rule is not "we don't break non-buggy user space" or "we don't
break reasonable user-space". The rule is simply "we don't break
user-space".

Even if the breakage is totally incidental, that doesn't help the
_user_. It's still breakage.

We still have magic scheduler debug options to run children before
parents after fork, simply because that used to _hide_ a race
condition in some older "bash" versions (or maybe it was the other way
around, whatever).

The thing is, bugs happen. And if they never had test coverage, we
can't blame people for them. Saying "tough luck, we changed it, and
you did something wrong" may be manly, but it's also unacceptable. The
developer may fix his bug, but there's still users out there.

Now, there _are_ exceptions. There are always exceptions. Intelligent
people don't run things off a script, and it's obviously always to
some degree a judgment call. The breakage has to be balanced against
the upsides. If the kernel behavior change is due to some fundamental
security issue or a major redesign that we _had_ to do to make
progress, and the user-level breakage is reasonably well-contained,
we'll just say "sorry, we had to do it".

In this case, the upside just wasn't big enough to accept _any_
breakage, especially since people and distributions can just do the
"chmod" themselves if they want to. There was a lot of discussion
whether the patch should even go in in the first place. So this time,
the "let's just revert it" was a very easy decision for me.

              Linus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
@ 2010-11-19 21:12 Andy Walls
  2010-11-19 23:22 ` Linus Torvalds
  0 siblings, 1 reply; 81+ messages in thread
From: Andy Walls @ 2010-11-19 21:12 UTC (permalink / raw)
  To: linux-kernel; +Cc: sarah.a.sharp, torvalds


> On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
> <sarah.a.sharp@linux.intel.com> wrote:
> >
> > .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
> > (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
> > about changing the permissions of kallsyms after boot, but if I can't
> > boot that doesn't help.  Perhaps this can be made a configuration
> > option?
> 
> It's not worth a config option.
> 
> If it actually breaks user-space, I think we should just revert it.

User space klogd is what's broken in this case:

        ksyms = fopen(KSYMS, "r");

        if ( ksyms == NULL )
        {
                if ( errno == ENOENT )
                        Syslog(LOG_INFO, "No module symbols loaded - "
                               "kernel modules not enabled.\n");
                else
                        Syslog(LOG_ERR, "Error loading kernel symbols " \
                               "- %s\n", strerror(errno));
                fclose(ksyms);
                return(0);
        }

The fclose(NULL) is a bug, as I don't think the standards require
that to be handled gracefully.


> It's kind of sad to default to the world-visible thing,

klogd also gets symbols from System.map, so /proc/kallsyms access
is not a strict requirement.

I haven't checked to see if klogd can work without a symbol source
at all, but I'll wager it can.

Regards,
Andy



^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 20:16         ` Willy Tarreau
@ 2010-11-19 20:55           ` david
  0 siblings, 0 replies; 81+ messages in thread
From: david @ 2010-11-19 20:55 UTC (permalink / raw)
  To: Willy Tarreau
  Cc: Linus Torvalds, Sarah Sharp, Marcus Meissner, linux-kernel, tj,
	akpm, hpa, mingo, alan

On Fri, 19 Nov 2010, Willy Tarreau wrote:

> On Fri, Nov 19, 2010 at 12:04:47PM -0800, Linus Torvalds wrote:
>> On Fri, Nov 19, 2010 at 11:58 AM,  <david@lang.hm> wrote:
>>>
>>> how far back do we need to maintain compatibility with userspace?
>>>
>>> Is this something that we can revisit in a few years and lock it down then?
>>
>> The rule is basically "we never break user space".
>>
>> But the "out" to that rule is that "if nobody notices, it's not
>> broken". In a few years? Who knows?
>>
>> So breaking user space is a bit like trees falling in the forest. If
>> there's nobody around to see it, did it really break?
>
> FWIW, I appreciate a lot that non-breaking rule. I have some testing
> machines which boot from PXE or USB on a file-system with some old
> tools and libc, that are both 2.4 and 2.6 compatible. Everything works
> like a charm, the only point of care was to have both module-init-tools
> and modutils (obviously) but even that integrates smoothly.
>
> I know quite a lot of people who never replace user-space but only
> kernels on their systems, so this non-breaking rule is much welcome !

Please don't get me wrong, as a general rule I like it a lot (I almost 
never run the stock kernel from a distro and I upgrade kernels _far_ more 
frequently than anything else).

However, like every other general rule, there are reasons to make 
exceptions.

In this case we are changing the default to make it more secure, I think 
that's worth something.

Yes, distros can all add the chmod command to their startup to get similar 
behavior. But by the same token, if we change the default, someone running 
an old distro can add a chmod command into their bootup to allow their old 
software to still work. In the case that has been identified, the problem 
is that syslog is unable to get the kernel messages. this can be 
important, but in my opinion it's a long way from being a fatal flaw. I've 
already seen this sort of problem happen in the wild without this change. 
I was running a development version of rsyslog and on a ubuntu system a 
year or so ago (before they switched to rsyslog), I had a situation where 
firing up rsyslog would generate a lot of messages about being unable to 
read the kernel logs (I don't remember the exact message, it wasn't this 
kallsyms file, it was something else)

my full-time job is in security for banks, so I'm a bit more sensitive to 
the security issues than most people (but tend to agree with Linus about 
the security industry and security circus), but I see this as something 
that is useful enough to put in (with a compile-time flag if the 
compatibility is that critical for this function). I expect that there are 
going to be a few more security patches coming down the road that would be 
good to put under the same or similar flag (either because they may break 
some old software like eliminating /proc/kmem, or because they add a 
slight amount of overhead like the nx/read-only patches). As a result I 
think something similar to the 'embedded' option would be appropriate, 
have these new features on by default, but have some way that people who 
need to disable them can do so.

David Lang

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 20:04       ` Linus Torvalds
@ 2010-11-19 20:16         ` Willy Tarreau
  2010-11-19 20:55           ` david
  0 siblings, 1 reply; 81+ messages in thread
From: Willy Tarreau @ 2010-11-19 20:16 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: david, Sarah Sharp, Marcus Meissner, linux-kernel, tj, akpm, hpa,
	mingo, alan

On Fri, Nov 19, 2010 at 12:04:47PM -0800, Linus Torvalds wrote:
> On Fri, Nov 19, 2010 at 11:58 AM,  <david@lang.hm> wrote:
> >
> > how far back do we need to maintain compatibility with userspace?
> >
> > Is this something that we can revisit in a few years and lock it down then?
> 
> The rule is basically "we never break user space".
> 
> But the "out" to that rule is that "if nobody notices, it's not
> broken". In a few years? Who knows?
> 
> So breaking user space is a bit like trees falling in the forest. If
> there's nobody around to see it, did it really break?

FWIW, I appreciate a lot that non-breaking rule. I have some testing
machines which boot from PXE or USB on a file-system with some old
tools and libc, that are both 2.4 and 2.6 compatible. Everything works
like a charm, the only point of care was to have both module-init-tools
and modutils (obviously) but even that integrates smoothly.

I know quite a lot of people who never replace user-space but only
kernels on their systems, so this non-breaking rule is much welcome !

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 19:58     ` david
@ 2010-11-19 20:04       ` Linus Torvalds
  2010-11-19 20:16         ` Willy Tarreau
  0 siblings, 1 reply; 81+ messages in thread
From: Linus Torvalds @ 2010-11-19 20:04 UTC (permalink / raw)
  To: david
  Cc: Sarah Sharp, Marcus Meissner, linux-kernel, tj, akpm, hpa, mingo,
	w, alan

On Fri, Nov 19, 2010 at 11:58 AM,  <david@lang.hm> wrote:
>
> how far back do we need to maintain compatibility with userspace?
>
> Is this something that we can revisit in a few years and lock it down then?

The rule is basically "we never break user space".

But the "out" to that rule is that "if nobody notices, it's not
broken". In a few years? Who knows?

So breaking user space is a bit like trees falling in the forest. If
there's nobody around to see it, did it really break?

                   Linus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 19:54   ` Linus Torvalds
@ 2010-11-19 19:58     ` david
  2010-11-19 20:04       ` Linus Torvalds
  2010-11-26  7:48     ` Ingo Molnar
  1 sibling, 1 reply; 81+ messages in thread
From: david @ 2010-11-19 19:58 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Sarah Sharp, Marcus Meissner, linux-kernel, tj, akpm, hpa, mingo,
	w, alan

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1465 bytes --]

On Fri, 19 Nov 2010, Linus Torvalds wrote:

> On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
> <sarah.a.sharp@linux.intel.com> wrote:
>>
>> .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
>> (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
>> about changing the permissions of kallsyms after boot, but if I can't
>> boot that doesn't help.  Perhaps this can be made a configuration
>> option?
>
> It's not worth a config option.
>
> If it actually breaks user-space, I think we should just revert it.

how far back do we need to maintain compatibility with userspace?

Is this something that we can revisit in a few years and lock it down 
then?

David Lang

> It's kind of sad to default to the world-visible thing, but as I
> mentioned in the commit, this is something where a sysadmin or distro
> can trivially just fix it at boot-time too, with just a
>
>   chmod og-r /proc/kallsyms
>
> in your bootup scripts.
>
> And if somebody has taken control of the machine _before_ the bootup
> scripts get to run, you have bigger problems than a /proc/kallsyms
> file.
>
> So I guess I'll revert it.
>
> Thanks for testing and bisecting.
>
>                      Linus
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-19 19:19 ` Sarah Sharp
@ 2010-11-19 19:54   ` Linus Torvalds
  2010-11-19 19:58     ` david
  2010-11-26  7:48     ` Ingo Molnar
  0 siblings, 2 replies; 81+ messages in thread
From: Linus Torvalds @ 2010-11-19 19:54 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: Marcus Meissner, linux-kernel, tj, akpm, hpa, mingo, w, alan

On Fri, Nov 19, 2010 at 11:19 AM, Sarah Sharp
<sarah.a.sharp@linux.intel.com> wrote:
>
> .config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
> (from Jaunty).  Yes, I know that's old.  I read the bit in the commit
> about changing the permissions of kallsyms after boot, but if I can't
> boot that doesn't help.  Perhaps this can be made a configuration
> option?

It's not worth a config option.

If it actually breaks user-space, I think we should just revert it.
It's kind of sad to default to the world-visible thing, but as I
mentioned in the commit, this is something where a sysadmin or distro
can trivially just fix it at boot-time too, with just a

   chmod og-r /proc/kallsyms

in your bootup scripts.

And if somebody has taken control of the machine _before_ the bootup
scripts get to run, you have bigger problems than a /proc/kallsyms
file.

So I guess I'll revert it.

Thanks for testing and bisecting.

                      Linus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-16 10:46 Marcus Meissner
  2010-11-17  5:07 ` Kyle McMartin
  2010-11-17  5:40 ` Kyle Moffett
@ 2010-11-19 19:19 ` Sarah Sharp
  2010-11-19 19:54   ` Linus Torvalds
  2010-11-20 11:05 ` Richard W.M. Jones
  3 siblings, 1 reply; 81+ messages in thread
From: Sarah Sharp @ 2010-11-19 19:19 UTC (permalink / raw)
  To: Marcus Meissner; +Cc: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

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

On Tue, Nov 16, 2010 at 11:46:03AM +0100, Marcus Meissner wrote:
> Hi,
> 
> Making /proc/kallsyms readable only for root makes it harder
> for attackers to write generic kernel exploits by removing
> one source of knowledge where things are in the kernel.
> 
> This is the second submit, discussion happened on this on first submit
> and mostly concerned that this is just one hole of the sieve ... but
> one of the bigger ones.
> 
> Changing the permissions of at least System.map and vmlinux is
> also required to fix the same set, but a packaging issue.
> 
> Target of this starter patch and follow ups is removing any kind of
> kernel space address information leak from the kernel.
> 
> Ciao, Marcus
> 
> Signed-off-by: Marcus Meissner <meissner@suse.de>
> Acked-by: Tejun Heo <tj@kernel.org>
> Acked-by: Eugene Teo <eugeneteo@kernel.org>
> Reviewed-by: Jesper Juhl <jj@chaosbits.net>

On Wednesday, I updated my branch to commit 460781b from linus' tree,
and my box would not boot.  klogd segfaulted, which stalled the whole
system.

At first I thought it actually hung the box, but it continued booting
after 5 minutes, and I was able to log in.  It dropped back to the text
console instead of the graphical bootup display for that period of time.
dmesg surprisingly still works.  I've bisected the problem down to this
commit (commit 59365d136d205cc20fe666ca7f89b1c5001b0d5a in
linus/master).

.config and dmesg are attached.  The box is running klogd 1.5.5ubuntu3
(from Jaunty).  Yes, I know that's old.  I read the bit in the commit
about changing the permissions of kallsyms after boot, but if I can't
boot that doesn't help.  Perhaps this can be made a configuration
option?

Sarah Sharp

[-- Attachment #2: .config-broadway --]
[-- Type: text/plain, Size: 106822 bytes --]

#
# Automatically generated make config: don't edit
# Linux/x86_64 2.6.37-rc2 Kernel Configuration
# Thu Nov 18 16:32:41 2010
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_GPIO=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ZONE_DMA32=y
CONFIG_ARCH_POPULATES_NODE_MAP=y
CONFIG_AUDIT_ARCH=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_X86_64_SMP=y
CONFIG_X86_HT=y
CONFIG_X86_TRAMPOLINE=y
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
# CONFIG_KTIME_SCALAR is not set
CONFIG_ARCH_CPU_PROBE_RELEASE=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y
CONFIG_HAVE_IRQ_WORK=y
CONFIG_IRQ_WORK=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
# CONFIG_TASK_DELAY_ACCT is not set
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_WATCH=y
CONFIG_AUDIT_TREE=y
CONFIG_HAVE_GENERIC_HARDIRQS=y

#
# IRQ subsystem
#
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set
CONFIG_HAVE_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
# CONFIG_AUTO_IRQ_AFFINITY is not set
# CONFIG_IRQ_PER_CPU is not set
# CONFIG_HARDIRQS_SW_RESEND is not set
# CONFIG_SPARSE_IRQ is not set

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=64
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=17
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
# CONFIG_CGROUP_DEVICE is not set
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
CONFIG_CGROUP_MEM_RES_CTLR=y
# CONFIG_CGROUP_MEM_RES_CTLR_SWAP is not set
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
# CONFIG_BLK_CGROUP is not set
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
# CONFIG_USER_NS is not set
CONFIG_PID_NS=y
# CONFIG_NET_NS is not set
CONFIG_MM_OWNER=y
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_HAVE_PERF_EVENTS=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
CONFIG_PERF_COUNTERS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y
# CONFIG_JUMP_LABEL is not set
CONFIG_OPTPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y

#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLOCK_COMPAT=y

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="deadline"
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_FREEZER=y

#
# Processor type and features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y
CONFIG_X86_MPPARSE=y
CONFIG_X86_EXTENDED_PLATFORM=y
# CONFIG_X86_VSMP is not set
CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
CONFIG_NO_BOOTMEM=y
# CONFIG_MEMTEST is not set
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
CONFIG_GENERIC_CPU=y
CONFIG_X86_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_CMPXCHG=y
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
CONFIG_GART_IOMMU=y
CONFIG_CALGARY_IOMMU=y
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_IOMMU_STATS is not set
CONFIG_SWIOTLB=y
CONFIG_IOMMU_HELPER=y
CONFIG_IOMMU_API=y
# CONFIG_MAXSMP is not set
CONFIG_NR_CPUS=64
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
# CONFIG_X86_MCE is not set
CONFIG_I8K=m
CONFIG_MICROCODE=m
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=m
CONFIG_X86_CPUID=m
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_DIRECT_GBPAGES=y
# CONFIG_NUMA is not set
CONFIG_ARCH_PROC_KCORE_TEXT=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_HAVE_MEMBLOCK=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_COMPACTION is not set
CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_MMU_NOTIFIER=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW=64
CONFIG_MTRR=y
CONFIG_MTRR_SANITIZER=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_EFI=y
CONFIG_SECCOMP=y
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_SCHED_HRTICK=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
# CONFIG_KEXEC_JUMP is not set
CONFIG_PHYSICAL_START=0x200000
CONFIG_RELOCATABLE=y
CONFIG_PHYSICAL_ALIGN=0x1000000
CONFIG_HOTPLUG_CPU=y
# CONFIG_COMPAT_VDSO is not set
# CONFIG_CMDLINE_BOOL is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

#
# Power management and ACPI options
#
CONFIG_ARCH_HIBERNATION_HEADER=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
# CONFIG_PM_ADVANCED_DEBUG is not set
# CONFIG_PM_VERBOSE is not set
CONFIG_CAN_PM_TRACE=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND_NVS=y
CONFIG_SUSPEND=y
CONFIG_PM_TEST_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION="/dev/sda5"
CONFIG_PM_RUNTIME=y
CONFIG_PM_OPS=y
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_PROCFS=y
CONFIG_ACPI_PROCFS_POWER=y
# CONFIG_ACPI_POWER_METER is not set
# CONFIG_ACPI_EC_DEBUGFS is not set
CONFIG_ACPI_PROC_EVENT=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_CUSTOM_DSDT_FILE=""
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_PCI_SLOT=y
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_SBS=y
# CONFIG_ACPI_HED is not set
# CONFIG_ACPI_APEI is not set
# CONFIG_SFI is not set

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set

#
# CPUFreq processor drivers
#
# CONFIG_X86_PCC_CPUFREQ is not set
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_POWERNOW_K8=y
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_P4_CLOCKMOD=m

#
# shared options
#
CONFIG_X86_SPEEDSTEP_LIB=m
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_INTEL_IDLE is not set

#
# Memory power savings
#
CONFIG_I7300_IDLE_IOAT_CHANNEL=y
CONFIG_I7300_IDLE=m

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_CNB20LE_QUIRK is not set
# CONFIG_DMAR is not set
# CONFIG_INTR_REMAP is not set
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_PCIEAER=y
# CONFIG_PCIE_ECRC is not set
# CONFIG_PCIEAER_INJECT is not set
CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set
CONFIG_PCIE_PME=y
CONFIG_ARCH_SUPPORTS_MSI=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
# CONFIG_PCI_IOV is not set
CONFIG_PCI_IOAPIC=y
CONFIG_ISA_DMA_API=y
CONFIG_AMD_NB=y
CONFIG_PCCARD=m
CONFIG_PCMCIA=m
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=m
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
CONFIG_YENTA_ENE_TUNE=y
CONFIG_YENTA_TOSHIBA=y
CONFIG_PD6729=m
CONFIG_I82092=m
CONFIG_PCCARD_NONSTATIC=y
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_FAKE=m
CONFIG_HOTPLUG_PCI_ACPI=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
CONFIG_HOTPLUG_PCI_SHPC=m

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
# CONFIG_HAVE_AOUT is not set
CONFIG_BINFMT_MISC=m
CONFIG_IA32_EMULATION=y
# CONFIG_IA32_AOUT is not set
CONFIG_COMPAT=y
CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_HAVE_TEXT_POKE_SMP=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
# CONFIG_NET_IPGRE_DEMUX is not set
CONFIG_IP_MROUTE=y
# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_XFRM_MODE_TRANSPORT=m
CONFIG_INET_XFRM_MODE_TUNNEL=m
CONFIG_INET_XFRM_MODE_BEET=m
CONFIG_INET_LRO=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
# CONFIG_IPV6_MIP6 is not set
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
CONFIG_INET6_XFRM_MODE_TUNNEL=m
CONFIG_INET6_XFRM_MODE_BEET=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
CONFIG_IPV6_SIT=m
# CONFIG_IPV6_SIT_6RD is not set
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_MULTIPLE_TABLES=y
# CONFIG_IPV6_SUBTREES is not set
# CONFIG_IPV6_MROUTE is not set
CONFIG_NETLABEL=y
CONFIG_NETWORK_SECMARK=y
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_EVENTS=y
# CONFIG_NF_CT_PROTO_DCCP is not set
CONFIG_NF_CT_PROTO_GRE=m
CONFIG_NF_CT_PROTO_SCTP=m
CONFIG_NF_CT_PROTO_UDPLITE=m
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_PPTP=m
# CONFIG_NF_CONNTRACK_SANE is not set
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NETFILTER_TPROXY=m
CONFIG_NETFILTER_XTABLES=m

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=m
CONFIG_NETFILTER_XT_CONNMARK=m

#
# Xtables targets
#
# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
# CONFIG_NETFILTER_XT_TARGET_CT is not set
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
# CONFIG_NETFILTER_XT_TARGET_LED is not set
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
# CONFIG_NETFILTER_XT_TARGET_TEE is not set
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set

#
# Xtables matches
#
# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
# CONFIG_NETFILTER_XT_MATCH_CPU is not set
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
# CONFIG_NETFILTER_XT_MATCH_IPVS is not set
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
# CONFIG_NETFILTER_XT_MATCH_OSF is not set
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
# CONFIG_IP_VS_PROTO_SCTP is not set

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
# CONFIG_IP_VS_PE_SIP is not set

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_NF_NAT=m
CONFIG_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PROTO_GRE=m
CONFIG_NF_NAT_PROTO_UDPLITE=m
CONFIG_NF_NAT_PROTO_SCTP=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_NF_NAT_SIP=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_SECURITY=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_CONNTRACK_IPV6=m
CONFIG_IP6_NF_QUEUE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_LOG=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m

#
# DECnet: Netfilter Configuration
#
CONFIG_DECNET_NF_GRABULATOR=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_IP6=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_ULOG=m
CONFIG_BRIDGE_EBT_NFLOG=m
CONFIG_IP_DCCP=m
CONFIG_INET_DCCP_DIAG=m

#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
CONFIG_IP_DCCP_CCID3=y
# CONFIG_IP_DCCP_CCID3_DEBUG is not set
CONFIG_IP_DCCP_TFRC_LIB=y

#
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
CONFIG_NET_DCCPPROBE=m
CONFIG_IP_SCTP=m
# CONFIG_NET_SCTPPROBE is not set
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not set
CONFIG_SCTP_HMAC_MD5=y
# CONFIG_RDS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_ADVANCED is not set
# CONFIG_TIPC_DEBUG is not set
CONFIG_ATM=y
CONFIG_ATM_CLIP=y
# CONFIG_ATM_CLIP_NO_ICMP is not set
CONFIG_ATM_LANE=m
CONFIG_ATM_MPOA=m
CONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not set
# CONFIG_L2TP is not set
CONFIG_STP=m
CONFIG_GARP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_NET_DSA=y
CONFIG_NET_DSA_TAG_DSA=y
CONFIG_NET_DSA_TAG_EDSA=y
CONFIG_NET_DSA_TAG_TRAILER=y
CONFIG_NET_DSA_MV88E6XXX=y
CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_DECNET=m
# CONFIG_DECNET_ROUTER is not set
CONFIG_LLC=y
CONFIG_LLC2=m
CONFIG_IPX=m
# CONFIG_IPX_INTERN is not set
CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
CONFIG_IPDDP_DECAP=y
CONFIG_X25=m
CONFIG_LAPB=m
CONFIG_ECONET=m
CONFIG_ECONET_AUNUDP=y
CONFIG_ECONET_NATIVE=y
CONFIG_WAN_ROUTER=m
CONFIG_PHONET=m
# CONFIG_PHONET_PIPECTRLR is not set
# CONFIG_IEEE802154 is not set
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_MULTIQ=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
# CONFIG_NET_SCH_DRR is not set
CONFIG_NET_SCH_INGRESS=m

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
# CONFIG_CLS_U32_PERF is not set
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
# CONFIG_NET_CLS_FLOW is not set
# CONFIG_NET_CLS_CGROUP is not set
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_EMATCH_META=m
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
# CONFIG_NET_ACT_CSUM is not set
# CONFIG_NET_CLS_IND is not set
CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
CONFIG_RPS=y

#
# Network testing
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_TCPPROBE=m
# CONFIG_NET_DROP_MONITOR is not set
CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=m
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=m
CONFIG_ROSE=m

#
# AX.25 network device drivers
#
CONFIG_MKISS=m
CONFIG_6PACK=m
CONFIG_BPQETHER=m
CONFIG_BAYCOM_SER_FDX=m
CONFIG_BAYCOM_SER_HDX=m
CONFIG_BAYCOM_PAR=m
CONFIG_YAM=m
# CONFIG_CAN is not set
CONFIG_IRDA=m

#
# IrDA protocols
#
CONFIG_IRLAN=m
CONFIG_IRNET=m
CONFIG_IRCOMM=m
CONFIG_IRDA_ULTRA=y

#
# IrDA options
#
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
CONFIG_IRDA_DEBUG=y

#
# Infrared-port device drivers
#

#
# SIR device drivers
#
CONFIG_IRTTY_SIR=m

#
# Dongle support
#
CONFIG_DONGLE=y
CONFIG_ESI_DONGLE=m
CONFIG_ACTISYS_DONGLE=m
CONFIG_TEKRAM_DONGLE=m
# CONFIG_TOIM3232_DONGLE is not set
CONFIG_LITELINK_DONGLE=m
CONFIG_MA600_DONGLE=m
CONFIG_GIRBIL_DONGLE=m
CONFIG_MCP2120_DONGLE=m
CONFIG_OLD_BELKIN_DONGLE=m
CONFIG_ACT200L_DONGLE=m
CONFIG_KINGSUN_DONGLE=m
CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KS959_DONGLE=m

#
# FIR device drivers
#
CONFIG_USB_IRDA=m
CONFIG_SIGMATEL_FIR=m
CONFIG_NSC_FIR=m
CONFIG_WINBOND_FIR=m
CONFIG_SMC_IRCC_FIR=m
CONFIG_ALI_FIR=m
CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=y
CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m

#
# Bluetooth device drivers
#
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIUART_ATH3K is not set
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIBCM203X=m
CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBFUSB=m
CONFIG_BT_HCIDTL1=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
CONFIG_BT_HCIBTUART=m
CONFIG_BT_HCIVHCI=m
# CONFIG_BT_MRVL is not set
# CONFIG_BT_ATH3K is not set
CONFIG_AF_RXRPC=m
# CONFIG_AF_RXRPC_DEBUG is not set
CONFIG_RXKAD=m
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=m
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_CFG80211_DEFAULT_PS=y
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_CFG80211_WEXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=m
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
# CONFIG_WIMAX is not set
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_NET_9P=m
CONFIG_NET_9P_VIRTIO=m
# CONFIG_NET_9P_DEBUG is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH=""
# CONFIG_DEVTMPFS is not set
# CONFIG_STANDALONE is not set
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y
CONFIG_MTD=m
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_TESTS is not set
CONFIG_MTD_CONCAT=m
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_REDBOOT_PARTS=m
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
CONFIG_MTD_AR7_PARTS=m

#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
CONFIG_HAVE_MTD_OTP=y
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
CONFIG_MTD_BLOCK_RO=m
CONFIG_FTL=m
CONFIG_NFTL=m
CONFIG_NFTL_RW=y
CONFIG_INFTL=m
CONFIG_RFD_FTL=m
CONFIG_SSFDC=m
# CONFIG_SM_FTL is not set
CONFIG_MTD_OOPS=m

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=m
CONFIG_MTD_JEDECPROBE=m
CONFIG_MTD_GEN_PROBE=m
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
CONFIG_MTD_CFI_INTELEXT=m
CONFIG_MTD_CFI_AMDSTD=m
CONFIG_MTD_CFI_STAA=m
CONFIG_MTD_CFI_UTIL=m
CONFIG_MTD_RAM=m
CONFIG_MTD_ROM=m
CONFIG_MTD_ABSENT=m

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=m
# CONFIG_MTD_PHYSMAP_COMPAT is not set
CONFIG_MTD_SC520CDP=m
CONFIG_MTD_NETSC520=m
CONFIG_MTD_TS5500=m
CONFIG_MTD_SBC_GXX=m
CONFIG_MTD_AMD76XROM=m
CONFIG_MTD_ICHXROM=m
CONFIG_MTD_ESB2ROM=m
CONFIG_MTD_CK804XROM=m
CONFIG_MTD_SCB2_FLASH=m
CONFIG_MTD_NETtel=m
CONFIG_MTD_L440GX=m
CONFIG_MTD_PCI=m
# CONFIG_MTD_PCMCIA is not set
# CONFIG_MTD_GPIO_ADDR is not set
CONFIG_MTD_INTEL_VR_NOR=m
CONFIG_MTD_PLATRAM=m

#
# Self-contained MTD device drivers
#
CONFIG_MTD_PMC551=m
# CONFIG_MTD_PMC551_BUGFIX is not set
# CONFIG_MTD_PMC551_DEBUG is not set
CONFIG_MTD_DATAFLASH=m
# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_M25P80=m
CONFIG_M25PXX_USE_FAST_READ=y
# CONFIG_MTD_SST25L is not set
CONFIG_MTD_SLRAM=m
CONFIG_MTD_PHRAM=m
CONFIG_MTD_MTDRAM=m
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=m

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOC2000=m
CONFIG_MTD_DOC2001=m
CONFIG_MTD_DOC2001PLUS=m
CONFIG_MTD_DOCPROBE=m
CONFIG_MTD_DOCECC=m
# CONFIG_MTD_DOCPROBE_ADVANCED is not set
CONFIG_MTD_DOCPROBE_ADDRESS=0
CONFIG_MTD_NAND_ECC=m
# CONFIG_MTD_NAND_ECC_SMC is not set
CONFIG_MTD_NAND=m
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
# CONFIG_MTD_SM_COMMON is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_DENALI is not set
CONFIG_MTD_NAND_IDS=m
# CONFIG_MTD_NAND_RICOH is not set
CONFIG_MTD_NAND_DISKONCHIP=m
# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
CONFIG_MTD_NAND_CAFE=m
CONFIG_MTD_NAND_NANDSIM=m
CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_ALAUDA=m
CONFIG_MTD_ONENAND=m
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
# CONFIG_MTD_ONENAND_GENERIC is not set
# CONFIG_MTD_ONENAND_OTP is not set
CONFIG_MTD_ONENAND_2X_PROGRAM=y
CONFIG_MTD_ONENAND_SIM=m

#
# LPDDR flash memory drivers
#
# CONFIG_MTD_LPDDR is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_RESERVE=1
CONFIG_MTD_UBI_GLUEBI=m

#
# UBI debugging options
#
# CONFIG_MTD_UBI_DEBUG is not set
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_SERIAL=m
CONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_PC_SUPERIO is not set
CONFIG_PARPORT_PC_PCMCIA=m
# CONFIG_PARPORT_GSC is not set
CONFIG_PARPORT_AX88796=m
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_FD=m
CONFIG_PARIDE=m

#
# Parallel IDE high-level drivers
#
CONFIG_PARIDE_PD=m
CONFIG_PARIDE_PCD=m
CONFIG_PARIDE_PF=m
CONFIG_PARIDE_PT=m
CONFIG_PARIDE_PG=m

#
# Parallel IDE protocol modules
#
CONFIG_PARIDE_ATEN=m
CONFIG_PARIDE_BPCK=m
CONFIG_PARIDE_COMM=m
CONFIG_PARIDE_DSTR=m
CONFIG_PARIDE_FIT2=m
CONFIG_PARIDE_FIT3=m
CONFIG_PARIDE_EPAT=m
# CONFIG_PARIDE_EPATC8 is not set
CONFIG_PARIDE_EPIA=m
CONFIG_PARIDE_FRIQ=m
CONFIG_PARIDE_FRPW=m
CONFIG_PARIDE_KBIC=m
CONFIG_PARIDE_KTTI=m
CONFIG_PARIDE_ON20=m
CONFIG_PARIDE_ON26=m
CONFIG_BLK_CPQ_DA=m
CONFIG_BLK_CPQ_CISS_DA=m
CONFIG_CISS_SCSI_TAPE=y
CONFIG_BLK_DEV_DAC960=m
CONFIG_BLK_DEV_UMEM=m
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_DRBD is not set
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_SX8=m
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=65536
# CONFIG_BLK_DEV_XIP is not set
CONFIG_CDROM_PKTCDVD=y
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
CONFIG_ATA_OVER_ETH=m
CONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not set
# CONFIG_BLK_DEV_RBD is not set
CONFIG_MISC_DEVICES=y
# CONFIG_AD525X_DPOT is not set
CONFIG_IBM_ASM=m
CONFIG_PHANTOM=m
CONFIG_SGI_IOC4=m
CONFIG_TIFM_CORE=m
CONFIG_TIFM_7XX1=m
CONFIG_ICS932S401=m
CONFIG_ENCLOSURE_SERVICES=m
# CONFIG_CS5535_MFGPT is not set
CONFIG_HP_ILO=m
# CONFIG_APDS9802ALS is not set
# CONFIG_ISL29003 is not set
# CONFIG_ISL29020 is not set
CONFIG_SENSORS_TSL2550=m
# CONFIG_SENSORS_BH1780 is not set
# CONFIG_SENSORS_BH1770 is not set
# CONFIG_SENSORS_APDS990X is not set
# CONFIG_HMC6352 is not set
CONFIG_DS1682=m
# CONFIG_TI_DAC7512 is not set
# CONFIG_VMWARE_BALLOON is not set
# CONFIG_BMP085 is not set
# CONFIG_PCH_PHUB is not set
CONFIG_C2PORT=m
CONFIG_C2PORT_DURAMAR_2150=m

#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not set
# CONFIG_EEPROM_AT25 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
CONFIG_EEPROM_93CX6=m
# CONFIG_CB710_CORE is not set
# CONFIG_IWMC3200TOP is not set

#
# Texas Instruments shared transport line discipline
#
# CONFIG_TI_ST is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHR_DEV_OSST=m
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_SCSI_WAIT_SCAN=m

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
CONFIG_SCSI_FC_TGT_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
# CONFIG_SCSI_CXGB3_ISCSI is not set
# CONFIG_SCSI_CXGB4_ISCSI is not set
# CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
CONFIG_BLK_DEV_3W_XXXX_RAID=m
# CONFIG_SCSI_HPSA is not set
CONFIG_SCSI_3W_9XXX=m
# CONFIG_SCSI_3W_SAS is not set
CONFIG_SCSI_ACARD=m
CONFIG_SCSI_AACRAID=m
CONFIG_SCSI_AIC7XXX=m
CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIC7XXX_DEBUG_ENABLE=y
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_AIC7XXX_OLD is not set
CONFIG_SCSI_AIC79XX=m
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=5000
CONFIG_AIC79XX_DEBUG_ENABLE=y
CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_AIC79XX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC94XX=m
# CONFIG_AIC94XX_DEBUG is not set
CONFIG_SCSI_MVSAS=m
CONFIG_SCSI_MVSAS_DEBUG=y
CONFIG_SCSI_DPT_I2O=m
CONFIG_SCSI_ADVANSYS=m
CONFIG_SCSI_ARCMSR=m
CONFIG_SCSI_ARCMSR_AER=y
CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_MM=m
CONFIG_MEGARAID_MAILBOX=m
CONFIG_MEGARAID_LEGACY=m
CONFIG_MEGARAID_SAS=m
# CONFIG_SCSI_MPT2SAS is not set
CONFIG_SCSI_HPTIOP=m
CONFIG_SCSI_BUSLOGIC=m
# CONFIG_VMWARE_PVSCSI is not set
# CONFIG_LIBFC is not set
# CONFIG_LIBFCOE is not set
# CONFIG_FCOE is not set
# CONFIG_FCOE_FNIC is not set
CONFIG_SCSI_DMX3191D=m
CONFIG_SCSI_EATA=m
CONFIG_SCSI_EATA_TAGGED_QUEUE=y
CONFIG_SCSI_EATA_LINKED_COMMANDS=y
CONFIG_SCSI_EATA_MAX_TAGS=16
CONFIG_SCSI_FUTURE_DOMAIN=m
CONFIG_SCSI_GDTH=m
CONFIG_SCSI_IPS=m
CONFIG_SCSI_INITIO=m
CONFIG_SCSI_INIA100=m
CONFIG_SCSI_PPA=m
CONFIG_SCSI_IMM=m
# CONFIG_SCSI_IZIP_EPP16 is not set
# CONFIG_SCSI_IZIP_SLOW_CTR is not set
CONFIG_SCSI_STEX=m
CONFIG_SCSI_SYM53C8XX_2=m
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_IPR=m
# CONFIG_SCSI_IPR_TRACE is not set
# CONFIG_SCSI_IPR_DUMP is not set
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_QLA_FC=m
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
CONFIG_SCSI_DC395x=m
CONFIG_SCSI_DC390T=m
CONFIG_SCSI_DEBUG=m
# CONFIG_SCSI_PMCRAID is not set
# CONFIG_SCSI_PM8001 is not set
CONFIG_SCSI_SRP=m
# CONFIG_SCSI_BFA_FC is not set
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
# CONFIG_PCMCIA_AHA152X is not set
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
CONFIG_SCSI_DH_HP_SW=m
CONFIG_SCSI_DH_EMC=m
CONFIG_SCSI_DH_ALUA=m
# CONFIG_SCSI_OSD_INITIATOR is not set
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_ACPI=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=m
CONFIG_SATA_INIC162X=y
CONFIG_SATA_SIL24=y
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_PDC_ADMA=y
CONFIG_SATA_QSTOR=y
CONFIG_SATA_SX4=y
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_ATA_PIIX=y
CONFIG_SATA_MV=m
CONFIG_SATA_NV=y
CONFIG_SATA_PROMISE=y
CONFIG_SATA_SIL=y
CONFIG_SATA_SIS=y
CONFIG_SATA_SVW=y
CONFIG_SATA_ULI=y
CONFIG_SATA_VIA=y
CONFIG_SATA_VITESSE=y

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ALI=y
CONFIG_PATA_AMD=y
CONFIG_PATA_ARTOP=y
CONFIG_PATA_ATIIXP=y
# CONFIG_PATA_ATP867X is not set
CONFIG_PATA_CMD64X=y
CONFIG_PATA_CS5520=y
CONFIG_PATA_CS5530=y
CONFIG_PATA_CYPRESS=m
CONFIG_PATA_EFAR=y
CONFIG_PATA_HPT366=y
CONFIG_PATA_HPT37X=y
CONFIG_PATA_HPT3X2N=m
CONFIG_PATA_HPT3X3=y
# CONFIG_PATA_HPT3X3_DMA is not set
CONFIG_PATA_IT8213=m
CONFIG_PATA_IT821X=y
CONFIG_PATA_JMICRON=y
CONFIG_PATA_MARVELL=y
CONFIG_PATA_NETCELL=y
CONFIG_PATA_NINJA32=m
CONFIG_PATA_NS87415=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_OPTIDMA=m
CONFIG_PATA_PDC2027X=y
CONFIG_PATA_PDC_OLD=y
CONFIG_PATA_RADISYS=m
# CONFIG_PATA_RDC is not set
CONFIG_PATA_SC1200=y
CONFIG_PATA_SCH=y
CONFIG_PATA_SERVERWORKS=y
CONFIG_PATA_SIL680=y
CONFIG_PATA_SIS=y
# CONFIG_PATA_TOSHIBA is not set
CONFIG_PATA_TRIFLEX=y
CONFIG_PATA_VIA=y
CONFIG_PATA_WINBOND=y

#
# PIO-only SFF controllers
#
CONFIG_PATA_CMD640_PCI=m
CONFIG_PATA_MPIIX=y
CONFIG_PATA_NS87410=y
CONFIG_PATA_OPTI=m
CONFIG_PATA_PCMCIA=m
CONFIG_PATA_RZ1000=y

#
# Generic fallback / legacy drivers
#
CONFIG_PATA_ACPI=y
CONFIG_ATA_GENERIC=y
# CONFIG_PATA_LEGACY is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
# CONFIG_MULTICORE_RAID456 is not set
CONFIG_MD_MULTIPATH=m
CONFIG_MD_FAULTY=m
CONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_MIRROR=y
# CONFIG_DM_LOG_USERSPACE is not set
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=y
# CONFIG_DM_MULTIPATH_QL is not set
# CONFIG_DM_MULTIPATH_ST is not set
# CONFIG_DM_DELAY is not set
CONFIG_DM_UEVENT=y
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
CONFIG_FUSION_FC=m
CONFIG_FUSION_SAS=m
CONFIG_FUSION_MAX_SGE=128
CONFIG_FUSION_CTL=m
CONFIG_FUSION_LAN=m
CONFIG_FUSION_LOGGING=y

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_OHCI=m
CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_SBP2=m
# CONFIG_FIREWIRE_NET is not set
# CONFIG_FIREWIRE_NOSY is not set
CONFIG_I2O=m
CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_EXT_ADAPTEC_DMA64=y
CONFIG_I2O_CONFIG=m
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=m
CONFIG_I2O_BLOCK=m
CONFIG_I2O_SCSI=m
CONFIG_I2O_PROC=m
CONFIG_MACINTOSH_DRIVERS=y
CONFIG_MAC_EMUMOUSEBTN=y
CONFIG_NETDEVICES=y
CONFIG_IFB=m
CONFIG_DUMMY=m
CONFIG_BONDING=m
CONFIG_MACVLAN=m
# CONFIG_MACVTAP is not set
CONFIG_EQUALIZER=m
CONFIG_TUN=m
CONFIG_VETH=m
CONFIG_NET_SB1000=m
CONFIG_ARCNET=m
CONFIG_ARCNET_1201=m
CONFIG_ARCNET_1051=m
CONFIG_ARCNET_RAW=m
CONFIG_ARCNET_CAP=m
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=m
CONFIG_ARCNET_RIM_I=m
CONFIG_ARCNET_COM20020=m
CONFIG_ARCNET_COM20020_PCI=m
CONFIG_MII=m
CONFIG_PHYLIB=y

#
# MII PHY device drivers
#
CONFIG_MARVELL_PHY=m
CONFIG_DAVICOM_PHY=m
CONFIG_QSEMI_PHY=m
CONFIG_LXT_PHY=m
CONFIG_CICADA_PHY=m
CONFIG_VITESSE_PHY=m
CONFIG_SMSC_PHY=m
CONFIG_BROADCOM_PHY=m
# CONFIG_BCM63XX_PHY is not set
CONFIG_ICPLUS_PHY=m
# CONFIG_REALTEK_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_STE10XP is not set
# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_MICREL_PHY is not set
CONFIG_FIXED_PHY=y
CONFIG_MDIO_BITBANG=m
# CONFIG_MDIO_GPIO is not set
CONFIG_NET_ETHERNET=y
CONFIG_HAPPYMEAL=m
CONFIG_SUNGEM=m
CONFIG_CASSINI=m
CONFIG_NET_VENDOR_3COM=y
CONFIG_VORTEX=m
CONFIG_TYPHOON=m
# CONFIG_ENC28J60 is not set
# CONFIG_ETHOC is not set
# CONFIG_DNET is not set
CONFIG_NET_TULIP=y
CONFIG_DE2104X=m
CONFIG_DE2104X_DSL=0
CONFIG_TULIP=m
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
# CONFIG_TULIP_NAPI is not set
CONFIG_DE4X5=m
CONFIG_WINBOND_840=m
CONFIG_DM9102=m
CONFIG_ULI526X=m
CONFIG_PCMCIA_XIRCOM=m
CONFIG_HP100=m
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
# CONFIG_NET_PCI is not set
CONFIG_B44=m
CONFIG_B44_PCI_AUTOSELECT=y
CONFIG_B44_PCICORE_AUTOSELECT=y
CONFIG_B44_PCI=y
CONFIG_KS8842=m
CONFIG_KS8851=m
# CONFIG_KS8851_MLL is not set
# CONFIG_NET_POCKET is not set
CONFIG_ATL2=m
CONFIG_NETDEV_1000=y
CONFIG_ACENIC=m
# CONFIG_ACENIC_OMIT_TIGON_I is not set
# CONFIG_DL2K is not set
CONFIG_E1000=m
CONFIG_E1000E=y
CONFIG_IP1000=m
CONFIG_IGB=m
CONFIG_IGB_DCA=y
# CONFIG_IGBVF is not set
CONFIG_NS83820=m
CONFIG_HAMACHI=m
CONFIG_YELLOWFIN=m
CONFIG_R8169=m
CONFIG_R8169_VLAN=y
CONFIG_SIS190=m
CONFIG_SKGE=m
# CONFIG_SKGE_DEBUG is not set
CONFIG_SKY2=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_VIA_VELOCITY=m
CONFIG_TIGON3=m
CONFIG_BNX2=m
# CONFIG_CNIC is not set
CONFIG_QLA3XXX=m
CONFIG_ATL1=m
CONFIG_ATL1E=m
# CONFIG_ATL1C is not set
CONFIG_JME=m
# CONFIG_STMMAC_ETH is not set
# CONFIG_PCH_GBE is not set
CONFIG_NETDEV_10000=y
CONFIG_MDIO=m
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3_DEPENDS=y
CONFIG_CHELSIO_T3=m
CONFIG_CHELSIO_T4_DEPENDS=y
# CONFIG_CHELSIO_T4 is not set
CONFIG_CHELSIO_T4VF_DEPENDS=y
# CONFIG_CHELSIO_T4VF is not set
CONFIG_ENIC=m
CONFIG_IXGBE=m
CONFIG_IXGBE_DCA=y
# CONFIG_IXGBEVF is not set
CONFIG_IXGB=m
CONFIG_S2IO=m
# CONFIG_VXGE is not set
CONFIG_MYRI10GE=m
CONFIG_MYRI10GE_DCA=y
CONFIG_NETXEN_NIC=m
CONFIG_NIU=m
CONFIG_MLX4_EN=m
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_TEHUTI=m
CONFIG_BNX2X=m
# CONFIG_QLCNIC is not set
CONFIG_QLGE=m
# CONFIG_BNA is not set
CONFIG_SFC=m
CONFIG_SFC_MTD=y
# CONFIG_BE2NET is not set
CONFIG_TR=y
CONFIG_IBMOL=m
CONFIG_3C359=m
CONFIG_TMS380TR=m
CONFIG_TMSPCI=m
CONFIG_ABYSS=m
CONFIG_WLAN=y
CONFIG_PCMCIA_RAYCS=m
CONFIG_LIBERTAS_THINFIRM=m
# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
CONFIG_LIBERTAS_THINFIRM_USB=m
CONFIG_AIRO=m
CONFIG_ATMEL=m
CONFIG_PCI_ATMEL=m
CONFIG_PCMCIA_ATMEL=m
# CONFIG_AT76C50X_USB is not set
CONFIG_AIRO_CS=m
CONFIG_PCMCIA_WL3501=m
CONFIG_PRISM54=m
CONFIG_USB_ZD1201=m
CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_RTL8180=m
CONFIG_RTL8187=m
CONFIG_RTL8187_LEDS=y
CONFIG_ADM8211=m
# CONFIG_MAC80211_HWSIM is not set
# CONFIG_MWL8K is not set
CONFIG_ATH_COMMON=m
# CONFIG_ATH_DEBUG is not set
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K=m
# CONFIG_ATH9K_DEBUGFS is not set
CONFIG_ATH9K_RATE_CONTROL=y
# CONFIG_ATH9K_HTC is not set
# CONFIG_AR9170_USB is not set
# CONFIG_CARL9170 is not set
CONFIG_B43=m
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
# CONFIG_B43_PCMCIA is not set
# CONFIG_B43_SDIO is not set
CONFIG_B43_PIO=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
# CONFIG_B43_DEBUG is not set
CONFIG_B43LEGACY=m
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_PLX=m
CONFIG_HOSTAP_PCI=m
CONFIG_HOSTAP_CS=m
CONFIG_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
CONFIG_IPW2200=m
CONFIG_IPW2200_MONITOR=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPW2200_PROMISCUOUS=y
CONFIG_IPW2200_QOS=y
# CONFIG_IPW2200_DEBUG is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m

#
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not set
# CONFIG_IWLWIFI_DEBUGFS is not set
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
CONFIG_IWLAGN=m
CONFIG_IWL4965=y
CONFIG_IWL5000=y
CONFIG_IWL3945=m
# CONFIG_IWM is not set
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
CONFIG_LIBERTAS_SDIO=m
# CONFIG_LIBERTAS_SPI is not set
# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_LIBERTAS_MESH is not set
CONFIG_HERMES=m
# CONFIG_HERMES_PRISM is not set
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_PLX_HERMES=m
CONFIG_TMD_HERMES=m
CONFIG_NORTEL_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_ORINOCO_USB is not set
CONFIG_P54_COMMON=m
CONFIG_P54_USB=m
CONFIG_P54_PCI=m
# CONFIG_P54_SPI is not set
CONFIG_P54_LEDS=y
CONFIG_RT2X00=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
CONFIG_RT2800PCI_PCI=y
# CONFIG_RT2800PCI is not set
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
# CONFIG_RT2800USB is not set
CONFIG_RT2X00_LIB_PCI=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
# CONFIG_RT2X00_LIB_DEBUGFS is not set
# CONFIG_RT2X00_DEBUG is not set
# CONFIG_WL1251 is not set
# CONFIG_WL12XX is not set
CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#

#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_CDC_EEM is not set
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=m
# CONFIG_USB_NET_CX82310_ETH is not set
CONFIG_USB_HSO=m
# CONFIG_USB_NET_INT51X1 is not set
# CONFIG_USB_CDC_PHONET is not set
CONFIG_USB_IPHETH=m
CONFIG_USB_SIERRA_NET=m
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_FMVJ18X=m
CONFIG_PCMCIA_PCNET=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_PCMCIA_AXNET=m
CONFIG_ARCNET_COM20020_CS=m
CONFIG_PCMCIA_IBMTR=m
CONFIG_WAN=y
CONFIG_LANMEDIA=m
CONFIG_HDLC=m
CONFIG_HDLC_RAW=m
CONFIG_HDLC_RAW_ETH=m
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC_PPP=m
CONFIG_HDLC_X25=m
CONFIG_PCI200SYN=m
CONFIG_WANXL=m
# CONFIG_PC300TOO is not set
CONFIG_FARSYNC=m
CONFIG_DSCC4=m
CONFIG_DSCC4_PCISYNC=y
CONFIG_DSCC4_PCI_RST=y
CONFIG_DLCI=m
CONFIG_DLCI_MAX=8
CONFIG_WAN_ROUTER_DRIVERS=m
CONFIG_CYCLADES_SYNC=m
CONFIG_CYCLOMX_X25=y
CONFIG_LAPBETHER=m
CONFIG_X25_ASY=m
CONFIG_SBNI=m
# CONFIG_SBNI_MULTILINE is not set
CONFIG_ATM_DRIVERS=y
# CONFIG_ATM_DUMMY is not set
CONFIG_ATM_TCP=m
CONFIG_ATM_LANAI=m
CONFIG_ATM_ENI=m
# CONFIG_ATM_ENI_DEBUG is not set
# CONFIG_ATM_ENI_TUNE_BURST is not set
CONFIG_ATM_FIRESTREAM=m
CONFIG_ATM_ZATM=m
# CONFIG_ATM_ZATM_DEBUG is not set
# CONFIG_ATM_NICSTAR is not set
CONFIG_ATM_IDT77252=m
# CONFIG_ATM_IDT77252_DEBUG is not set
# CONFIG_ATM_IDT77252_RCV_ALL is not set
CONFIG_ATM_IDT77252_USE_SUNI=y
CONFIG_ATM_AMBASSADOR=m
# CONFIG_ATM_AMBASSADOR_DEBUG is not set
CONFIG_ATM_HORIZON=m
# CONFIG_ATM_HORIZON_DEBUG is not set
CONFIG_ATM_IA=m
# CONFIG_ATM_IA_DEBUG is not set
CONFIG_ATM_FORE200E=m
# CONFIG_ATM_FORE200E_USE_TASKLET is not set
CONFIG_ATM_FORE200E_TX_RETRY=16
CONFIG_ATM_FORE200E_DEBUG=0
CONFIG_ATM_HE=m
CONFIG_ATM_HE_USE_SUNI=y
# CONFIG_ATM_SOLOS is not set

#
# CAIF transport drivers
#
CONFIG_FDDI=y
CONFIG_DEFXX=m
# CONFIG_DEFXX_MMIO is not set
CONFIG_SKFP=m
CONFIG_HIPPI=y
CONFIG_ROADRUNNER=m
# CONFIG_ROADRUNNER_LARGE_RINGS is not set
CONFIG_PLIP=m
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_MPPE=m
CONFIG_PPPOE=m
CONFIG_PPPOATM=m
CONFIG_SLIP=m
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLHC=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
CONFIG_NET_FC=y
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_VIRTIO_NET=m
# CONFIG_VMXNET3 is not set
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_SPARSEKMAP=m

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=m

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_QT2160 is not set
CONFIG_KEYBOARD_LKKBD=m
CONFIG_KEYBOARD_GPIO=m
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_MATRIX is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
CONFIG_KEYBOARD_NEWTON=m
# CONFIG_KEYBOARD_OPENCORES is not set
CONFIG_KEYBOARD_STOWAWAY=m
CONFIG_KEYBOARD_SUNKBD=m
CONFIG_KEYBOARD_XTKBD=m
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
# CONFIG_MOUSE_PS2_SENTELIC is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
CONFIG_MOUSE_SERIAL=m
CONFIG_MOUSE_APPLETOUCH=m
CONFIG_MOUSE_BCM5974=m
CONFIG_MOUSE_VSXXXAA=m
CONFIG_MOUSE_GPIO=m
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=m
CONFIG_JOYSTICK_A3D=m
CONFIG_JOYSTICK_ADI=m
CONFIG_JOYSTICK_COBRA=m
CONFIG_JOYSTICK_GF2K=m
CONFIG_JOYSTICK_GRIP=m
CONFIG_JOYSTICK_GRIP_MP=m
CONFIG_JOYSTICK_GUILLEMOT=m
CONFIG_JOYSTICK_INTERACT=m
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_TMDC=m
CONFIG_JOYSTICK_IFORCE=m
CONFIG_JOYSTICK_IFORCE_USB=y
CONFIG_JOYSTICK_IFORCE_232=y
CONFIG_JOYSTICK_WARRIOR=m
CONFIG_JOYSTICK_MAGELLAN=m
CONFIG_JOYSTICK_SPACEORB=m
CONFIG_JOYSTICK_SPACEBALL=m
CONFIG_JOYSTICK_STINGER=m
CONFIG_JOYSTICK_TWIDJOY=m
CONFIG_JOYSTICK_ZHENHUA=m
CONFIG_JOYSTICK_DB9=m
CONFIG_JOYSTICK_GAMECON=m
CONFIG_JOYSTICK_TURBOGRAFX=m
CONFIG_JOYSTICK_JOYDUMP=m
CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
# CONFIG_JOYSTICK_WALKERA0701 is not set
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
CONFIG_TABLET_USB_AIPTEK=m
CONFIG_TABLET_USB_GTCO=m
# CONFIG_TABLET_USB_HANWANG is not set
CONFIG_TABLET_USB_KBTAB=m
CONFIG_TABLET_USB_WACOM=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADS7846=m
# CONFIG_TOUCHSCREEN_AD7877 is not set
# CONFIG_TOUCHSCREEN_AD7879 is not set
# CONFIG_TOUCHSCREEN_BU21013 is not set
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
CONFIG_TOUCHSCREEN_DA9034=y
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
# CONFIG_TOUCHSCREEN_EETI is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_ELO=m
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_MCS5000 is not set
CONFIG_TOUCHSCREEN_MTOUCH=m
CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
CONFIG_TOUCHSCREEN_PENMOUNT=m
# CONFIG_TOUCHSCREEN_QT602240 is not set
CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
CONFIG_TOUCHSCREEN_TOUCHWIN=m
CONFIG_TOUCHSCREEN_UCB1400=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
# CONFIG_TOUCHSCREEN_USB_E2I is not set
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_TOUCHIT213=m
# CONFIG_TOUCHSCREEN_TSC2007 is not set
# CONFIG_TOUCHSCREEN_TPS6507X is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_AD714X is not set
CONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_APANEL is not set
CONFIG_INPUT_ATLAS_BTNS=m
CONFIG_INPUT_ATI_REMOTE=m
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
# CONFIG_INPUT_WINBOND_CIR is not set
# CONFIG_INPUT_PCF8574 is not set
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
# CONFIG_INPUT_ADXL34X is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=m
CONFIG_SERIO_CT82C710=m
CONFIG_SERIO_PARKBD=m
CONFIG_SERIO_PCIPS2=m
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=m
# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_SERIO_PS2MULT is not set
CONFIG_GAMEPORT=m
CONFIG_GAMEPORT_NS558=m
CONFIG_GAMEPORT_L4=m
CONFIG_GAMEPORT_EMU10K1=m
CONFIG_GAMEPORT_FM801=m

#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_COMPUTONE=m
CONFIG_ROCKETPORT=m
CONFIG_CYCLADES=m
# CONFIG_CYZ_INTR is not set
CONFIG_DIGIEPCA=m
CONFIG_MOXA_INTELLIO=m
CONFIG_MOXA_SMARTIO=m
# CONFIG_ISI is not set
CONFIG_SYNCLINK=m
CONFIG_SYNCLINKMP=m
CONFIG_SYNCLINK_GT=m
CONFIG_N_HDLC=m
# CONFIG_N_GSM is not set
CONFIG_RISCOM8=m
CONFIG_SPECIALIX=m
CONFIG_STALDRV=y
CONFIG_STALLION=m
CONFIG_ISTALLION=m
CONFIG_NOZOMI=m

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_NR_UARTS=48
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
CONFIG_SERIAL_8250_RSA=y

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX3107 is not set
# CONFIG_SERIAL_MFD_HSU is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_CONSOLE_POLL=y
CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=0
CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
CONFIG_PPDEV=m
CONFIG_HVC_DRIVER=y
CONFIG_VIRTIO_CONSOLE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
CONFIG_HW_RANDOM_INTEL=m
CONFIG_HW_RANDOM_AMD=m
CONFIG_HW_RANDOM_VIA=y
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_NVRAM=m
CONFIG_R3964=m
CONFIG_APPLICOM=m

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=m
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
CONFIG_IPWIRELESS=m
CONFIG_MWAVE=m
CONFIG_RAW_DRIVER=m
CONFIG_MAX_RAW_DEVS=256
CONFIG_HPET=y
CONFIG_HPET_MMAP=y
CONFIG_HANGCHECK_TIMER=m
CONFIG_TCG_TPM=m
CONFIG_TCG_TIS=m
CONFIG_TCG_NSC=m
CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
# CONFIG_RAMOOPS is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
# CONFIG_I2C_MUX is not set
# CONFIG_I2C_HELPER_AUTO is not set
CONFIG_I2C_SMBUS=m

#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=m
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
CONFIG_I2C_ALI1535=m
CONFIG_I2C_ALI1563=m
CONFIG_I2C_ALI15X3=m
CONFIG_I2C_AMD756=m
CONFIG_I2C_AMD756_S4882=m
CONFIG_I2C_AMD8111=m
CONFIG_I2C_I801=m
CONFIG_I2C_ISCH=m
CONFIG_I2C_PIIX4=m
CONFIG_I2C_NFORCE2=m
CONFIG_I2C_NFORCE2_S4985=m
CONFIG_I2C_SIS5595=m
CONFIG_I2C_SIS630=m
CONFIG_I2C_SIS96X=m
CONFIG_I2C_VIA=m
CONFIG_I2C_VIAPRO=m

#
# ACPI drivers
#
# CONFIG_I2C_SCMI is not set

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_GPIO=m
# CONFIG_I2C_INTEL_MID is not set
CONFIG_I2C_OCORES=m
CONFIG_I2C_PCA_PLATFORM=m
CONFIG_I2C_SIMTEC=m
# CONFIG_I2C_XILINX is not set

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_PARPORT=m
CONFIG_I2C_PARPORT_LIGHT=m
CONFIG_I2C_TAOS_EVM=m
CONFIG_I2C_TINY_USB=m

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_STUB=m
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
CONFIG_SPI=y
# CONFIG_SPI_DEBUG is not set
CONFIG_SPI_MASTER=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_BITBANG=m
CONFIG_SPI_BUTTERFLY=m
# CONFIG_SPI_GPIO is not set
CONFIG_SPI_LM70_LLP=m
# CONFIG_SPI_TOPCLIFF_PCH is not set
# CONFIG_SPI_XILINX is not set
# CONFIG_SPI_DESIGNWARE is not set

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=m
CONFIG_SPI_TLE62X0=m

#
# PPS support
#
# CONFIG_PPS is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_MAX730X=m

#
# Memory mapped GPIO expanders:
#
# CONFIG_GPIO_BASIC_MMIO is not set
# CONFIG_GPIO_IT8761E is not set
# CONFIG_GPIO_SCH is not set
# CONFIG_GPIO_VX855 is not set

#
# I2C GPIO expanders:
#
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX732X=m
CONFIG_GPIO_PCA953X=m
CONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_ADP5588 is not set

#
# PCI GPIO expanders:
#
# CONFIG_GPIO_CS5535 is not set
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_LANGWELL is not set
# CONFIG_GPIO_PCH is not set
# CONFIG_GPIO_RDC321X is not set

#
# SPI GPIO expanders:
#
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MCP23S08=m
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_74X164 is not set

#
# AC97 GPIO expanders:
#
# CONFIG_GPIO_UCB1400 is not set

#
# MODULbus GPIO expanders:
#
CONFIG_W1=m
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_MATROX=m
CONFIG_W1_MASTER_DS2490=m
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_GPIO=m

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
CONFIG_W1_SLAVE_SMEM=m
# CONFIG_W1_SLAVE_DS2431 is not set
CONFIG_W1_SLAVE_DS2433=m
# CONFIG_W1_SLAVE_DS2433_CRC is not set
CONFIG_W1_SLAVE_DS2760=m
CONFIG_W1_SLAVE_BQ27000=m
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
# CONFIG_TEST_POWER is not set
CONFIG_BATTERY_DS2760=m
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ20Z75 is not set
CONFIG_BATTERY_BQ27x00=m
# CONFIG_BATTERY_DA9030 is not set
# CONFIG_BATTERY_MAX17040 is not set
CONFIG_HWMON=y
CONFIG_HWMON_VID=m
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Native drivers
#
CONFIG_SENSORS_ABITUGURU=m
CONFIG_SENSORS_ABITUGURU3=m
CONFIG_SENSORS_AD7414=m
CONFIG_SENSORS_AD7418=m
CONFIG_SENSORS_ADCXX=m
CONFIG_SENSORS_ADM1021=m
CONFIG_SENSORS_ADM1025=m
CONFIG_SENSORS_ADM1026=m
CONFIG_SENSORS_ADM1029=m
CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM9240=m
# CONFIG_SENSORS_ADT7411 is not set
CONFIG_SENSORS_ADT7462=m
CONFIG_SENSORS_ADT7470=m
CONFIG_SENSORS_ADT7475=m
# CONFIG_SENSORS_ASC7621 is not set
CONFIG_SENSORS_K8TEMP=m
# CONFIG_SENSORS_K10TEMP is not set
CONFIG_SENSORS_ASB100=m
CONFIG_SENSORS_ATXP1=m
CONFIG_SENSORS_DS1621=m
CONFIG_SENSORS_I5K_AMB=m
CONFIG_SENSORS_F71805F=m
CONFIG_SENSORS_F71882FG=m
CONFIG_SENSORS_F75375S=m
CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
CONFIG_SENSORS_CORETEMP=m
# CONFIG_SENSORS_PKGTEMP is not set
CONFIG_SENSORS_IBMAEM=m
CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_IT87=m
# CONFIG_SENSORS_JC42 is not set
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM70=m
# CONFIG_SENSORS_LM73 is not set
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
CONFIG_SENSORS_LM80=m
CONFIG_SENSORS_LM83=m
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_LM92=m
CONFIG_SENSORS_LM93=m
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LTC4261 is not set
# CONFIG_SENSORS_LM95241 is not set
CONFIG_SENSORS_MAX1111=m
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_MAX6650=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
CONFIG_SENSORS_PCF8591=m
# CONFIG_SENSORS_SHT15 is not set
CONFIG_SENSORS_SIS5595=m
# CONFIG_SENSORS_SMM665 is not set
CONFIG_SENSORS_DME1737=m
# CONFIG_SENSORS_EMC1403 is not set
# CONFIG_SENSORS_EMC2103 is not set
CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_SMSC47M192=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_AMC6821 is not set
CONFIG_SENSORS_THMC50=m
# CONFIG_SENSORS_TMP102 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_VIA_CPUTEMP is not set
CONFIG_SENSORS_VIA686A=m
CONFIG_SENSORS_VT1211=m
CONFIG_SENSORS_VT8231=m
CONFIG_SENSORS_W83781D=m
CONFIG_SENSORS_W83791D=m
CONFIG_SENSORS_W83792D=m
CONFIG_SENSORS_W83793=m
# CONFIG_SENSORS_W83795 is not set
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
# CONFIG_SENSORS_LIS3_I2C is not set
CONFIG_SENSORS_APPLESMC=m

#
# ACPI drivers
#
# CONFIG_SENSORS_ATK0110 is not set
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_THERMAL=y
CONFIG_THERMAL_HWMON=y
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_ACQUIRE_WDT=m
CONFIG_ADVANTECH_WDT=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
# CONFIG_F71808E_WDT is not set
CONFIG_SC520_WDT=m
# CONFIG_SBC_FITPC2_WATCHDOG is not set
CONFIG_EUROTECH_WDT=m
CONFIG_IB700_WDT=m
CONFIG_IBMASR=m
CONFIG_WAFER_WDT=m
CONFIG_I6300ESB_WDT=m
CONFIG_ITCO_WDT=m
CONFIG_ITCO_VENDOR_SUPPORT=y
CONFIG_IT8712F_WDT=m
CONFIG_IT87_WDT=m
# CONFIG_HP_WATCHDOG is not set
CONFIG_SC1200_WDT=m
CONFIG_PC87413_WDT=m
CONFIG_60XX_WDT=m
CONFIG_SBC8360_WDT=m
CONFIG_CPU5_WDT=m
# CONFIG_SMSC_SCH311X_WDT is not set
CONFIG_SMSC37B787_WDT=m
CONFIG_W83627HF_WDT=m
CONFIG_W83697HF_WDT=m
CONFIG_W83697UG_WDT=m
CONFIG_W83877F_WDT=m
CONFIG_W83977F_WDT=m
CONFIG_MACHZ_WDT=m
CONFIG_SBC_EPX_C3_WATCHDOG=m

#
# PCI-based Watchdog Cards
#
CONFIG_PCIPCWATCHDOG=m
CONFIG_WDTPCI=m

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=m
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
CONFIG_SSB=m
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
CONFIG_SSB_B43_PCI_BRIDGE=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
# CONFIG_SSB_PCMCIAHOST is not set
CONFIG_SSB_SDIOHOST_POSSIBLE=y
# CONFIG_SSB_SDIOHOST is not set
# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y
CONFIG_MFD_SUPPORT=y
CONFIG_MFD_CORE=m
# CONFIG_MFD_88PM860X is not set
CONFIG_MFD_SM501=m
# CONFIG_MFD_SM501_GPIO is not set
CONFIG_HTC_PASIC3=m
# CONFIG_HTC_I2CPLD is not set
CONFIG_UCB1400_CORE=m
CONFIG_TPS65010=m
# CONFIG_TPS6507X is not set
# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_TC35892 is not set
# CONFIG_MFD_TMIO is not set
CONFIG_PMIC_DA903X=y
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_MAX8925 is not set
# CONFIG_MFD_MAX8998 is not set
CONFIG_MFD_WM8400=m
# CONFIG_MFD_WM831X_I2C is not set
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_MC13XXX is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_EZX_PCAP is not set
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_LPC_SCH=m
# CONFIG_MFD_RDC321X is not set
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_VX855 is not set
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
# CONFIG_REGULATOR_DUMMY is not set
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
CONFIG_REGULATOR_BQ24022=m
# CONFIG_REGULATOR_MAX1586 is not set
# CONFIG_REGULATOR_MAX8649 is not set
# CONFIG_REGULATOR_MAX8660 is not set
# CONFIG_REGULATOR_MAX8952 is not set
CONFIG_REGULATOR_WM8400=m
CONFIG_REGULATOR_DA903X=m
# CONFIG_REGULATOR_LP3971 is not set
# CONFIG_REGULATOR_LP3972 is not set
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_ISL6271A is not set
# CONFIG_REGULATOR_AD5398 is not set
CONFIG_MEDIA_SUPPORT=y

#
# Multimedia core support
#
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_COMMON=y
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_DVB_CORE=m
CONFIG_VIDEO_MEDIA=m

#
# Multimedia drivers
#
CONFIG_IR_CORE=y
CONFIG_VIDEO_IR=y
CONFIG_LIRC=y
CONFIG_RC_MAP=y
CONFIG_IR_NEC_DECODER=y
CONFIG_IR_RC5_DECODER=y
CONFIG_IR_RC6_DECODER=y
CONFIG_IR_JVC_DECODER=y
CONFIG_IR_SONY_DECODER=y
CONFIG_IR_RC5_SZ_DECODER=y
# CONFIG_IR_LIRC_CODEC is not set
# CONFIG_IR_ENE is not set
# CONFIG_IR_IMON is not set
# CONFIG_IR_MCEUSB is not set
# CONFIG_IR_NUVOTON is not set
# CONFIG_IR_STREAMZAP is not set
# CONFIG_MEDIA_ATTACH is not set
CONFIG_MEDIA_TUNER=m
# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
CONFIG_MEDIA_TUNER_SIMPLE=m
CONFIG_MEDIA_TUNER_TDA8290=m
CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_XC2028=m
CONFIG_MEDIA_TUNER_XC5000=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEOBUF_DVB=m
CONFIG_VIDEO_TVEEPROM=m
CONFIG_VIDEO_TUNER=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
CONFIG_VIDEO_IR_I2C=y
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_WM8775=m
CONFIG_VIDEO_MT9V011=m
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_TVP5150=m
CONFIG_VIDEO_CX25840=m
CONFIG_VIDEO_CX2341X=m
# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_BT848 is not set
# CONFIG_VIDEO_BWQCAM is not set
# CONFIG_VIDEO_CQCAM is not set
# CONFIG_VIDEO_W9966 is not set
# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_ZORAN is not set
# CONFIG_VIDEO_MEYE is not set
# CONFIG_VIDEO_SAA7134 is not set
# CONFIG_VIDEO_MXB is not set
# CONFIG_VIDEO_HEXIUM_ORION is not set
# CONFIG_VIDEO_HEXIUM_GEMINI is not set
# CONFIG_VIDEO_CX88 is not set
# CONFIG_VIDEO_CX23885 is not set
# CONFIG_VIDEO_AU0828 is not set
# CONFIG_VIDEO_IVTV is not set
# CONFIG_VIDEO_CX18 is not set
# CONFIG_VIDEO_SAA7164 is not set
# CONFIG_VIDEO_CAFE_CCIC is not set
# CONFIG_VIDEO_SR030PC30 is not set
# CONFIG_VIDEO_VIA_CAMERA is not set
# CONFIG_SOC_CAMERA is not set
CONFIG_V4L_USB_DRIVERS=y
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
CONFIG_USB_M5602=m
CONFIG_USB_STV06XX=m
CONFIG_USB_GL860=m
CONFIG_USB_GSPCA_BENQ=m
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_CPIA1=m
CONFIG_USB_GSPCA_ETOMS=m
CONFIG_USB_GSPCA_FINEPIX=m
CONFIG_USB_GSPCA_JEILINJ=m
# CONFIG_USB_GSPCA_KONICA is not set
CONFIG_USB_GSPCA_MARS=m
CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_OV519=m
CONFIG_USB_GSPCA_OV534=m
CONFIG_USB_GSPCA_OV534_9=m
CONFIG_USB_GSPCA_PAC207=m
CONFIG_USB_GSPCA_PAC7302=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_SN9C2028=m
CONFIG_USB_GSPCA_SN9C20X=m
CONFIG_USB_GSPCA_SONIXB=m
CONFIG_USB_GSPCA_SONIXJ=m
CONFIG_USB_GSPCA_SPCA500=m
CONFIG_USB_GSPCA_SPCA501=m
CONFIG_USB_GSPCA_SPCA505=m
CONFIG_USB_GSPCA_SPCA506=m
CONFIG_USB_GSPCA_SPCA508=m
CONFIG_USB_GSPCA_SPCA561=m
CONFIG_USB_GSPCA_SPCA1528=m
CONFIG_USB_GSPCA_SQ905=m
CONFIG_USB_GSPCA_SQ905C=m
CONFIG_USB_GSPCA_SQ930X=m
CONFIG_USB_GSPCA_STK014=m
CONFIG_USB_GSPCA_STV0680=m
CONFIG_USB_GSPCA_SUNPLUS=m
CONFIG_USB_GSPCA_T613=m
CONFIG_USB_GSPCA_TV8532=m
CONFIG_USB_GSPCA_VC032X=m
# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
CONFIG_USB_GSPCA_ZC3XX=m
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_ALSA=m
# CONFIG_VIDEO_EM28XX_DVB is not set
CONFIG_VIDEO_TLG2300=m
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_ALSA=m
# CONFIG_VIDEO_CX231XX_DVB is not set
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_USBVIDEO=m
CONFIG_USB_VICAM=m
CONFIG_USB_IBMCAM=m
CONFIG_USB_KONICAWC=m
CONFIG_USB_ET61X251=m
CONFIG_USB_SE401=m
CONFIG_USB_SN9C102=m
CONFIG_USB_PWC=m
# CONFIG_USB_PWC_DEBUG is not set
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_ZR364XX=m
CONFIG_USB_STKWEBCAM=m
CONFIG_USB_S2255=m
# CONFIG_V4L_MEM2MEM_DRIVERS is not set
CONFIG_RADIO_ADAPTERS=y
# CONFIG_RADIO_GEMTEK_PCI is not set
# CONFIG_RADIO_MAXIRADIO is not set
# CONFIG_RADIO_MAESTRO is not set
# CONFIG_I2C_SI4713 is not set
# CONFIG_RADIO_SI4713 is not set
# CONFIG_USB_DSBR is not set
# CONFIG_RADIO_SI470X is not set
# CONFIG_USB_MR800 is not set
# CONFIG_RADIO_TEA5764 is not set
# CONFIG_RADIO_SAA7706H is not set
# CONFIG_RADIO_TEF6862 is not set
CONFIG_DVB_MAX_ADAPTERS=8
# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_DVB_CAPTURE_DRIVERS=y

#
# Supported SAA7146 based PCI Adapters
#
# CONFIG_TTPCI_EEPROM is not set
# CONFIG_DVB_AV7110 is not set
# CONFIG_DVB_BUDGET_CORE is not set

#
# Supported USB Adapters
#
# CONFIG_DVB_USB is not set
# CONFIG_DVB_TTUSB_BUDGET is not set
# CONFIG_DVB_TTUSB_DEC is not set
# CONFIG_SMS_SIANO_MDTV is not set

#
# Supported FlexCopII (B2C2) Adapters
#
# CONFIG_DVB_B2C2_FLEXCOP is not set

#
# Supported BT878 Adapters
#

#
# Supported Pluto2 Adapters
#
# CONFIG_DVB_PLUTO2 is not set

#
# Supported SDMC DM1105 Adapters
#
# CONFIG_DVB_DM1105 is not set
# CONFIG_DVB_FIREDTV is not set

#
# Supported Earthsoft PT1 Adapters
#
# CONFIG_DVB_PT1 is not set

#
# Supported Mantis Adapters
#
# CONFIG_MANTIS_CORE is not set

#
# Supported nGene Adapters
#
# CONFIG_DVB_NGENE is not set

#
# Supported DVB Frontends
#
# CONFIG_DVB_FE_CUSTOMISE is not set
CONFIG_DVB_TDA10048=m
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_S5H1409=m
CONFIG_DVB_S5H1411=m
# CONFIG_DAB is not set

#
# Graphics support
#
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=m
CONFIG_AGP_SIS=m
CONFIG_AGP_VIA=m
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
# CONFIG_VGA_SWITCHEROO is not set
CONFIG_DRM=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_TTM=m
CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
# CONFIG_DRM_RADEON_KMS is not set
CONFIG_DRM_I810=m
CONFIG_DRM_I830=m
CONFIG_DRM_I915=m
# CONFIG_DRM_I915_KMS is not set
CONFIG_DRM_MGA=m
CONFIG_DRM_SIS=m
CONFIG_DRM_VIA=m
CONFIG_DRM_SAVAGE=m
# CONFIG_STUB_POULSBO is not set
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_DDC=m
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
# CONFIG_FB_FOREIGN_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_HECUBA=m
CONFIG_FB_SVGALIB=m
# CONFIG_FB_MACMODES is not set
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=m
CONFIG_FB_PM2=m
CONFIG_FB_PM2_FIFO_DISCONNECT=y
CONFIG_FB_CYBER2000=m
CONFIG_FB_ARC=m
CONFIG_FB_ASILIANT=y
CONFIG_FB_IMSTT=y
CONFIG_FB_VGA16=m
CONFIG_FB_UVESA=m
# CONFIG_FB_VESA is not set
CONFIG_FB_EFI=y
CONFIG_FB_N411=m
CONFIG_FB_HGA=m
# CONFIG_FB_HGA_ACCEL is not set
CONFIG_FB_S1D13XXX=m
CONFIG_FB_NVIDIA=m
CONFIG_FB_NVIDIA_I2C=y
# CONFIG_FB_NVIDIA_DEBUG is not set
CONFIG_FB_NVIDIA_BACKLIGHT=y
CONFIG_FB_RIVA=m
CONFIG_FB_RIVA_I2C=y
# CONFIG_FB_RIVA_DEBUG is not set
CONFIG_FB_RIVA_BACKLIGHT=y
CONFIG_FB_LE80578=m
CONFIG_FB_CARILLO_RANCH=m
CONFIG_FB_MATROX=m
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_MATROX_I2C=m
CONFIG_FB_MATROX_MAVEN=m
CONFIG_FB_RADEON=m
CONFIG_FB_RADEON_I2C=y
CONFIG_FB_RADEON_BACKLIGHT=y
# CONFIG_FB_RADEON_DEBUG is not set
CONFIG_FB_ATY128=m
CONFIG_FB_ATY128_BACKLIGHT=y
CONFIG_FB_ATY=m
CONFIG_FB_ATY_CT=y
CONFIG_FB_ATY_GENERIC_LCD=y
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_S3=m
CONFIG_FB_SAVAGE=m
CONFIG_FB_SAVAGE_I2C=y
CONFIG_FB_SAVAGE_ACCEL=y
CONFIG_FB_SIS=m
CONFIG_FB_SIS_300=y
CONFIG_FB_SIS_315=y
CONFIG_FB_VIA=m
# CONFIG_FB_VIA_DIRECT_PROCFS is not set
CONFIG_FB_NEOMAGIC=m
CONFIG_FB_KYRO=m
CONFIG_FB_3DFX=m
# CONFIG_FB_3DFX_ACCEL is not set
CONFIG_FB_3DFX_I2C=y
CONFIG_FB_VOODOO1=m
CONFIG_FB_VT8623=m
CONFIG_FB_TRIDENT=m
CONFIG_FB_ARK=m
CONFIG_FB_PM3=m
CONFIG_FB_CARMINE=m
CONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not set
CONFIG_FB_GEODE=y
CONFIG_FB_GEODE_LX=m
CONFIG_FB_GEODE_GX=m
CONFIG_FB_GEODE_GX1=m
# CONFIG_FB_TMIO is not set
CONFIG_FB_SM501=m
# CONFIG_FB_VIRTUAL is not set
CONFIG_FB_METRONOME=m
CONFIG_FB_MB862XX=m
CONFIG_FB_MB862XX_PCI_GDC=y
# CONFIG_FB_BROADSHEET is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_L4F00242T03 is not set
# CONFIG_LCD_LMS283GF05 is not set
CONFIG_LCD_LTV350QV=m
CONFIG_LCD_ILI9320=m
CONFIG_LCD_TDO24M=m
CONFIG_LCD_VGG2432A4=m
CONFIG_LCD_PLATFORM=m
# CONFIG_LCD_S6E63M0 is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_GENERIC=y
CONFIG_BACKLIGHT_PROGEAR=m
CONFIG_BACKLIGHT_CARILLO_RANCH=m
CONFIG_BACKLIGHT_DA903X=m
CONFIG_BACKLIGHT_MBP_NVIDIA=m
CONFIG_BACKLIGHT_SAHARA=m
# CONFIG_BACKLIGHT_ADP8860 is not set

#
# Display device support
#
CONFIG_DISPLAY_SUPPORT=m

#
# Display hardware drivers
#

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=m
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_LOGO is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_JACK=y
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
# CONFIG_SND_HRTIMER is not set
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_RAWMIDI_SEQ=m
CONFIG_SND_OPL3_LIB_SEQ=m
# CONFIG_SND_OPL4_LIB_SEQ is not set
# CONFIG_SND_SBAWE_SEQ is not set
CONFIG_SND_EMU10K1_SEQ=m
CONFIG_SND_MPU401_UART=m
CONFIG_SND_OPL3_LIB=m
CONFIG_SND_VX_LIB=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_DRIVERS=y
CONFIG_SND_PCSP=m
CONFIG_SND_DUMMY=m
# CONFIG_SND_ALOOP is not set
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_MTS64=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_MPU401=m
CONFIG_SND_PORTMAN2X4=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
CONFIG_SND_SB_COMMON=m
CONFIG_SND_SB16_DSP=m
CONFIG_SND_PCI=y
CONFIG_SND_AD1889=m
CONFIG_SND_ALS300=m
CONFIG_SND_ALS4000=m
CONFIG_SND_ALI5451=m
# CONFIG_SND_ASIHPI is not set
CONFIG_SND_ATIIXP=m
CONFIG_SND_ATIIXP_MODEM=m
CONFIG_SND_AU8810=m
CONFIG_SND_AU8820=m
CONFIG_SND_AU8830=m
CONFIG_SND_AW2=m
CONFIG_SND_AZT3328=m
CONFIG_SND_BT87X=m
# CONFIG_SND_BT87X_OVERCLOCK is not set
CONFIG_SND_CA0106=m
CONFIG_SND_CMIPCI=m
CONFIG_SND_OXYGEN_LIB=m
CONFIG_SND_OXYGEN=m
CONFIG_SND_CS4281=m
CONFIG_SND_CS46XX=m
CONFIG_SND_CS46XX_NEW_DSP=y
CONFIG_SND_CS5530=m
# CONFIG_SND_CS5535AUDIO is not set
# CONFIG_SND_CTXFI is not set
CONFIG_SND_DARLA20=m
CONFIG_SND_GINA20=m
CONFIG_SND_LAYLA20=m
CONFIG_SND_DARLA24=m
CONFIG_SND_GINA24=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_MONA=m
CONFIG_SND_MIA=m
CONFIG_SND_ECHO3G=m
CONFIG_SND_INDIGO=m
CONFIG_SND_INDIGOIO=m
CONFIG_SND_INDIGODJ=m
# CONFIG_SND_INDIGOIOX is not set
# CONFIG_SND_INDIGODJX is not set
CONFIG_SND_EMU10K1=m
CONFIG_SND_EMU10K1X=m
CONFIG_SND_ENS1370=m
CONFIG_SND_ENS1371=m
CONFIG_SND_ES1938=m
CONFIG_SND_ES1968=m
# CONFIG_SND_ES1968_INPUT is not set
CONFIG_SND_FM801=m
# CONFIG_SND_FM801_TEA575X_BOOL is not set
CONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDA_HWDEP is not set
# CONFIG_SND_HDA_INPUT_BEEP is not set
# CONFIG_SND_HDA_INPUT_JACK is not set
# CONFIG_SND_HDA_PATCH_LOADER is not set
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_CODEC_CIRRUS=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
CONFIG_SND_HDSP=m
CONFIG_SND_HDSPM=m
CONFIG_SND_HIFIER=m
CONFIG_SND_ICE1712=m
CONFIG_SND_ICE1724=m
CONFIG_SND_INTEL8X0=m
CONFIG_SND_INTEL8X0M=m
CONFIG_SND_KORG1212=m
# CONFIG_SND_LX6464ES is not set
CONFIG_SND_MAESTRO3=m
# CONFIG_SND_MAESTRO3_INPUT is not set
CONFIG_SND_MIXART=m
CONFIG_SND_NM256=m
CONFIG_SND_PCXHR=m
CONFIG_SND_RIPTIDE=m
CONFIG_SND_RME32=m
CONFIG_SND_RME96=m
CONFIG_SND_RME9652=m
CONFIG_SND_SONICVIBES=m
CONFIG_SND_TRIDENT=m
CONFIG_SND_VIA82XX=m
CONFIG_SND_VIA82XX_MODEM=m
CONFIG_SND_VIRTUOSO=m
CONFIG_SND_VX222=m
CONFIG_SND_YMFPCI=m
CONFIG_SND_SPI=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
# CONFIG_SND_USB_UA101 is not set
CONFIG_SND_USB_USX2Y=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=m
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=m
CONFIG_SND_PDAUDIOCF=m
CONFIG_SND_SOC=m
CONFIG_SND_SOC_I2C_AND_SPI=m
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_WM_HUBS=m
CONFIG_SND_SOC_AD1836=m
CONFIG_SND_SOC_AD193X=m
CONFIG_SND_SOC_AD73311=m
CONFIG_SND_SOC_ADS117X=m
CONFIG_SND_SOC_AK4104=m
CONFIG_SND_SOC_AK4535=m
CONFIG_SND_SOC_AK4642=m
CONFIG_SND_SOC_AK4671=m
CONFIG_SND_SOC_CS42L51=m
CONFIG_SND_SOC_CS4270=m
CONFIG_SND_SOC_CX20442=m
CONFIG_SND_SOC_L3=m
CONFIG_SND_SOC_DA7210=m
CONFIG_SND_SOC_MAX98088=m
CONFIG_SND_SOC_PCM3008=m
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_SSM2602=m
CONFIG_SND_SOC_TLV320AIC23=m
CONFIG_SND_SOC_TLV320AIC26=m
CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_TLV320DAC33=m
CONFIG_SND_SOC_UDA134X=m
CONFIG_SND_SOC_UDA1380=m
CONFIG_SND_SOC_WM8400=m
CONFIG_SND_SOC_WM8510=m
CONFIG_SND_SOC_WM8523=m
CONFIG_SND_SOC_WM8580=m
CONFIG_SND_SOC_WM8711=m
CONFIG_SND_SOC_WM8727=m
CONFIG_SND_SOC_WM8728=m
CONFIG_SND_SOC_WM8731=m
CONFIG_SND_SOC_WM8741=m
CONFIG_SND_SOC_WM8750=m
CONFIG_SND_SOC_WM8753=m
CONFIG_SND_SOC_WM8776=m
CONFIG_SND_SOC_WM8804=m
CONFIG_SND_SOC_WM8900=m
CONFIG_SND_SOC_WM8903=m
CONFIG_SND_SOC_WM8904=m
CONFIG_SND_SOC_WM8940=m
CONFIG_SND_SOC_WM8955=m
CONFIG_SND_SOC_WM8960=m
CONFIG_SND_SOC_WM8961=m
CONFIG_SND_SOC_WM8962=m
CONFIG_SND_SOC_WM8971=m
CONFIG_SND_SOC_WM8974=m
CONFIG_SND_SOC_WM8978=m
CONFIG_SND_SOC_WM8985=m
CONFIG_SND_SOC_WM8988=m
CONFIG_SND_SOC_WM8990=m
CONFIG_SND_SOC_WM8993=m
CONFIG_SND_SOC_WM9081=m
CONFIG_SND_SOC_MAX9877=m
CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_WM2000=m
CONFIG_SND_SOC_WM9090=m
CONFIG_SOUND_PRIME=m
CONFIG_SOUND_OSS=m
# CONFIG_SOUND_TRACEINIT is not set
CONFIG_SOUND_DMAP=y
CONFIG_SOUND_VMIDI=m
CONFIG_SOUND_TRIX=m
CONFIG_SOUND_MSS=m
CONFIG_SOUND_MPU401=m
CONFIG_SOUND_PAS=m
CONFIG_SOUND_PSS=m
CONFIG_PSS_MIXER=y
# CONFIG_PSS_HAVE_BOOT is not set
CONFIG_SOUND_SB=m
CONFIG_SOUND_YM3812=m
CONFIG_SOUND_UART6850=m
CONFIG_SOUND_AEDSP16=m
CONFIG_SC6600=y
CONFIG_SC6600_JOY=y
CONFIG_SC6600_CDROM=4
CONFIG_SC6600_CDROMBASE=0
CONFIG_SOUND_KAHLUA=m
CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_HIDRAW=y

#
# USB Input Devices
#
CONFIG_USB_HID=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y

#
# Special HID drivers
#
# CONFIG_HID_3M_PCT is not set
CONFIG_HID_A4TECH=m
# CONFIG_HID_ACRUX_FF is not set
CONFIG_HID_APPLE=m
CONFIG_HID_BELKIN=m
# CONFIG_HID_CANDO is not set
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
# CONFIG_HID_PRODIKEYS is not set
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=m
# CONFIG_DRAGONRISE_FF is not set
# CONFIG_HID_EGALAX is not set
# CONFIG_HID_ELECOM is not set
CONFIG_HID_EZKEY=m
CONFIG_HID_KYE=m
# CONFIG_HID_UCLOGIC is not set
# CONFIG_HID_WALTOP is not set
CONFIG_HID_GYRATION=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LOGITECH=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
# CONFIG_LOGIG940_FF is not set
# CONFIG_LOGIWII_FF is not set
CONFIG_HID_MAGICMOUSE=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MOSART=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_NTRIG=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PETALYNX=m
# CONFIG_HID_PICOLCD is not set
# CONFIG_HID_QUANTA is not set
# CONFIG_HID_ROCCAT is not set
# CONFIG_HID_ROCCAT_KONE is not set
# CONFIG_HID_ROCCAT_PYRA is not set
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SONY=m
# CONFIG_HID_STANTUM is not set
CONFIG_HID_SUNPLUS=m
CONFIG_HID_GREENASIA=m
# CONFIG_GREENASIA_FF is not set
CONFIG_HID_SMARTJOYPLUS=m
# CONFIG_SMARTJOYPLUS_FF is not set
CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
# CONFIG_THRUSTMASTER_FF is not set
CONFIG_HID_WACOM=m
# CONFIG_HID_WACOM_POWER_SUPPLY is not set
CONFIG_HID_ZEROPLUS=m
# CONFIG_ZEROPLUS_FF is not set
# CONFIG_HID_ZYDACRON is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=m
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
CONFIG_USB_MON=m
# CONFIG_USB_WUSB is not set
# CONFIG_USB_WUSB_CBAF is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_XHCI_HCD_DEBUGGING=y
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
# CONFIG_USB_ISP1362_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_HCD_SSB is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_U132_HCD is not set
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_WHCI_HCD is not set
# CONFIG_USB_HWA_HCD is not set

#
# Enable Host or Gadget support to see Inventra options
#

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
CONFIG_USB_TMC=m

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_DATAFAB=m
CONFIG_USB_STORAGE_FREECOM=m
CONFIG_USB_STORAGE_ISD200=m
CONFIG_USB_STORAGE_USBAT=m
CONFIG_USB_STORAGE_SDDR09=m
CONFIG_USB_STORAGE_SDDR55=m
CONFIG_USB_STORAGE_JUMPSHOT=m
CONFIG_USB_STORAGE_ALAUDA=m
CONFIG_USB_STORAGE_ONETOUCH=m
CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
# CONFIG_USB_UAS is not set
# CONFIG_USB_LIBUSUAL is not set

#
# USB Imaging devices
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m

#
# USB port drivers
#
CONFIG_USB_USS720=m
CONFIG_USB_SERIAL=m
CONFIG_USB_EZUSB=y
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
# CONFIG_USB_SERIAL_CP210X is not set
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_FUNSOFT=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
# CONFIG_USB_SERIAL_IR is not set
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
# CONFIG_USB_SERIAL_IUU is not set
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_MOS7720=m
# CONFIG_USB_SERIAL_MOS7715_PARPORT is not set
CONFIG_USB_SERIAL_MOS7840=m
CONFIG_USB_SERIAL_MOTOROLA=m
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QCAUX=m
# CONFIG_USB_SERIAL_QUALCOMM is not set
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_HP4X=m
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
# CONFIG_USB_SERIAL_SAMBA is not set
# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
# CONFIG_USB_SERIAL_SYMBOL is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OMNINET=m
# CONFIG_USB_SERIAL_OPTICON is not set
CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
# CONFIG_USB_SERIAL_ZIO is not set
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_DEBUG=m

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
CONFIG_USB_ADUTUX=m
CONFIG_USB_SEVSEG=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_LED=m
CONFIG_USB_CYPRESS_CY7C63=m
CONFIG_USB_CYTHERM=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_FTDI_ELAN=m
CONFIG_USB_APPLEDISPLAY=m
CONFIG_USB_SISUSBVGA=m
# CONFIG_USB_SISUSBVGA_CON is not set
CONFIG_USB_LD=m
CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_IOWARRIOR=m
# CONFIG_USB_TEST is not set
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_YUREX is not set
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
CONFIG_USB_UEAGLEATM=m
CONFIG_USB_XUSBATM=m
# CONFIG_USB_GADGET is not set

#
# OTG and related infrastructure
#
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_NOP_USB_XCEIV is not set
# CONFIG_UWB is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_SDIO_UART=m
# CONFIG_MMC_TEST is not set

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
# CONFIG_MMC_RICOH_MMC is not set
# CONFIG_MMC_SDHCI_PLTFM is not set
CONFIG_MMC_WBSD=m
CONFIG_MMC_TIFM_SD=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_CB710 is not set
# CONFIG_MMC_VIA_SDMMC is not set
# CONFIG_MMC_USHC is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y

#
# LED drivers
#
# CONFIG_LEDS_ALIX2 is not set
CONFIG_LEDS_PCA9532=m
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_GPIO_PLATFORM=y
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_LP5521 is not set
# CONFIG_LEDS_LP5523 is not set
# CONFIG_LEDS_CLEVO_MAIL is not set
CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_DA903X=m
# CONFIG_LEDS_DAC124S085 is not set
# CONFIG_LEDS_REGULATOR is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_INTEL_SS4200 is not set
# CONFIG_LEDS_LT3593 is not set
# CONFIG_LEDS_DELL_NETBOOKS is not set
CONFIG_LEDS_TRIGGERS=y

#
# LED Triggers
#
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
# CONFIG_LEDS_TRIGGER_GPIO is not set
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
CONFIG_EDAC=y

#
# Reporting subsystems
#
# CONFIG_EDAC_DEBUG is not set
CONFIG_EDAC_MM_EDAC=m
CONFIG_EDAC_E752X=m
CONFIG_EDAC_I82975X=m
CONFIG_EDAC_I3000=m
# CONFIG_EDAC_I3200 is not set
CONFIG_EDAC_X38=m
# CONFIG_EDAC_I5400 is not set
# CONFIG_EDAC_I7CORE is not set
CONFIG_EDAC_I5000=m
CONFIG_EDAC_I5100=m
# CONFIG_EDAC_I7300 is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_TEST=m

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_DS1307=m
CONFIG_RTC_DRV_DS1374=m
CONFIG_RTC_DRV_DS1672=m
# CONFIG_RTC_DRV_DS3232 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_RS5C372=m
CONFIG_RTC_DRV_ISL1208=m
# CONFIG_RTC_DRV_ISL12022 is not set
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
# CONFIG_RTC_DRV_BQ32K is not set
# CONFIG_RTC_DRV_S35390A is not set
CONFIG_RTC_DRV_FM3130=m
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_RX8025 is not set

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_DS1305=m
CONFIG_RTC_DRV_DS1390=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_R9701 is not set
CONFIG_RTC_DRV_RS5C348=m
CONFIG_RTC_DRV_DS3234=m
# CONFIG_RTC_DRV_PCF2123 is not set

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
CONFIG_RTC_DRV_DS1286=m
# CONFIG_RTC_DRV_DS1511 is not set
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_MSM6242 is not set
CONFIG_RTC_DRV_BQ4802=m
# CONFIG_RTC_DRV_RP5C01 is not set
CONFIG_RTC_DRV_V3020=m

#
# on-CPU RTC drivers
#
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set

#
# DMA Devices
#
# CONFIG_INTEL_MID_DMAC is not set
CONFIG_INTEL_IOATDMA=m
# CONFIG_TIMB_DMA is not set
# CONFIG_PCH_DMA is not set
CONFIG_DMA_ENGINE=y

#
# DMA Clients
#
CONFIG_NET_DMA=y
# CONFIG_ASYNC_TX_DMA is not set
# CONFIG_DMATEST is not set
CONFIG_DCA=m
CONFIG_AUXDISPLAY=y
CONFIG_KS0108=m
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_CFAG12864B=m
CONFIG_CFAG12864B_RATE=20
CONFIG_UIO=m
CONFIG_UIO_CIF=m
CONFIG_UIO_PDRV=m
CONFIG_UIO_PDRV_GENIRQ=m
# CONFIG_UIO_AEC is not set
CONFIG_UIO_SERCOS3=m
# CONFIG_UIO_PCI_GENERIC is not set
# CONFIG_UIO_NETX is not set
# CONFIG_STAGING is not set
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
# CONFIG_ACERHDF is not set
CONFIG_ASUS_LAPTOP=m
# CONFIG_DELL_LAPTOP is not set
# CONFIG_DELL_WMI is not set
CONFIG_FUJITSU_LAPTOP=m
# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
CONFIG_HP_WMI=m
CONFIG_MSI_LAPTOP=m
CONFIG_PANASONIC_LAPTOP=m
CONFIG_COMPAL_LAPTOP=m
CONFIG_SONY_LAPTOP=m
CONFIG_SONYPI_COMPAT=y
# CONFIG_IDEAPAD_LAPTOP is not set
CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
# CONFIG_THINKPAD_ACPI_DEBUG is not set
# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
CONFIG_SENSORS_HDAPS=m
CONFIG_INTEL_MENLOW=m
CONFIG_EEEPC_LAPTOP=m
# CONFIG_EEEPC_WMI is not set
CONFIG_ACPI_WMI=y
# CONFIG_MSI_WMI is not set
# CONFIG_ACPI_ASUS is not set
# CONFIG_TOPSTAR_LAPTOP is not set
CONFIG_ACPI_TOSHIBA=m
# CONFIG_TOSHIBA_BT_RFKILL is not set
# CONFIG_ACPI_CMPC is not set
# CONFIG_INTEL_IPS is not set
# CONFIG_IBM_RTL is not set

#
# Firmware Drivers
#
CONFIG_EDD=y
CONFIG_EDD_OFF=y
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_EFI_VARS=y
CONFIG_DELL_RBU=m
CONFIG_DCDBAS=m
CONFIG_DMIID=y
CONFIG_ISCSI_IBFT_FIND=y
CONFIG_ISCSI_IBFT=m

#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=m
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=m
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
# CONFIG_JFS_DEBUG is not set
CONFIG_JFS_STATISTICS=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=m
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
# CONFIG_XFS_DEBUG is not set
CONFIG_GFS2_FS=m
# CONFIG_GFS2_FS_LOCKING_DLM is not set
CONFIG_OCFS2_FS=m
CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
# CONFIG_OCFS2_DEBUG_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_EXPORTFS=m
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_FANOTIFY is not set
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=m
CONFIG_QFMT_V1=m
CONFIG_QFMT_V2=m
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=y
# CONFIG_CUSE is not set
CONFIG_GENERIC_ACL=y

#
# Caches
#
# CONFIG_FSCACHE is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
CONFIG_UDF_NLS=y

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_CONFIGFS_FS=m
CONFIG_MISC_FILESYSTEMS=y
CONFIG_ADFS_FS=m
# CONFIG_ADFS_FS_RW is not set
CONFIG_AFFS_FS=m
CONFIG_ECRYPT_FS=y
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_BEFS_FS=m
# CONFIG_BEFS_DEBUG is not set
CONFIG_BFS_FS=m
CONFIG_EFS_FS=m
CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
# CONFIG_JFFS2_CMODE_NONE is not set
# CONFIG_JFFS2_CMODE_PRIORITY is not set
# CONFIG_JFFS2_CMODE_SIZE is not set
CONFIG_JFFS2_CMODE_FAVOURLZO=y
CONFIG_UBIFS_FS=m
CONFIG_UBIFS_FS_XATTR=y
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
# CONFIG_UBIFS_FS_DEBUG is not set
# CONFIG_LOGFS is not set
CONFIG_CRAMFS=y
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_XATTR is not set
# CONFIG_SQUASHFS_LZO is not set
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=m
CONFIG_MINIX_FS=m
CONFIG_OMFS_FS=m
CONFIG_HPFS_FS=m
CONFIG_QNX4FS_FS=m
CONFIG_ROMFS_FS=m
CONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_SYSV_FS=m
CONFIG_UFS_FS=m
# CONFIG_UFS_FS_WRITE is not set
# CONFIG_UFS_DEBUG is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFS_USE_NEW_IDMAPPER is not set
CONFIG_NFSD=m
CONFIG_NFSD_DEPRECATED=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_CEPH_FS is not set
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
CONFIG_CIFS_WEAK_PW_HASH=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG2 is not set
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_EXPERIMENTAL=y
CONFIG_NCP_FS=m
CONFIG_NCPFS_PACKET_SIGNING=y
CONFIG_NCPFS_IOCTL_LOCKING=y
CONFIG_NCPFS_STRONG=y
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_OS2_NS=y
# CONFIG_NCPFS_SMALLDOS is not set
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_EXTRAS=y
CONFIG_CODA_FS=m
CONFIG_AFS_FS=m
# CONFIG_AFS_DEBUG is not set
CONFIG_9P_FS=m
# CONFIG_9P_FS_POSIX_ACL is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
# CONFIG_ACORN_PARTITION_CUMANA is not set
# CONFIG_ACORN_PARTITION_EESOX is not set
CONFIG_ACORN_PARTITION_ICS=y
# CONFIG_ACORN_PARTITION_ADFS is not set
# CONFIG_ACORN_PARTITION_POWERTEC is not set
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="cp437"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
CONFIG_DLM=m
# CONFIG_DLM_DEBUG is not set

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
# CONFIG_LOCKUP_DETECTOR is not set
# CONFIG_HARDLOCKUP_DETECTOR is not set
CONFIG_DETECT_HUNG_TASK=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHEDSTATS=y
CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
CONFIG_BKL=y
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_VIRTUAL is not set
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_TEST_LIST_SORT is not set
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_DEBUG_CREDENTIALS is not set
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_LKDTM is not set
# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
# CONFIG_FAULT_INJECTION is not set
CONFIG_LATENCYTOP=y
CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_RING_BUFFER_ALLOW_SWAP=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_FTRACE_SYSCALLS is not set
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not set
# CONFIG_STACK_TRACER is not set
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_KPROBE_EVENT=y
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_MMIOTRACE is not set
# CONFIG_RING_BUFFER_BENCHMARK is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_ASYNC_RAID6_TEST is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS is not set
# CONFIG_KGDB_LOW_LEVEL_TRAP is not set
# CONFIG_KGDB_KDB is not set
CONFIG_HAVE_ARCH_KMEMCHECK=y
# CONFIG_KMEMCHECK is not set
CONFIG_STRICT_DEVMEM=y
# CONFIG_X86_VERBOSE_BOOTUP is not set
CONFIG_EARLY_PRINTK=y
# CONFIG_EARLY_PRINTK_DBGP is not set
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
# CONFIG_X86_PTDUMP is not set
CONFIG_DEBUG_RODATA=y
# CONFIG_DEBUG_RODATA_TEST is not set
# CONFIG_DEBUG_NX_TEST is not set
# CONFIG_IOMMU_DEBUG is not set
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IO_DELAY_TYPE_NONE=3
# CONFIG_IO_DELAY_0X80 is not set
CONFIG_IO_DELAY_0XED=y
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_DEFAULT_IO_DELAY_TYPE=1
# CONFIG_DEBUG_BOOT_PARAMS is not set
# CONFIG_CPA_DEBUG is not set
CONFIG_OPTIMIZE_INLINING=y
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set

#
# Security options
#
CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
# CONFIG_SECURITY_PATH is not set
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
CONFIG_SECURITY_SMACK=y
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
# CONFIG_IMA is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY="selinux"
CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
CONFIG_ASYNC_XOR=m
CONFIG_ASYNC_PQ=m
CONFIG_ASYNC_RAID6_RECOV=m
CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=m
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
# CONFIG_CRYPTO_PCRYPT is not set
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m

#
# Authenticated Encryption with Associated Data
#
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=m

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=m
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XTS=m

#
# Hash modes
#
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=m
# CONFIG_CRYPTO_VMAC is not set

#
# Digest
#
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_CRC32C_INTEL=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_RMD128=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_RMD256=m
CONFIG_CRYPTO_RMD320=m
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set

#
# Ciphers
#
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_AES_X86_64=m
# CONFIG_CRYPTO_AES_NI_INTEL is not set
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
CONFIG_CRYPTO_SALSA20_X86_64=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_TWOFISH_X86_64=m

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_ZLIB is not set
CONFIG_CRYPTO_LZO=m

#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_PADLOCK is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
# CONFIG_KVM_MMU_AUDIT is not set
# CONFIG_VHOST_NET is not set
CONFIG_VIRTIO=m
CONFIG_VIRTIO_RING=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=m
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
CONFIG_CRC7=m
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_REED_SOLOMON=m
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_NLATTR=y

[-- Attachment #3: klogd-segfault-2010-11-17-17-04.log --]
[-- Type: text/plain, Size: 65133 bytes --]

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.37-rc2+ (sarah@broadway) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) ) #110 SMP Wed Nov 17 14:46:49 PST 2010
[    0.000000] Command line: root=UUID=e4b17c15-bf6f-4c12-8ebf-8169eb566af8 ro  single
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009e800 (usable)
[    0.000000]  BIOS-e820: 000000000009e800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cdd80000 (usable)
[    0.000000]  BIOS-e820: 00000000cdd80000 - 00000000cdd8e000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cdd8e000 - 00000000cddd0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cddd0000 - 00000000cde00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved)
[    0.000000]  BIOS-e820: 0000000100000000 - 0000000230000000 (usable)
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] DMI present.
[    0.000000] DMI: P5Q-EM/System Product Name, BIOS 2001    02/26/2009
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[    0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
[    0.000000] No AGP bridge found
[    0.000000] last_pfn = 0x230000 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-DFFFF write-protect
[    0.000000]   E0000-EFFFF write-through
[    0.000000]   F0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000 mask E00000000 write-back
[    0.000000]   1 base 200000000 mask FE0000000 write-back
[    0.000000]   2 base 220000000 mask FF0000000 write-back
[    0.000000]   3 base 0D0000000 mask FF0000000 uncachable
[    0.000000]   4 base 0E0000000 mask FE0000000 uncachable
[    0.000000]   5 base 0CDE00000 mask FFFE00000 uncachable
[    0.000000]   6 base 0CE000000 mask FFE000000 uncachable
[    0.000000]   7 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] e820 update range: 00000000cde00000 - 0000000100000000 (usable) ==> (reserved)
[    0.000000] last_pfn = 0xcdd80 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [ffff8800000ff780] ff780
[    0.000000] Scanning 0 areas for low memory corruption
[    0.000000] initial memory mapped : 0 - 20000000
[    0.000000] init_memory_mapping: 0000000000000000-00000000cdd80000
[    0.000000]  0000000000 - 00cdc00000 page 2M
[    0.000000]  00cdc00000 - 00cdd80000 page 4k
[    0.000000] kernel direct mapping tables up to cdd80000 @ 1fffa000-20000000
[    0.000000] init_memory_mapping: 0000000100000000-0000000230000000
[    0.000000]  0100000000 - 0230000000 page 2M
[    0.000000] kernel direct mapping tables up to 230000000 @ cdd76000-cdd80000
[    0.000000] RAMDISK: 34dff000 - 37ff0000
[    0.000000] ACPI: RSDP 00000000000fb5b0 00014 (v00 ACPIAM)
[    0.000000] ACPI: RSDT 00000000cdd80000 00040 (v01 A_M_I_ OEMRSDT  02000926 MSFT 00000097)
[    0.000000] ACPI: FACP 00000000cdd80200 00084 (v02 A_M_I_ OEMFACP  02000926 MSFT 00000097)
[    0.000000] ACPI: DSDT 00000000cdd80440 090F1 (v01  A0982 A0982066 00000066 INTL 20060113)
[    0.000000] ACPI: FACS 00000000cdd8e000 00040
[    0.000000] ACPI: APIC 00000000cdd80390 0006C (v01 A_M_I_ OEMAPIC  02000926 MSFT 00000097)
[    0.000000] ACPI: MCFG 00000000cdd80400 0003C (v01 A_M_I_ OEMMCFG  02000926 MSFT 00000097)
[    0.000000] ACPI: OEMB 00000000cdd8e040 00089 (v01 A_M_I_ AMI_OEM  02000926 MSFT 00000097)
[    0.000000] ACPI: HPET 00000000cdd89540 00038 (v01 A_M_I_ OEMHPET  02000926 MSFT 00000097)
[    0.000000] ACPI: GSCI 00000000cdd8e0d0 02024 (v01 A_M_I_ GMCHSCI  02000926 MSFT 00000097)
[    0.000000] ACPI: OSFR 00000000cdd89580 000B0 (v01 A_M_I_ OEMOSFR  02000926 MSFT 00000097)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000]  [ffffea0000000000-ffffea0007bfffff] PMD -> [ffff8800bc000000-ffff8800c31fffff] on node 0
[    0.000000] Zone PFN ranges:
[    0.000000]   DMA      0x00000010 -> 0x00001000
[    0.000000]   DMA32    0x00001000 -> 0x00100000
[    0.000000]   Normal   0x00100000 -> 0x00230000
[    0.000000] Movable zone start PFN for each node
[    0.000000] early_node_map[3] active PFN ranges
[    0.000000]     0: 0x00000010 -> 0x0000009e
[    0.000000]     0: 0x00000100 -> 0x000cdd80
[    0.000000]     0: 0x00100000 -> 0x00230000
[    0.000000] On node 0 totalpages: 2088206
[    0.000000]   DMA zone: 56 pages used for memmap
[    0.000000]   DMA zone: 6 pages reserved
[    0.000000]   DMA zone: 3920 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 14280 pages used for memmap
[    0.000000]   DMA32 zone: 824760 pages, LIFO batch:31
[    0.000000]   Normal zone: 17024 pages used for memmap
[    0.000000]   Normal zone: 1228160 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x808
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled)
[    0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0])
[    0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ2 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a301 base: 0xfed00000
[    0.000000] SMP: Allowing 4 CPUs, 0 hotplug CPUs
[    0.000000] nr_irqs_gsi: 40
[    0.000000] PM: Registered nosave memory: 000000000009e000 - 000000000009f000
[    0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
[    0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e4000
[    0.000000] PM: Registered nosave memory: 00000000000e4000 - 0000000000100000
[    0.000000] PM: Registered nosave memory: 00000000cdd80000 - 00000000cdd8e000
[    0.000000] PM: Registered nosave memory: 00000000cdd8e000 - 00000000cddd0000
[    0.000000] PM: Registered nosave memory: 00000000cddd0000 - 00000000cde00000
[    0.000000] PM: Registered nosave memory: 00000000cde00000 - 00000000fee00000
[    0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000
[    0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000fff00000
[    0.000000] PM: Registered nosave memory: 00000000fff00000 - 0000000100000000
[    0.000000] Allocating PCI resources starting at cde00000 (gap: cde00000:31000000)
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1
[    0.000000] PERCPU: Embedded 27 pages/cpu @ffff8800cda00000 s81600 r8192 d20800 u524288
[    0.000000] pcpu-alloc: s81600 r8192 d20800 u524288 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 2056840
[    0.000000] Kernel command line: root=UUID=e4b17c15-bf6f-4c12-8ebf-8169eb566af8 ro  single
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.000000] xsave/xrstor: enabled xstate_bv 0x3, cntxt size 0x240
[    0.000000] Checking aperture...
[    0.000000] No AGP bridge found
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 8092720k/9175040k available (5541k kernel code, 822216k absent, 260104k reserved, 5648k data, 600k init)
[    0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] 	RCU-based detection of stalled CPUs is disabled.
[    0.000000] NR_IRQS:2304
[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [tty0] enabled
[    0.000000] allocated 83886080 bytes of page_cgroup
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] hpet clockevent registered
[    0.000000] Fast TSC calibration using PIT
[    0.000000] Detected 2833.056 MHz processor.
[    0.004009] Calibrating delay loop (skipped), value calculated using timer frequency.. 5666.11 BogoMIPS (lpj=11332224)
[    0.004087] pid_max: default: 32768 minimum: 301
[    0.004140] Security Framework initialized
[    0.004180] SELinux:  Disabled at boot.
[    0.004227] Mount-cache hash table entries: 256
[    0.004372] Initializing cgroup subsys ns
[    0.004410] ns_cgroup deprecated: consider using the 'clone_children' flag without the ns_cgroup.
[    0.004466] Initializing cgroup subsys cpuacct
[    0.004505] Initializing cgroup subsys memory
[    0.004546] Initializing cgroup subsys freezer
[    0.004605] CPU: Physical Processor ID: 0
[    0.004641] CPU: Processor Core ID: 0
[    0.004676] using mwait in idle threads.
[    0.004712] Performance Events: PEBS fmt0+, Core2 events, Intel PMU driver.
[    0.004807] ... version:                2
[    0.004842] ... bit width:              40
[    0.004878] ... generic registers:      2
[    0.004914] ... value mask:             000000ffffffffff
[    0.004952] ... max period:             000000007fffffff
[    0.004990] ... fixed-purpose events:   3
[    0.005026] ... event mask:             0000000700000003
[    0.006053] ACPI: Core revision 20101013
[    0.016045] Setting APIC routing to flat
[    0.016376] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.057862] CPU0: Intel(R) Core(TM)2 Quad CPU    Q9550  @ 2.83GHz stepping 0a
[    0.060000] Booting Node   0, Processors  #1 #2 #3 Ok.
[    0.332006] Brought up 4 CPUs
[    0.332051] Total of 4 processors activated (22741.55 BogoMIPS).
[    0.334450] regulator: core version 0.5
[    0.334450] regulator: dummy: 
[    0.334450] Time:  1:02:52  Date: 11/18/10
[    0.334450] NET: Registered protocol family 16
[    0.334450] ACPI: bus type pci registered
[    0.334450] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.334450] PCI: not using MMCONFIG
[    0.334450] PCI: Using configuration type 1 for base access
[    0.336033] bio: create slab <bio-0> at 0
[    0.336852] ACPI: EC: Look up EC in DSDT
[    0.337763] ACPI: Executed 1 blocks of module-level executable AML code
[    0.345787] ACPI: Interpreter enabled
[    0.345823] ACPI: (supports S0 S1 S3 S4 S5)
[    0.345956] ACPI: Using IOAPIC for interrupt routing
[    0.346020] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.347165] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources
[    0.384863] ACPI: No dock devices found.
[    0.384900] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.385058] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    0.385306] pci_root PNP0A08:00: host bridge window [io  0x0000-0x0cf7]
[    0.385347] pci_root PNP0A08:00: host bridge window [io  0x0d00-0xffff]
[    0.385388] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff]
[    0.385442] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff]
[    0.385496] pci_root PNP0A08:00: host bridge window [mem 0xcde00000-0xdfffffff]
[    0.385549] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xffffffff]
[    0.385611] pci 0000:00:00.0: [8086:2e20] type 0 class 0x000600
[    0.385640] pci 0000:00:01.0: [8086:2e21] type 1 class 0x000604
[    0.385662] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
[    0.385664] pci 0000:00:01.0: PME# disabled
[    0.385674] pci 0000:00:02.0: [8086:2e22] type 0 class 0x000300
[    0.385683] pci 0000:00:02.0: reg 10: [mem 0xfe400000-0xfe7fffff 64bit]
[    0.385689] pci 0000:00:02.0: reg 18: [mem 0xd0000000-0xdfffffff 64bit pref]
[    0.385693] pci 0000:00:02.0: reg 20: [io  0xcc00-0xcc07]
[    0.385736] pci 0000:00:1a.0: [8086:3a37] type 0 class 0x000c03
[    0.385770] pci 0000:00:1a.0: reg 20: [io  0xc480-0xc49f]
[    0.385805] pci 0000:00:1a.1: [8086:3a38] type 0 class 0x000c03
[    0.385840] pci 0000:00:1a.1: reg 20: [io  0xc800-0xc81f]
[    0.385875] pci 0000:00:1a.2: [8086:3a39] type 0 class 0x000c03
[    0.385909] pci 0000:00:1a.2: reg 20: [io  0xc880-0xc89f]
[    0.385951] pci 0000:00:1a.7: [8086:3a3c] type 0 class 0x000c03
[    0.385968] pci 0000:00:1a.7: reg 10: [mem 0xfe3fb000-0xfe3fb3ff]
[    0.386028] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold
[    0.386032] pci 0000:00:1a.7: PME# disabled
[    0.386050] pci 0000:00:1b.0: [8086:3a3e] type 0 class 0x000403
[    0.386062] pci 0000:00:1b.0: reg 10: [mem 0xfe3f4000-0xfe3f7fff 64bit]
[    0.386105] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.386108] pci 0000:00:1b.0: PME# disabled
[    0.386122] pci 0000:00:1c.0: [8086:3a40] type 1 class 0x000604
[    0.386164] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.386167] pci 0000:00:1c.0: PME# disabled
[    0.386185] pci 0000:00:1c.4: [8086:3a48] type 1 class 0x000604
[    0.386227] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold
[    0.386230] pci 0000:00:1c.4: PME# disabled
[    0.386245] pci 0000:00:1c.5: [8086:3a4a] type 1 class 0x000604
[    0.386288] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold
[    0.386291] pci 0000:00:1c.5: PME# disabled
[    0.386308] pci 0000:00:1d.0: [8086:3a34] type 0 class 0x000c03
[    0.386343] pci 0000:00:1d.0: reg 20: [io  0xc000-0xc01f]
[    0.386377] pci 0000:00:1d.1: [8086:3a35] type 0 class 0x000c03
[    0.386412] pci 0000:00:1d.1: reg 20: [io  0xc080-0xc09f]
[    0.386447] pci 0000:00:1d.2: [8086:3a36] type 0 class 0x000c03
[    0.386482] pci 0000:00:1d.2: reg 20: [io  0xc400-0xc41f]
[    0.386524] pci 0000:00:1d.7: [8086:3a3a] type 0 class 0x000c03
[    0.386541] pci 0000:00:1d.7: reg 10: [mem 0xfe3fa000-0xfe3fa3ff]
[    0.386601] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold
[    0.386605] pci 0000:00:1d.7: PME# disabled
[    0.386620] pci 0000:00:1e.0: [8086:244e] type 1 class 0x000604
[    0.386664] pci 0000:00:1f.0: [8086:3a16] type 0 class 0x000601
[    0.386730] pci 0000:00:1f.0: quirk: [io  0x0800-0x087f] claimed by ICH6 ACPI/GPIO/TCO
[    0.386786] pci 0000:00:1f.0: quirk: [io  0x0500-0x053f] claimed by ICH6 GPIO
[    0.386829] pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 0294 (mask 0003)
[    0.386916] pci 0000:00:1f.2: [8086:3a22] type 0 class 0x000106
[    0.386931] pci 0000:00:1f.2: reg 10: [io  0xb880-0xb887]
[    0.386937] pci 0000:00:1f.2: reg 14: [io  0xb800-0xb803]
[    0.386943] pci 0000:00:1f.2: reg 18: [io  0xb480-0xb487]
[    0.386950] pci 0000:00:1f.2: reg 1c: [io  0xb400-0xb403]
[    0.386956] pci 0000:00:1f.2: reg 20: [io  0xb080-0xb09f]
[    0.386963] pci 0000:00:1f.2: reg 24: [mem 0xfe3f8000-0xfe3f87ff]
[    0.386989] pci 0000:00:1f.2: PME# supported from D3hot
[    0.386991] pci 0000:00:1f.2: PME# disabled
[    0.387004] pci 0000:00:1f.3: [8086:3a30] type 0 class 0x000c05
[    0.387016] pci 0000:00:1f.3: reg 10: [mem 0xfe3f9000-0xfe3f90ff 64bit]
[    0.387033] pci 0000:00:1f.3: reg 20: [io  0x0400-0x041f]
[    0.387083] pci 0000:01:00.0: [1033:0194] type 0 class 0x000c03
[    0.387097] pci 0000:01:00.0: reg 10: [mem 0xfe8fe000-0xfe8fffff 64bit]
[    0.387152] pci 0000:01:00.0: PME# supported from D0 D3hot
[    0.387155] pci 0000:01:00.0: PME# disabled
[    0.387181] pci 0000:00:01.0: PCI bridge to [bus 01-01]
[    0.387221] pci 0000:00:01.0:   bridge window [io  0xf000-0x0000] (disabled)
[    0.387223] pci 0000:00:01.0:   bridge window [mem 0xfe800000-0xfe8fffff]
[    0.387226] pci 0000:00:01.0:   bridge window [mem 0xfff00000-0x000fffff pref] (disabled)
[    0.387258] pci 0000:00:1c.0: PCI bridge to [bus 04-04]
[    0.387298] pci 0000:00:1c.0:   bridge window [io  0xf000-0x0000] (disabled)
[    0.387301] pci 0000:00:1c.0:   bridge window [mem 0xfff00000-0x000fffff] (disabled)
[    0.387306] pci 0000:00:1c.0:   bridge window [mem 0xfdf00000-0xfdffffff 64bit pref]
[    0.387351] pci 0000:03:00.0: [11ab:6101] type 0 class 0x000101
[    0.387365] pci 0000:03:00.0: reg 10: [io  0xec00-0xec07]
[    0.387375] pci 0000:03:00.0: reg 14: [io  0xe880-0xe883]
[    0.387386] pci 0000:03:00.0: reg 18: [io  0xe800-0xe807]
[    0.387396] pci 0000:03:00.0: reg 1c: [io  0xe480-0xe483]
[    0.387406] pci 0000:03:00.0: reg 20: [io  0xe400-0xe40f]
[    0.387417] pci 0000:03:00.0: reg 24: [mem 0xfeaffc00-0xfeaffdff]
[    0.387455] pci 0000:03:00.0: supports D1
[    0.387456] pci 0000:03:00.0: PME# supported from D0 D1 D3hot
[    0.387460] pci 0000:03:00.0: PME# disabled
[    0.387474] pci 0000:03:00.0: disabling ASPM on pre-1.1 PCIe device.  You can enable it with 'pcie_aspm=force'
[    0.387538] pci 0000:00:1c.4: PCI bridge to [bus 03-03]
[    0.387578] pci 0000:00:1c.4:   bridge window [io  0xe000-0xefff]
[    0.387581] pci 0000:00:1c.4:   bridge window [mem 0xfea00000-0xfeafffff]
[    0.387586] pci 0000:00:1c.4:   bridge window [mem 0xfff00000-0x000fffff pref] (disabled)
[    0.387631] pci 0000:02:00.0: [10ec:8168] type 0 class 0x000200
[    0.387645] pci 0000:02:00.0: reg 10: [io  0xd800-0xd8ff]
[    0.387670] pci 0000:02:00.0: reg 18: [mem 0xfe9ff000-0xfe9fffff 64bit]
[    0.387686] pci 0000:02:00.0: reg 20: [mem 0xfdef0000-0xfdefffff 64bit pref]
[    0.387696] pci 0000:02:00.0: reg 30: [mem 0xfe9c0000-0xfe9dffff pref]
[    0.387730] pci 0000:02:00.0: supports D1 D2
[    0.387732] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.387736] pci 0000:02:00.0: PME# disabled
[    0.392015] pci 0000:00:1c.5: PCI bridge to [bus 02-02]
[    0.392058] pci 0000:00:1c.5:   bridge window [io  0xd000-0xdfff]
[    0.392062] pci 0000:00:1c.5:   bridge window [mem 0xfe900000-0xfe9fffff]
[    0.392068] pci 0000:00:1c.5:   bridge window [mem 0xfde00000-0xfdefffff 64bit pref]
[    0.392115] pci 0000:05:03.0: [11c1:5811] type 0 class 0x000c00
[    0.392129] pci 0000:05:03.0: reg 10: [mem 0xfebff000-0xfebfffff]
[    0.392183] pci 0000:05:03.0: supports D1 D2
[    0.392185] pci 0000:05:03.0: PME# supported from D0 D1 D2 D3hot
[    0.392188] pci 0000:05:03.0: PME# disabled
[    0.392222] pci 0000:00:1e.0: PCI bridge to [bus 05-05] (subtractive decode)
[    0.392266] pci 0000:00:1e.0:   bridge window [io  0xf000-0x0000] (disabled)
[    0.392269] pci 0000:00:1e.0:   bridge window [mem 0xfeb00000-0xfebfffff]
[    0.392273] pci 0000:00:1e.0:   bridge window [mem 0xfff00000-0x000fffff pref] (disabled)
[    0.392275] pci 0000:00:1e.0:   bridge window [io  0x0000-0x0cf7] (subtractive decode)
[    0.392277] pci 0000:00:1e.0:   bridge window [io  0x0d00-0xffff] (subtractive decode)
[    0.392279] pci 0000:00:1e.0:   bridge window [mem 0x000a0000-0x000bffff] (subtractive decode)
[    0.392281] pci 0000:00:1e.0:   bridge window [mem 0x000d0000-0x000dffff] (subtractive decode)
[    0.392283] pci 0000:00:1e.0:   bridge window [mem 0xcde00000-0xdfffffff] (subtractive decode)
[    0.392285] pci 0000:00:1e.0:   bridge window [mem 0xf0000000-0xffffffff] (subtractive decode)
[    0.392301] pci_bus 0000:00: on NUMA node 0
[    0.392303] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
[    0.392387] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT]
[    0.392428] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT]
[    0.392458] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P8._PRT]
[    0.392485] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P9._PRT]
[    0.392525] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT]
[    0.400145] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 *10 11 12 14 15)
[    0.400427] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 *11 12 14 15)
[    0.400708] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 10 11 12 14 *15)
[    0.400989] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 *5 6 7 10 11 12 14 15)
[    0.401271] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled.
[    0.401599] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 10 11 12 *14 15)
[    0.401879] ACPI: PCI Interrupt Link [LNKG] (IRQs *3 4 5 6 7 10 11 12 14 15)
[    0.402159] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *7 10 11 12 14 15)
[    0.402445] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[    0.402508] vgaarb: loaded
[    0.402596] SCSI subsystem initialized
[    0.402638] libata version 3.00 loaded.
[    0.402638] wmi: Mapper loaded
[    0.402638] PCI: Using ACPI for IRQ routing
[    0.402638] PCI: pci_cache_line_size set to 64 bytes
[    0.402638] reserve RAM buffer: 000000000009e800 - 000000000009ffff 
[    0.402638] reserve RAM buffer: 00000000cdd80000 - 00000000cfffffff 
[    0.402638] Bluetooth: Core ver 2.15
[    0.402638] NET: Registered protocol family 31
[    0.402638] Bluetooth: HCI device and connection manager initialized
[    0.402638] Bluetooth: HCI socket layer initialized
[    0.402638] NET: Registered protocol family 8
[    0.402638] NET: Registered protocol family 20
[    0.402638] NetLabel: Initializing
[    0.402638] NetLabel:  domain hash size = 128
[    0.402638] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.402638] NetLabel:  unlabeled traffic allowed by default
[    0.404023] HPET: 4 timers in total, 0 timers will be used for per-cpu timer
[    0.404067] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0
[    0.404189] hpet0: 4 comparators, 64-bit 14.318180 MHz counter
[    0.412018] Switching to clocksource tsc
[    0.413265] pnp: PnP ACPI init
[    0.413308] ACPI: bus type pnp registered
[    0.413446] pnp 00:00: [bus 00-ff]
[    0.413448] pnp 00:00: [io  0x0cf8-0x0cff]
[    0.413449] pnp 00:00: [io  0x0000-0x0cf7 window]
[    0.413451] pnp 00:00: [io  0x0d00-0xffff window]
[    0.413452] pnp 00:00: [mem 0x000a0000-0x000bffff window]
[    0.413454] pnp 00:00: [mem 0x000d0000-0x000dffff window]
[    0.413456] pnp 00:00: [mem 0xcde00000-0xdfffffff window]
[    0.413457] pnp 00:00: [mem 0xf0000000-0xffffffff window]
[    0.413491] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active)
[    0.413498] pnp 00:01: [mem 0xfed14000-0xfed19fff]
[    0.413526] pnp 00:01: Plug and Play ACPI device, IDs PNP0c01 (active)
[    0.413549] pnp 00:02: [dma 4]
[    0.413551] pnp 00:02: [io  0x0000-0x000f]
[    0.413552] pnp 00:02: [io  0x0081-0x0083]
[    0.413554] pnp 00:02: [io  0x0087]
[    0.413555] pnp 00:02: [io  0x0089-0x008b]
[    0.413556] pnp 00:02: [io  0x008f]
[    0.413558] pnp 00:02: [io  0x00c0-0x00df]
[    0.413577] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active)
[    0.413584] pnp 00:03: [io  0x0070-0x0071]
[    0.413591] pnp 00:03: [irq 8]
[    0.413608] pnp 00:03: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.413614] pnp 00:04: [io  0x0061]
[    0.413633] pnp 00:04: Plug and Play ACPI device, IDs PNP0800 (active)
[    0.413639] pnp 00:05: [io  0x00f0-0x00ff]
[    0.413643] pnp 00:05: [irq 13]
[    0.413661] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active)
[    0.413951] pnp 00:06: [io  0x03f0-0x03f5]
[    0.413953] pnp 00:06: [io  0x03f7]
[    0.413957] pnp 00:06: [irq 6]
[    0.413958] pnp 00:06: [dma 2]
[    0.413998] pnp 00:06: Plug and Play ACPI device, IDs PNP0700 (active)
[    0.414076] pnp 00:07: [io  0x0000-0xffffffffffffffff disabled]
[    0.414078] pnp 00:07: [io  0x0000-0xffffffffffffffff disabled]
[    0.414079] pnp 00:07: [io  0x0290-0x029f]
[    0.414111] pnp 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.414248] pnp 00:08: [io  0x0010-0x001f]
[    0.414249] pnp 00:08: [io  0x0022-0x003f]
[    0.414250] pnp 00:08: [io  0x0044-0x004d]
[    0.414252] pnp 00:08: [io  0x0050-0x005f]
[    0.414253] pnp 00:08: [io  0x0062-0x0063]
[    0.414254] pnp 00:08: [io  0x0065-0x006f]
[    0.414256] pnp 00:08: [io  0x0072-0x007f]
[    0.414257] pnp 00:08: [io  0x0080]
[    0.414258] pnp 00:08: [io  0x0084-0x0086]
[    0.414259] pnp 00:08: [io  0x0088]
[    0.414261] pnp 00:08: [io  0x008c-0x008e]
[    0.414262] pnp 00:08: [io  0x0090-0x009f]
[    0.414263] pnp 00:08: [io  0x00a2-0x00bf]
[    0.414265] pnp 00:08: [io  0x00e0-0x00ef]
[    0.414266] pnp 00:08: [io  0x04d0-0x04d1]
[    0.414267] pnp 00:08: [io  0x0800-0x087f]
[    0.414269] pnp 00:08: [io  0x0400-0x03ff disabled]
[    0.414270] pnp 00:08: [io  0x0500-0x057f]
[    0.414272] pnp 00:08: [mem 0xfed08000-0xfed08fff]
[    0.414273] pnp 00:08: [mem 0xfed1c000-0xfed1ffff]
[    0.414274] pnp 00:08: [mem 0xfed20000-0xfed3ffff]
[    0.414276] pnp 00:08: [mem 0xfed50000-0xfed8ffff]
[    0.414326] pnp 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.414391] pnp 00:09: [mem 0xfed00000-0xfed003ff]
[    0.414412] pnp 00:09: Plug and Play ACPI device, IDs PNP0103 (active)
[    0.414464] pnp 00:0a: [mem 0xffb00000-0xffbfffff]
[    0.414466] pnp 00:0a: [mem 0xfff00000-0xffffffff]
[    0.414486] pnp 00:0a: Plug and Play ACPI device, IDs INT0800 (active)
[    0.414541] pnp 00:0b: [mem 0xffc00000-0xffefffff]
[    0.414574] pnp 00:0b: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.414803] pnp 00:0c: [io  0x03f8-0x03ff]
[    0.414807] pnp 00:0c: [irq 4]
[    0.414808] pnp 00:0c: [dma 0 disabled]
[    0.414855] pnp 00:0c: Plug and Play ACPI device, IDs PNP0501 (active)
[    0.414924] pnp 00:0d: [io  0x0000-0xffffffffffffffff disabled]
[    0.414926] pnp 00:0d: [io  0x0000-0xffffffffffffffff disabled]
[    0.414928] pnp 00:0d: [mem 0xfec00000-0xfec00fff]
[    0.414930] pnp 00:0d: [mem 0xfee00000-0xfee00fff]
[    0.414965] pnp 00:0d: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.414988] pnp 00:0e: [io  0x0060]
[    0.414990] pnp 00:0e: [io  0x0064]
[    0.414993] pnp 00:0e: [irq 1]
[    0.415015] pnp 00:0e: Plug and Play ACPI device, IDs PNP0303 PNP030b (active)
[    0.415068] pnp 00:0f: [mem 0xe0000000-0xefffffff]
[    0.415102] pnp 00:0f: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.415275] pnp 00:10: [mem 0x00000000-0x0009ffff]
[    0.415277] pnp 00:10: [mem 0x000c0000-0x000cffff]
[    0.415278] pnp 00:10: [mem 0x000e0000-0x000fffff]
[    0.415280] pnp 00:10: [mem 0x00100000-0xcddfffff]
[    0.415281] pnp 00:10: [mem 0xe0000000-0xffffffff]
[    0.415322] pnp 00:10: Plug and Play ACPI device, IDs PNP0c01 (active)
[    0.415433] pnp: PnP ACPI: found 17 devices
[    0.415470] ACPI: ACPI bus type pnp unregistered
[    0.415512] system 00:01: [mem 0xfed14000-0xfed19fff] has been reserved
[    0.415556] system 00:07: [io  0x0290-0x029f] has been reserved
[    0.415598] system 00:08: [io  0x04d0-0x04d1] has been reserved
[    0.415638] system 00:08: [io  0x0800-0x087f] has been reserved
[    0.415678] system 00:08: [io  0x0500-0x057f] could not be reserved
[    0.415719] system 00:08: [mem 0xfed08000-0xfed08fff] has been reserved
[    0.415760] system 00:08: [mem 0xfed1c000-0xfed1ffff] has been reserved
[    0.415801] system 00:08: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.415842] system 00:08: [mem 0xfed50000-0xfed8ffff] has been reserved
[    0.415886] system 00:0b: [mem 0xffc00000-0xffefffff] has been reserved
[    0.415939] system 00:0d: [mem 0xfec00000-0xfec00fff] could not be reserved
[    0.415981] system 00:0d: [mem 0xfee00000-0xfee00fff] has been reserved
[    0.416024] system 00:0f: [mem 0xe0000000-0xefffffff] has been reserved
[    0.416075] system 00:10: [mem 0x00000000-0x0009ffff] could not be reserved
[    0.416117] system 00:10: [mem 0x000c0000-0x000cffff] has been reserved
[    0.416158] system 00:10: [mem 0x000e0000-0x000fffff] could not be reserved
[    0.416200] system 00:10: [mem 0x00100000-0xcddfffff] could not be reserved
[    0.416242] system 00:10: [mem 0xe0000000-0xffffffff] could not be reserved
[    0.421802] pci 0000:00:1c.0: BAR 8: assigned [mem 0xff800000-0xffbfffff]
[    0.421846] pci 0000:00:1c.4: BAR 9: assigned [mem 0xff600000-0xff7fffff 64bit pref]
[    0.421901] pci 0000:00:1c.0: BAR 7: assigned [io  0xf000-0xffff]
[    0.421941] pci 0000:00:01.0: PCI bridge to [bus 01-01]
[    0.421979] pci 0000:00:01.0:   bridge window [io  disabled]
[    0.422020] pci 0000:00:01.0:   bridge window [mem 0xfe800000-0xfe8fffff]
[    0.422061] pci 0000:00:01.0:   bridge window [mem pref disabled]
[    0.422102] pci 0000:00:1c.0: PCI bridge to [bus 04-04]
[    0.422141] pci 0000:00:1c.0:   bridge window [io  0xf000-0xffff]
[    0.422183] pci 0000:00:1c.0:   bridge window [mem 0xff800000-0xffbfffff]
[    0.422226] pci 0000:00:1c.0:   bridge window [mem 0xfdf00000-0xfdffffff 64bit pref]
[    0.422283] pci 0000:00:1c.4: PCI bridge to [bus 03-03]
[    0.422322] pci 0000:00:1c.4:   bridge window [io  0xe000-0xefff]
[    0.422364] pci 0000:00:1c.4:   bridge window [mem 0xfea00000-0xfeafffff]
[    0.422407] pci 0000:00:1c.4:   bridge window [mem 0xff600000-0xff7fffff 64bit pref]
[    0.422464] pci 0000:00:1c.5: PCI bridge to [bus 02-02]
[    0.422503] pci 0000:00:1c.5:   bridge window [io  0xd000-0xdfff]
[    0.422545] pci 0000:00:1c.5:   bridge window [mem 0xfe900000-0xfe9fffff]
[    0.422587] pci 0000:00:1c.5:   bridge window [mem 0xfde00000-0xfdefffff 64bit pref]
[    0.422645] pci 0000:00:1e.0: PCI bridge to [bus 05-05]
[    0.422683] pci 0000:00:1e.0:   bridge window [io  disabled]
[    0.422724] pci 0000:00:1e.0:   bridge window [mem 0xfeb00000-0xfebfffff]
[    0.422766] pci 0000:00:1e.0:   bridge window [mem pref disabled]
[    0.422815] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.422857] pci 0000:00:01.0: setting latency timer to 64
[    0.422861] pci 0000:00:1c.0: enabling device (0106 -> 0107)
[    0.422902] pci 0000:00:1c.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[    0.422945] pci 0000:00:1c.0: setting latency timer to 64
[    0.422949] pci 0000:00:1c.4: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[    0.422991] pci 0000:00:1c.4: setting latency timer to 64
[    0.422996] pci 0000:00:1c.5: PCI INT B -> GSI 16 (level, low) -> IRQ 16
[    0.423038] pci 0000:00:1c.5: setting latency timer to 64
[    0.423043] pci 0000:00:1e.0: setting latency timer to 64
[    0.423045] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7]
[    0.423047] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff]
[    0.423049] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff]
[    0.423050] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff]
[    0.423052] pci_bus 0000:00: resource 8 [mem 0xcde00000-0xdfffffff]
[    0.423053] pci_bus 0000:00: resource 9 [mem 0xf0000000-0xffffffff]
[    0.423055] pci_bus 0000:01: resource 1 [mem 0xfe800000-0xfe8fffff]
[    0.423057] pci_bus 0000:04: resource 0 [io  0xf000-0xffff]
[    0.423059] pci_bus 0000:04: resource 1 [mem 0xff800000-0xffbfffff]
[    0.423060] pci_bus 0000:04: resource 2 [mem 0xfdf00000-0xfdffffff 64bit pref]
[    0.423062] pci_bus 0000:03: resource 0 [io  0xe000-0xefff]
[    0.423064] pci_bus 0000:03: resource 1 [mem 0xfea00000-0xfeafffff]
[    0.423065] pci_bus 0000:03: resource 2 [mem 0xff600000-0xff7fffff 64bit pref]
[    0.423067] pci_bus 0000:02: resource 0 [io  0xd000-0xdfff]
[    0.423069] pci_bus 0000:02: resource 1 [mem 0xfe900000-0xfe9fffff]
[    0.423071] pci_bus 0000:02: resource 2 [mem 0xfde00000-0xfdefffff 64bit pref]
[    0.423072] pci_bus 0000:05: resource 1 [mem 0xfeb00000-0xfebfffff]
[    0.423074] pci_bus 0000:05: resource 4 [io  0x0000-0x0cf7]
[    0.423076] pci_bus 0000:05: resource 5 [io  0x0d00-0xffff]
[    0.423077] pci_bus 0000:05: resource 6 [mem 0x000a0000-0x000bffff]
[    0.423079] pci_bus 0000:05: resource 7 [mem 0x000d0000-0x000dffff]
[    0.423081] pci_bus 0000:05: resource 8 [mem 0xcde00000-0xdfffffff]
[    0.423082] pci_bus 0000:05: resource 9 [mem 0xf0000000-0xffffffff]
[    0.423104] NET: Registered protocol family 2
[    0.423182] IP route cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.423654] TCP established hash table entries: 262144 (order: 10, 4194304 bytes)
[    0.424899] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[    0.425301] TCP: Hash tables configured (established 262144 bind 65536)
[    0.425343] TCP reno registered
[    0.425379] UDP hash table entries: 4096 (order: 5, 131072 bytes)
[    0.425463] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes)
[    0.425623] NET: Registered protocol family 1
[    0.425676] pci 0000:00:02.0: Boot video device
[    0.425681] pci 0000:00:1a.0: uhci_check_and_reset_hc: legsup = 0x0f30
[    0.425683] pci 0000:00:1a.0: Performing full reset
[    0.425697] pci 0000:00:1a.1: uhci_check_and_reset_hc: legsup = 0x0030
[    0.425699] pci 0000:00:1a.1: Performing full reset
[    0.425713] pci 0000:00:1a.2: uhci_check_and_reset_hc: legsup = 0x0030
[    0.425714] pci 0000:00:1a.2: Performing full reset
[    0.425761] pci 0000:00:1d.0: uhci_check_and_reset_hc: legsup = 0x0f30
[    0.425763] pci 0000:00:1d.0: Performing full reset
[    0.425776] pci 0000:00:1d.1: uhci_check_and_reset_hc: legsup = 0x0030
[    0.425778] pci 0000:00:1d.1: Performing full reset
[    0.425792] pci 0000:00:1d.2: uhci_check_and_reset_hc: legsup = 0x0030
[    0.425793] pci 0000:00:1d.2: Performing full reset
[    0.425869] PCI: CLS 32 bytes, default 64
[    0.425911] Trying to unpack rootfs image as initramfs...
[    1.338235] Freeing initrd memory: 51140k freed
[    1.353766] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    1.353814] Placing 64MB software IO TLB between ffff8800c8e00000 - ffff8800cce00000
[    1.353868] software IO TLB at phys 0xc8e00000 - 0xcce00000
[    1.354121] Scanning for low memory corruption every 60 seconds
[    1.354282] audit: initializing netlink socket (disabled)
[    1.354333] type=2000 audit(1290042172.352:1): initialized
[    1.371975] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    1.373259] VFS: Disk quotas dquot_6.5.2
[    1.373334] Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.373820] fuse init (API version 7.15)
[    1.373914] msgmni has been set to 15905
[    1.374228] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[    1.374283] io scheduler noop registered
[    1.374318] io scheduler deadline registered (default)
[    1.374382] io scheduler cfq registered
[    1.374521] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    1.374587] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    1.374729] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0
[    1.374788] ACPI: Power Button [PWRB]
[    1.374858] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
[    1.374913] ACPI: Power Button [PWRF]
[    1.375081] ACPI: acpi_idle registered with cpuidle
[    1.376476] Linux agpgart interface v0.103
[    1.376527] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    1.396877] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.660485] 00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.708880] brd: module loaded
[    1.709273] loop: module loaded
[    1.709384] ahci 0000:00:1f.2: version 3.0
[    1.709399] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    1.709480] ahci 0000:00:1f.2: irq 40 for MSI/MSI-X
[    1.709518] ahci: SSS flag set, parallel bus scan disabled
[    1.709583] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x3f impl SATA mode
[    1.709640] ahci 0000:00:1f.2: flags: 64bit ncq sntf stag pm led clo pmp pio slum part ccc ems sxs 
[    1.709698] ahci 0000:00:1f.2: setting latency timer to 64
[    1.748499] scsi0 : ahci
[    1.748628] scsi1 : ahci
[    1.748745] scsi2 : ahci
[    1.748860] scsi3 : ahci
[    1.748977] scsi4 : ahci
[    1.749092] scsi5 : ahci
[    1.749236] ata1: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8100 irq 40
[    1.749291] ata2: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8180 irq 40
[    1.749345] ata3: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8200 irq 40
[    1.749399] ata4: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8280 irq 40
[    1.749453] ata5: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8300 irq 40
[    1.749507] ata6: SATA max UDMA/133 abar m2048@0xfe3f8000 port 0xfe3f8380 irq 40
[    1.749860] pata_marvell 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    1.749932] pata_marvell 0000:03:00.0: setting latency timer to 64
[    1.750147] scsi6 : pata_marvell
[    1.750259] scsi7 : pata_marvell
[    1.750332] ata7: PATA max UDMA/100 cmd 0xec00 ctl 0xe880 bmdma 0xe400 irq 16
[    1.750373] ata8: DUMMY
[    1.750599] Fixed MDIO Bus: probed
[    1.750634] e1000e: Intel(R) PRO/1000 Network Driver - 1.2.7-k2
[    1.750673] e1000e: Copyright (c) 1999 - 2010 Intel Corporation.
[    1.750729] PPP generic driver version 2.4.2
[    1.788036] PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1
[    1.788079] PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp
[    1.788865] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.788967] mice: PS/2 mouse device common for all mice
[    1.789086] rtc_cmos 00:03: RTC can wake from S4
[    1.808529] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2
[    1.820041] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0
[    1.820105] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[    1.820181] lirc_dev: IR Remote Control driver registered, major 252 
[    1.820229] IR NEC protocol handler initialized
[    1.820266] IR RC5(x) protocol handler initialized
[    1.820303] IR RC6 protocol handler initialized
[    1.820339] IR JVC protocol handler initialized
[    1.820376] IR Sony protocol handler initialized
[    1.820412] IR RC5 (streamzap) protocol handler initialized
[    1.820451] Linux video capture interface: v2.00
[    1.820551] device-mapper: uevent: version 1.0.3
[    1.820679] device-mapper: ioctl: 4.18.0-ioctl (2010-06-29) initialised: dm-devel@redhat.com
[    1.820830] device-mapper: multipath: version 1.1.1 loaded
[    1.820879] device-mapper: multipath round-robin: version 1.0.0 loaded
[    1.821016] cpuidle: using governor ladder
[    1.821052] cpuidle: using governor menu
[    1.821267] TCP cubic registered
[    1.821382] NET: Registered protocol family 10
[    1.821625] lo: Disabled Privacy Extensions
[    1.821783] NET: Registered protocol family 17
[    1.821878] Bluetooth: L2CAP ver 2.15
[    1.821919] Bluetooth: L2CAP socket layer initialized
[    1.821958] Bluetooth: SCO (Voice Link) ver 0.6
[    1.821994] Bluetooth: SCO socket layer initialized
[    1.822590] Bluetooth: RFCOMM TTY layer initialized
[    1.822637] Bluetooth: RFCOMM socket layer initialized
[    1.822675] Bluetooth: RFCOMM ver 1.11
[    1.822723] Registering the dns_resolver key type
[    1.822853] PM: Checking hibernation image partition /dev/sda5
[    2.068013] ata1: SATA link down (SStatus 0 SControl 300)
[    2.560011] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    2.587003] ata2.00: HPA detected: current 976771055, native 976773168
[    2.587050] ata2.00: ATA-8: ST3500410AS, CC34, max UDMA/133
[    2.587092] ata2.00: 976771055 sectors, multi 0: LBA48 NCQ (depth 31/32)
[    2.626541] ata2.00: configured for UDMA/133
[    2.626671] scsi 1:0:0:0: Direct-Access     ATA      ST3500410AS      CC34 PQ: 0 ANSI: 5
[    2.626815] sd 1:0:0:0: [sda] 976771055 512-byte logical blocks: (500 GB/465 GiB)
[    2.626826] sd 1:0:0:0: Attached scsi generic sg0 type 0
[    2.626975] sd 1:0:0:0: [sda] Write Protect is off
[    2.627013] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.627032] sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.661160]  sda: sda1 sda2 < sda5 >
[    2.661416] sd 1:0:0:0: [sda] Attached SCSI disk
[    2.944012] ata3: SATA link down (SStatus 0 SControl 300)
[    3.264012] ata4: SATA link down (SStatus 0 SControl 300)
[    3.584012] ata5: SATA link down (SStatus 0 SControl 300)
[    3.904011] ata6: SATA link down (SStatus 0 SControl 300)
[    3.904095] PM: Hibernation image partition 8:5 present
[    3.904097] PM: Looking for hibernation image.
[    3.918426] PM: Image not found (code -22)
[    3.918428] PM: Hibernation image not present or could not be loaded.
[    3.918440] registered taskstats version 1
[    3.918741]   Magic number: 2:447:3
[    3.918801] system 00:10: hash matches
[    3.918886] rtc_cmos 00:03: setting system clock to 2010-11-18 01:02:55 UTC (1290042175)
[    3.918947] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    3.918986] EDD information not available.
[    3.919077] Freeing unused kernel memory: 600k freed
[    3.919257] Write protecting the kernel read-only data: 10240k
[    3.919436] Freeing unused kernel memory: 584k freed
[    3.919732] Freeing unused kernel memory: 1784k freed
[    3.986141] udevd (173): /proc/173/oom_adj is deprecated, please use /proc/173/oom_score_adj instead.
[    4.005082] Floppy drive(s): fd0 is 1.44M
[    4.023855] FDC 0 is a post-1991 82077
[    4.053333] usbcore: registered new interface driver usbfs
[    4.053418] usbcore: registered new interface driver hub
[    4.056629] usbcore: registered new device driver usb
[    4.059296] uhci_hcd: USB Universal Host Controller Interface driver
[    4.059457] uhci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    4.059514] uhci_hcd 0000:00:1a.0: setting latency timer to 64
[    4.059516] uhci_hcd 0000:00:1a.0: UHCI Host Controller
[    4.059579] drivers/usb/core/inode.c: creating file 'devices'
[    4.059582] drivers/usb/core/inode.c: creating file '001'
[    4.059586] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1
[    4.064105] uhci_hcd 0000:00:1a.0: detected 2 ports
[    4.064155] uhci_hcd 0000:00:1a.0: uhci_check_and_reset_hc: cmd = 0x0000
[    4.064157] uhci_hcd 0000:00:1a.0: Performing full reset
[    4.064169] uhci_hcd 0000:00:1a.0: supports USB remote wakeup
[    4.064178] uhci_hcd 0000:00:1a.0: irq 16, io base 0x0000c480
[    4.064260] usb usb1: default language 0x0409
[    4.064265] usb usb1: udev 1, busnum 1, minor = 0
[    4.064267] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[    4.064314] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.064373] usb usb1: Product: UHCI Host Controller
[    4.064413] usb usb1: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.064457] usb usb1: SerialNumber: 0000:00:1a.0
[    4.064562] usb usb1: usb_probe_device
[    4.064564] usb usb1: configuration #1 chosen from 1 choice
[    4.064571] usb usb1: adding 1-0:1.0 (config #1, interface 0)
[    4.064591] hub 1-0:1.0: usb_probe_interface
[    4.064593] hub 1-0:1.0: usb_probe_interface - got id
[    4.064595] hub 1-0:1.0: USB hub found
[    4.064636] hub 1-0:1.0: 2 ports detected
[    4.064674] hub 1-0:1.0: standalone hub
[    4.064676] hub 1-0:1.0: no power switching (usb 1.0)
[    4.064677] hub 1-0:1.0: individual port over-current protection
[    4.064679] hub 1-0:1.0: power on to power good time: 2ms
[    4.064682] hub 1-0:1.0: local power source is good
[    4.064684] hub 1-0:1.0: trying to enable port power on non-switchable hub
[    4.064704] drivers/usb/core/inode.c: creating file '001'
[    4.064761] uhci_hcd 0000:00:1a.1: PCI INT B -> GSI 21 (level, low) -> IRQ 21
[    4.064810] uhci_hcd 0000:00:1a.1: setting latency timer to 64
[    4.064813] uhci_hcd 0000:00:1a.1: UHCI Host Controller
[    4.064857] drivers/usb/core/inode.c: creating file '002'
[    4.064869] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 2
[    4.065140] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[    4.065210] r8169 0000:02:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[    4.065349] r8169 0000:02:00.0: setting latency timer to 64
[    4.065397] r8169 0000:02:00.0: irq 41 for MSI/MSI-X
[    4.065719] r8169 0000:02:00.0: eth0: RTL8168c/8111c at 0xffffc90000050000, 00:24:8c:7f:f0:aa, XID 1c4000c0 IRQ 41
[    4.076314] uhci_hcd 0000:00:1a.1: detected 2 ports
[    4.076361] uhci_hcd 0000:00:1a.1: uhci_check_and_reset_hc: cmd = 0x0000
[    4.076362] uhci_hcd 0000:00:1a.1: Performing full reset
[    4.076375] uhci_hcd 0000:00:1a.1: supports USB remote wakeup
[    4.076396] uhci_hcd 0000:00:1a.1: irq 21, io base 0x0000c800
[    4.076486] usb usb2: default language 0x0409
[    4.076491] usb usb2: udev 1, busnum 2, minor = 128
[    4.076493] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
[    4.076541] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.076602] usb usb2: Product: UHCI Host Controller
[    4.076642] usb usb2: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.076690] usb usb2: SerialNumber: 0000:00:1a.1
[    4.076801] usb usb2: usb_probe_device
[    4.076804] usb usb2: configuration #1 chosen from 1 choice
[    4.076811] usb usb2: adding 2-0:1.0 (config #1, interface 0)
[    4.076833] hub 2-0:1.0: usb_probe_interface
[    4.076834] hub 2-0:1.0: usb_probe_interface - got id
[    4.076837] hub 2-0:1.0: USB hub found
[    4.076888] hub 2-0:1.0: 2 ports detected
[    4.076937] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    4.076939] Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after
[    4.076947] ehci_hcd: block sizes: qh 104 qtd 96 itd 192 sitd 96
[    4.077075] hub 2-0:1.0: standalone hub
[    4.077076] hub 2-0:1.0: no power switching (usb 1.0)
[    4.077078] hub 2-0:1.0: individual port over-current protection
[    4.077079] hub 2-0:1.0: power on to power good time: 2ms
[    4.077083] hub 2-0:1.0: local power source is good
[    4.077085] hub 2-0:1.0: trying to enable port power on non-switchable hub
[    4.077104] drivers/usb/core/inode.c: creating file '001'
[    4.077175] ehci_hcd 0000:00:1a.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    4.077335] ehci_hcd 0000:00:1a.7: setting latency timer to 64
[    4.077338] ehci_hcd 0000:00:1a.7: EHCI Host Controller
[    4.077395] drivers/usb/core/inode.c: creating file '003'
[    4.077400] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 3
[    4.085541] ehci_hcd 0000:00:1a.7: reset hcs_params 0x103206 dbg=1 cc=3 pcc=2 ordered !ppc ports=6
[    4.085546] ehci_hcd 0000:00:1a.7: reset hcc_params 16871 thresh 7 uframes 1024 64 bit addr hw prefetch
[    4.085575] ehci_hcd 0000:00:1a.7: debug port 1
[    4.085635] ehci_hcd 0000:00:1a.7: reset command 0080002 (park)=0 ithresh=8 period=1024 Reset HALT
[    4.089536] ehci_hcd 0000:00:1a.7: cache line size of 32 is not supported
[    4.089538] ehci_hcd 0000:00:1a.7: supports USB remote wakeup
[    4.090598] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfe3fb000
[    4.090659] ehci_hcd 0000:00:1a.7: reset command 0080002 (park)=0 ithresh=8 period=1024 Reset HALT
[    4.094535] ehci_hcd 0000:00:1a.7: init command 0010001 (park)=0 ithresh=1 period=1024 RUN
[    4.104053] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00
[    4.104144] usb usb3: default language 0x0409
[    4.104152] usb usb3: udev 1, busnum 3, minor = 256
[    4.104155] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    4.104199] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.104256] usb usb3: Product: EHCI Host Controller
[    4.104297] usb usb3: Manufacturer: Linux 2.6.37-rc2+ ehci_hcd
[    4.104339] usb usb3: SerialNumber: 0000:00:1a.7
[    4.104462] usb usb3: usb_probe_device
[    4.104465] usb usb3: configuration #1 chosen from 1 choice
[    4.104472] usb usb3: adding 3-0:1.0 (config #1, interface 0)
[    4.104495] hub 3-0:1.0: usb_probe_interface
[    4.104497] hub 3-0:1.0: usb_probe_interface - got id
[    4.104499] hub 3-0:1.0: USB hub found
[    4.104542] hub 3-0:1.0: 6 ports detected
[    4.104582] hub 3-0:1.0: standalone hub
[    4.104584] hub 3-0:1.0: no power switching (usb 1.0)
[    4.104585] hub 3-0:1.0: individual port over-current protection
[    4.104587] hub 3-0:1.0: power on to power good time: 20ms
[    4.104590] hub 3-0:1.0: local power source is good
[    4.104592] hub 3-0:1.0: trying to enable port power on non-switchable hub
[    4.104619] drivers/usb/core/inode.c: creating file '001'
[    4.104639] ehci_hcd 0000:00:1a.7: HS companion for 0000:00:1a.0
[    4.104641] ehci_hcd 0000:00:1a.7: HS companion for 0000:00:1a.1
[    4.104681] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[    4.104793] ehci_hcd 0000:00:1d.7: setting latency timer to 64
[    4.104796] ehci_hcd 0000:00:1d.7: EHCI Host Controller
[    4.104840] drivers/usb/core/inode.c: creating file '004'
[    4.104844] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 4
[    4.128018] ehci_hcd 0000:00:1d.7: reset hcs_params 0x103206 dbg=1 cc=3 pcc=2 ordered !ppc ports=6
[    4.128023] ehci_hcd 0000:00:1d.7: reset hcc_params 16871 thresh 7 uframes 1024 64 bit addr hw prefetch
[    4.128045] ehci_hcd 0000:00:1d.7: debug port 1
[    4.128087] ehci_hcd 0000:00:1d.7: reset command 0080002 (park)=0 ithresh=8 period=1024 Reset HALT
[    4.131978] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported
[    4.131979] ehci_hcd 0000:00:1d.7: supports USB remote wakeup
[    4.132004] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfe3fa000
[    4.132056] ehci_hcd 0000:00:1d.7: reset command 0080002 (park)=0 ithresh=8 period=1024 Reset HALT
[    4.135944] ehci_hcd 0000:00:1d.7: init command 0010001 (park)=0 ithresh=1 period=1024 RUN
[    4.144008] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00
[    4.144070] usb usb4: default language 0x0409
[    4.144077] usb usb4: udev 1, busnum 4, minor = 384
[    4.144080] usb usb4: New USB device found, idVendor=1d6b, idProduct=0002
[    4.144124] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.144181] usb usb4: Product: EHCI Host Controller
[    4.144236] usb usb4: Manufacturer: Linux 2.6.37-rc2+ ehci_hcd
[    4.144275] usb usb4: SerialNumber: 0000:00:1d.7
[    4.144351] usb usb4: usb_probe_device
[    4.144353] usb usb4: configuration #1 chosen from 1 choice
[    4.144358] usb usb4: adding 4-0:1.0 (config #1, interface 0)
[    4.144384] hub 4-0:1.0: usb_probe_interface
[    4.144386] hub 4-0:1.0: usb_probe_interface - got id
[    4.144387] hub 4-0:1.0: USB hub found
[    4.144431] hub 4-0:1.0: 6 ports detected
[    4.144469] hub 4-0:1.0: standalone hub
[    4.144470] hub 4-0:1.0: no power switching (usb 1.0)
[    4.144472] hub 4-0:1.0: individual port over-current protection
[    4.144473] hub 4-0:1.0: power on to power good time: 20ms
[    4.144476] hub 4-0:1.0: local power source is good
[    4.144478] hub 4-0:1.0: trying to enable port power on non-switchable hub
[    4.144503] drivers/usb/core/inode.c: creating file '001'
[    4.144563] uhci_hcd 0000:00:1a.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    4.144632] uhci_hcd 0000:00:1a.2: setting latency timer to 64
[    4.144635] uhci_hcd 0000:00:1a.2: UHCI Host Controller
[    4.144695] drivers/usb/core/inode.c: creating file '005'
[    4.144700] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5
[    4.164028] hub 1-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.172014] uhci_hcd 0000:00:1a.2: detected 2 ports
[    4.172058] uhci_hcd 0000:00:1a.2: uhci_check_and_reset_hc: cmd = 0x0000
[    4.172060] uhci_hcd 0000:00:1a.2: Performing full reset
[    4.172073] uhci_hcd 0000:00:1a.2: supports USB remote wakeup
[    4.172081] uhci_hcd 0000:00:1a.2: irq 18, io base 0x0000c880
[    4.172159] usb usb5: default language 0x0409
[    4.172166] usb usb5: udev 1, busnum 5, minor = 512
[    4.172168] usb usb5: New USB device found, idVendor=1d6b, idProduct=0001
[    4.172217] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.172281] usb usb5: Product: UHCI Host Controller
[    4.172326] usb usb5: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.172365] usb usb5: SerialNumber: 0000:00:1a.2
[    4.172460] usb usb5: usb_probe_device
[    4.172463] usb usb5: configuration #1 chosen from 1 choice
[    4.172468] usb usb5: adding 5-0:1.0 (config #1, interface 0)
[    4.172490] hub 5-0:1.0: usb_probe_interface
[    4.172491] hub 5-0:1.0: usb_probe_interface - got id
[    4.172493] hub 5-0:1.0: USB hub found
[    4.172535] hub 5-0:1.0: 2 ports detected
[    4.172571] hub 5-0:1.0: standalone hub
[    4.172573] hub 5-0:1.0: no power switching (usb 1.0)
[    4.172574] hub 5-0:1.0: individual port over-current protection
[    4.172576] hub 5-0:1.0: power on to power good time: 2ms
[    4.172579] hub 5-0:1.0: local power source is good
[    4.172581] hub 5-0:1.0: trying to enable port power on non-switchable hub
[    4.172596] drivers/usb/core/inode.c: creating file '001'
[    4.172623] ehci_hcd 0000:00:1a.7: HS companion for 0000:00:1a.2
[    4.172647] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[    4.172692] uhci_hcd 0000:00:1d.0: setting latency timer to 64
[    4.172694] uhci_hcd 0000:00:1d.0: UHCI Host Controller
[    4.172735] drivers/usb/core/inode.c: creating file '006'
[    4.172738] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6
[    4.176028] hub 2-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.188012] uhci_hcd 0000:00:1d.0: detected 2 ports
[    4.188055] uhci_hcd 0000:00:1d.0: uhci_check_and_reset_hc: cmd = 0x0000
[    4.188057] uhci_hcd 0000:00:1d.0: Performing full reset
[    4.188069] uhci_hcd 0000:00:1d.0: supports USB remote wakeup
[    4.188075] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000c000
[    4.188144] usb usb6: default language 0x0409
[    4.188151] usb usb6: udev 1, busnum 6, minor = 640
[    4.188153] usb usb6: New USB device found, idVendor=1d6b, idProduct=0001
[    4.188197] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.188267] usb usb6: Product: UHCI Host Controller
[    4.188305] usb usb6: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.188344] usb usb6: SerialNumber: 0000:00:1d.0
[    4.188414] usb usb6: usb_probe_device
[    4.188416] usb usb6: configuration #1 chosen from 1 choice
[    4.188421] usb usb6: adding 6-0:1.0 (config #1, interface 0)
[    4.188439] hub 6-0:1.0: usb_probe_interface
[    4.188441] hub 6-0:1.0: usb_probe_interface - got id
[    4.188442] hub 6-0:1.0: USB hub found
[    4.188481] hub 6-0:1.0: 2 ports detected
[    4.188517] hub 6-0:1.0: standalone hub
[    4.188518] hub 6-0:1.0: no power switching (usb 1.0)
[    4.188519] hub 6-0:1.0: individual port over-current protection
[    4.188521] hub 6-0:1.0: power on to power good time: 2ms
[    4.188524] hub 6-0:1.0: local power source is good
[    4.188525] hub 6-0:1.0: trying to enable port power on non-switchable hub
[    4.188540] drivers/usb/core/inode.c: creating file '001'
[    4.188565] ehci_hcd 0000:00:1d.7: HS companion for 0000:00:1d.0
[    4.188577] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    4.188621] uhci_hcd 0000:00:1d.1: setting latency timer to 64
[    4.188624] uhci_hcd 0000:00:1d.1: UHCI Host Controller
[    4.188664] drivers/usb/core/inode.c: creating file '007'
[    4.188667] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7
[    4.204011] uhci_hcd 0000:00:1d.1: detected 2 ports
[    4.204030] hub 3-0:1.0: state 7 ports 6 chg 0000 evt 0000
[    4.204061] uhci_hcd 0000:00:1d.1: uhci_check_and_reset_hc: cmd = 0x0000
[    4.204063] uhci_hcd 0000:00:1d.1: Performing full reset
[    4.204075] uhci_hcd 0000:00:1d.1: supports USB remote wakeup
[    4.204092] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000c080
[    4.204161] usb usb7: default language 0x0409
[    4.204168] usb usb7: udev 1, busnum 7, minor = 768
[    4.204170] usb usb7: New USB device found, idVendor=1d6b, idProduct=0001
[    4.204219] usb usb7: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.204272] usb usb7: Product: UHCI Host Controller
[    4.204310] usb usb7: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.204349] usb usb7: SerialNumber: 0000:00:1d.1
[    4.204422] usb usb7: usb_probe_device
[    4.204424] usb usb7: configuration #1 chosen from 1 choice
[    4.204428] usb usb7: adding 7-0:1.0 (config #1, interface 0)
[    4.204448] hub 7-0:1.0: usb_probe_interface
[    4.204450] hub 7-0:1.0: usb_probe_interface - got id
[    4.204451] hub 7-0:1.0: USB hub found
[    4.204490] hub 7-0:1.0: 2 ports detected
[    4.204526] hub 7-0:1.0: standalone hub
[    4.204527] hub 7-0:1.0: no power switching (usb 1.0)
[    4.204528] hub 7-0:1.0: individual port over-current protection
[    4.204530] hub 7-0:1.0: power on to power good time: 2ms
[    4.204533] hub 7-0:1.0: local power source is good
[    4.204534] hub 7-0:1.0: trying to enable port power on non-switchable hub
[    4.204548] drivers/usb/core/inode.c: creating file '001'
[    4.204574] ehci_hcd 0000:00:1d.7: HS companion for 0000:00:1d.1
[    4.204587] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    4.204631] uhci_hcd 0000:00:1d.2: setting latency timer to 64
[    4.204634] uhci_hcd 0000:00:1d.2: UHCI Host Controller
[    4.204675] drivers/usb/core/inode.c: creating file '008'
[    4.204678] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8
[    4.216018] uhci_hcd 0000:00:1d.2: detected 2 ports
[    4.216060] uhci_hcd 0000:00:1d.2: uhci_check_and_reset_hc: cmd = 0x0000
[    4.216062] uhci_hcd 0000:00:1d.2: Performing full reset
[    4.216075] uhci_hcd 0000:00:1d.2: supports USB remote wakeup
[    4.216080] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000c400
[    4.216149] usb usb8: default language 0x0409
[    4.216155] usb usb8: udev 1, busnum 8, minor = 896
[    4.216158] usb usb8: New USB device found, idVendor=1d6b, idProduct=0001
[    4.216202] usb usb8: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.216261] usb usb8: Product: UHCI Host Controller
[    4.216299] usb usb8: Manufacturer: Linux 2.6.37-rc2+ uhci_hcd
[    4.216338] usb usb8: SerialNumber: 0000:00:1d.2
[    4.216408] usb usb8: usb_probe_device
[    4.216410] usb usb8: configuration #1 chosen from 1 choice
[    4.216415] usb usb8: adding 8-0:1.0 (config #1, interface 0)
[    4.216433] hub 8-0:1.0: usb_probe_interface
[    4.216435] hub 8-0:1.0: usb_probe_interface - got id
[    4.216436] hub 8-0:1.0: USB hub found
[    4.216474] hub 8-0:1.0: 2 ports detected
[    4.216510] hub 8-0:1.0: standalone hub
[    4.216512] hub 8-0:1.0: no power switching (usb 1.0)
[    4.216513] hub 8-0:1.0: individual port over-current protection
[    4.216514] hub 8-0:1.0: power on to power good time: 2ms
[    4.216517] hub 8-0:1.0: local power source is good
[    4.216519] hub 8-0:1.0: trying to enable port power on non-switchable hub
[    4.216533] drivers/usb/core/inode.c: creating file '001'
[    4.216558] ehci_hcd 0000:00:1d.7: HS companion for 0000:00:1d.2
[    4.244021] ehci_hcd 0000:00:1d.7: GetStatus port:6 status 001403 0  ACK POWER sig=k CSC CONNECT
[    4.244026] hub 4-0:1.0: port 6: status 0501 change 0001
[    4.272020] hub 5-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.288023] hub 6-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.304029] hub 7-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.311589] PM: Starting manual resume from disk
[    4.311628] PM: Hibernation image partition 8:5 present
[    4.311630] PM: Looking for hibernation image.
[    4.311758] PM: Image not found (code -22)
[    4.311760] PM: Hibernation image not present or could not be loaded.
[    4.315641] EXT3-fs (sda1): recovery required on readonly filesystem
[    4.315733] EXT3-fs (sda1): write access will be enabled during recovery
[    4.316018] uhci_hcd 0000:00:1d.2: port 2 portsc 008a,00
[    4.330145] EXT3-fs: barriers not enabled
[    4.344045] hub 4-0:1.0: state 7 ports 6 chg 0040 evt 0000
[    4.344052] hub 4-0:1.0: port 6, status 0501, change 0000, 480 Mb/s
[    4.344059] ehci_hcd 0000:00:1d.7: port 6 low speed --> companion
[    4.358248] kjournald starting.  Commit interval 5 seconds
[    4.358302] EXT3-fs (sda1): recovery complete
[    4.359155] EXT3-fs (sda1): mounted filesystem with writeback data mode
[    4.400015] ehci_hcd 0000:00:1d.7: GetStatus port:6 status 003002 0  ACK POWER OWNER sig=se0 CSC
[    4.400033] hub 4-0:1.0: state 7 ports 6 chg 0000 evt 0040
[    4.416011] hub 8-0:1.0: state 7 ports 2 chg 0000 evt 0000
[    4.420019] hub 8-0:1.0: state 7 ports 2 chg 0000 evt 0004
[    4.420027] uhci_hcd 0000:00:1d.2: port 2 portsc 01a3,00
[    4.420034] hub 8-0:1.0: port 2, status 0301, change 0001, 1.5 Mb/s
[    4.548016] hub 8-0:1.0: debounce: port 2: total 100ms stable 100ms status 0x301
[    4.660013] usb 8-2: new low speed USB device using uhci_hcd and address 2
[    4.814147] usb 8-2: skipped 1 descriptor after interface
[    4.819148] usb 8-2: default language 0x0409
[    4.828148] usb 8-2: udev 2, busnum 8, minor = 897
[    4.828151] usb 8-2: New USB device found, idVendor=04b3, idProduct=310c
[    4.828197] usb 8-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[    4.828245] usb 8-2: Product: USB Optical Mouse
[    4.828345] usb 8-2: usb_probe_device
[    4.828348] usb 8-2: configuration #1 chosen from 1 choice
[    4.831151] usb 8-2: adding 8-2:1.0 (config #1, interface 0)
[    4.831217] drivers/usb/core/inode.c: creating file '002'
[    5.112015] usb usb1: suspend_rh (auto-stop)
[    5.112039] usb usb2: suspend_rh (auto-stop)
[    5.360011] usb usb5: suspend_rh (auto-stop)
[    5.360033] usb usb6: suspend_rh (auto-stop)
[    5.360051] usb usb7: suspend_rh (auto-stop)
[    6.784015] hub 1-0:1.0: hub_suspend
[    6.784022] usb usb1: bus auto-suspend
[    6.784024] usb usb1: suspend_rh
[    6.784039] hub 2-0:1.0: hub_suspend
[    6.784043] usb usb2: bus auto-suspend
[    6.784045] usb usb2: suspend_rh
[    6.800014] hub 3-0:1.0: hub_suspend
[    6.800020] usb usb3: bus auto-suspend
[    6.800023] ehci_hcd 0000:00:1a.7: suspend root hub
[    6.800042] hub 5-0:1.0: hub_suspend
[    6.800046] usb usb5: bus auto-suspend
[    6.800048] usb usb5: suspend_rh
[    6.800061] hub 6-0:1.0: hub_suspend
[    6.800065] usb usb6: bus auto-suspend
[    6.800067] usb usb6: suspend_rh
[    6.800079] hub 7-0:1.0: hub_suspend
[    6.800083] usb usb7: bus auto-suspend
[    6.800085] usb usb7: suspend_rh
[    6.800098] hub 4-0:1.0: hub_suspend
[    6.800101] usb usb4: bus auto-suspend
[    6.800103] ehci_hcd 0000:00:1d.7: suspend root hub
[    8.389830] udev: starting version 141
[    8.865758] iTCO_vendor_support: vendor-support=0
[    8.897622] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.06
[    8.897765] iTCO_wdt: Found a ICH10R TCO device (Version=2, TCOBASE=0x0860)
[    8.897874] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[    8.909011] agpgart-intel 0000:00:00.0: Intel G45/G43 Chipset
[    8.909163] agpgart-intel 0000:00:00.0: detected gtt size: 524288K total, 262144K mappable
[    8.910553] agpgart-intel 0000:00:00.0: detected 32768K stolen memory
[    8.915152] input: PC Speaker as /devices/platform/pcspkr/input/input3
[    8.915242] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000
[    9.017879] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    9.044376] udev: renamed network interface eth0 to eth1
[    9.054251] usbhid 8-2:1.0: usb_probe_interface
[    9.054254] usbhid 8-2:1.0: usb_probe_interface - got id
[    9.067360] input: USB Optical Mouse as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4
[    9.067596] generic-usb 0003:04B3:310C.0001: input,hidraw0: USB HID v1.11 Mouse [USB Optical Mouse] on usb-0000:00:1d.2-2/input0
[    9.067794] usbcore: registered new interface driver usbhid
[    9.067838] usbhid: USB HID core driver
[    9.699170] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22
[    9.699348] HDA Intel 0000:00:1b.0: irq 42 for MSI/MSI-X
[    9.699367] HDA Intel 0000:00:1b.0: setting latency timer to 64
[    9.889426] lp: driver loaded but no devices found
[    9.982198] Adding 9936164k swap on /dev/sda5.  Priority:-1 extents:1 across:9936164k 
[   10.289789] EXT3-fs (sda1): using internal journal
[   43.717259] r8169 0000:02:00.0: eth1: link up
[   43.717264] r8169 0000:02:00.0: eth1: link up
[   54.152003] eth1: no IPv6 routers present
[  128.410940] netconsole: local port 6665
[  128.410983] netconsole: local IP 0.0.0.0
[  128.411025] netconsole: interface 'eth1'
[  128.411075] netconsole: remote port 6666
[  128.411113] netconsole: remote IP 192.168.1.138
[  128.411153] netconsole: remote ethernet address ff:ff:ff:ff:ff:ff
[  128.411196] netconsole: local IP 192.168.1.8
[  128.510838] console [netcon0] enabled
[  128.510874] netconsole: network logging started
[  135.186073] klogd[2733]: segfault at 0 ip 00007fab15615c07 sp 00007fff159be780 error 4 in libc-2.9.so[7fab155ae000+168000]

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:07 ` Kyle McMartin
@ 2010-11-18  7:48   ` Ingo Molnar
  2010-11-20  3:18     ` Kees Cook
  0 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-18  7:48 UTC (permalink / raw)
  To: Kyle McMartin
  Cc: Marcus Meissner, torvalds, linux-kernel, tj, akpm, hpa, w, alan,
	Andrew Morton


* Kyle McMartin <kyle@mcmartin.ca> wrote:

> On Tue, Nov 16, 2010 at 11:46:03AM +0100, Marcus Meissner wrote:
> > Target of this starter patch and follow ups is removing any kind of
> > kernel space address information leak from the kernel.
> > 
> 
> Er. Should probably hit /proc/modules while you're at it.

Agreed. A few other kernel address things that should be hidden are:

1) /proc/<PID>/stack

Gives out kernel addresses and is a partial /proc/kallsyms table in essence. This 
got introduced recently. Useful to attackers.

Then there's a handful of physical address leaks - those are less useful but useful 
in some situations:

2) /proc/mtrr

Gives some idea about the physical layout of the machine and can give information 
about the location of certain physical devices as well. Limited but nonzero utility 
to attackers.

3) /proc/asound/cards

Can gives out the physical address of a device. Limited but nonzero utility to 
attackers.

4) /sys/devices/*/*/resources

Shows physical addresses. Limited but nonzero utility to attackers.

Plus there's some really limited fractional pieces of information - again, of 
nonzero utility to attackers:

5) /proc/net/ptype

Shows the sizes of a few kernel functions in networking code. Very limited but 
nonzero utility to attackers.

6) /sys/kernel/slab/*/ctor

Shows the sizes of a few kernel functions. Very limited but nonzero utility to 
attackers.

7) /sys/module/*/sections/*

For example:

 /sys/module/sunrpc/sections/__bug_table
 /sys/module/sunrpc/sections/__ex_table
 /sys/module/sunrpc/sections/__ksymtab
 /sys/module/sunrpc/sections/__ksymtab_gpl
 /sys/module/sunrpc/sections/__ksymtab_strings
 /sys/module/sunrpc/sections/__mcount_loc
 /sys/module/sunrpc/sections/__param

Potentially useful to attackers.

There's probably a few more i missed.

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:40 ` Kyle Moffett
  2010-11-17  5:41   ` Kyle Moffett
  2010-11-17  5:58   ` Linus Torvalds
@ 2010-11-18  7:31   ` Ingo Molnar
  2010-11-23 17:24     ` Pavel Machek
  2010-11-20 11:32   ` Avi Kivity
  3 siblings, 1 reply; 81+ messages in thread
From: Ingo Molnar @ 2010-11-18  7:31 UTC (permalink / raw)
  To: Kyle Moffett
  Cc: Marcus Meissner, torvalds, linux-kernel, tj, akpm, hpa, w, alan


Putting aside the kallsyms patch (which is a tiny part of a fuller solution), i'd 
like to reply to this particular point:

* Kyle Moffett <kyle@moffetthome.net> wrote:

>   (2) Most of the arguments about introducing "uncertainty" into the
> hacking process are specious as well. [...]

It is only specious if you ignore the arguments i made in the previous
discussion. One argument i made was:

  Future trends are also clear: eventually, as more and more of our lives
  are lived on the network, home boxes are becoming more and more valuable.
  So i think concentrating on the psychology of the skilled attacker would
  not be unwise. YMMV.

>                                  [...]  If a kernel bug is truly a
> "workable" vulnerability then 99%+ of the attempts to exploit it would
> be completely automated virii and computer worms that don't really
> care what happens if they fail to compromise the system.  Take a look
> at the vast collection of sample code we have in the form of Windows
> virii/trojans/worms/malware/etc; care to guess what portion of those
> programs authors would shed a tear if their exploit horribly crashed
> or generated vast amounts of audit spam for 70% of the computers it
> executed on?

( You'd be a fool to think that even windows malware authors do not care
  whether they crash the target box. You do not get a botnet of 10 million PCs if
  you crash 99% of them. There is an analogous concept for this in biology: if a
  biological virus is _too_ deadly, it will never become a pandemic - because it has
  no time/chance to spread, they are 'detected' and 'defended against'. Virii like
  Ebola never spread widely, because they kill all their hosts. )

More importantly, look forward and take a look at the really intelligent attacks, 
which are used against high-value targets with good defenses. Those real examples 
give us a glimpse into future techniques, even if you do not accept my arguments 
that come to a similar conclusion. Those attacks are all about avoiding detection.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:58   ` Linus Torvalds
@ 2010-11-17  6:19     ` Willy Tarreau
  0 siblings, 0 replies; 81+ messages in thread
From: Willy Tarreau @ 2010-11-17  6:19 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Kyle Moffett, Marcus Meissner, linux-kernel, tj, akpm, hpa, mingo, alan

On Tue, Nov 16, 2010 at 09:58:44PM -0800, Linus Torvalds wrote:
> So I do think that it's worth closing these "small" holes. Anything
> that makes it more work to attack really _is_ improving things.

We must keep in mind that anything which requires more work as root
for common administration opens new holes. I don't think it's the
case for kallsyms, but I mean we should not try to lock too hard,
otherwise everyone will have a sudoers entry to do his work, and
that's even worse than current situation.

Willy


^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:40 ` Kyle Moffett
  2010-11-17  5:41   ` Kyle Moffett
@ 2010-11-17  5:58   ` Linus Torvalds
  2010-11-17  6:19     ` Willy Tarreau
  2010-11-18  7:31   ` Ingo Molnar
  2010-11-20 11:32   ` Avi Kivity
  3 siblings, 1 reply; 81+ messages in thread
From: Linus Torvalds @ 2010-11-17  5:58 UTC (permalink / raw)
  To: Kyle Moffett; +Cc: Marcus Meissner, linux-kernel, tj, akpm, hpa, mingo, w, alan

On Tue, Nov 16, 2010 at 9:40 PM, Kyle Moffett <kyle@moffetthome.net> wrote:
>
>  (1) For 99%+ of all the computers out there you can

I think that misses the point.

Security is never about absolutes. Anybody who believes in absolute
security is a moron.

True security is about "piling up the inconveniences on the attack".
Several layers. Sure, it's easy to attack a system that is a
monoculture. But immediately when you start saying "you can always
figure out the particular version" and you're talking about tens (or
hundreds) of versions, suddenly you really _are_ more secure. Because
suddenly it's one more pain.

And no, that "one more pain" is not going to be the thing that stops
attacks. But add a number of "one more pains" together, and it gets
increasingly unlikely that you will have a widespread and successful
attack.

So I do think that it's worth closing these "small" holes. Anything
that makes it more work to attack really _is_ improving things.

And being able to just immediately see the addresses is just very
convenient if you have an attack that needs kernel addresses. Much
better that we not make these things visible by default.

And yes, people can look at the vmlinux files. That's outside our
control. And maybe distros will want to close that hole, and maybe
they won't, but at least they don't have the excuse that "well, it's
not even worth it, because the kernel exports that information in
/proc/kallsyms already".

              Linus

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-17  5:40 ` Kyle Moffett
@ 2010-11-17  5:41   ` Kyle Moffett
  2010-11-17  5:58   ` Linus Torvalds
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 81+ messages in thread
From: Kyle Moffett @ 2010-11-17  5:41 UTC (permalink / raw)
  To: Marcus Meissner; +Cc: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

Whoops... I apparently can't count to 3... (at least not correctly anyways) :-D.

On Wed, Nov 17, 2010 at 00:40, Kyle Moffett <kyle@moffetthome.net> wrote:
>  (1) For 99%+ of all the computers out there you can get a 90%+
[...]
>  (2) Most of the arguments about introducing "uncertainty" into the
[...]
>  (2) By just flat out changing the permissions on this file you are
[...]
>  (3) If you are really interested in locking down a system to this

Cheers,
Kyle Moffett

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-16 10:46 Marcus Meissner
  2010-11-17  5:07 ` Kyle McMartin
@ 2010-11-17  5:40 ` Kyle Moffett
  2010-11-17  5:41   ` Kyle Moffett
                     ` (3 more replies)
  2010-11-19 19:19 ` Sarah Sharp
  2010-11-20 11:05 ` Richard W.M. Jones
  3 siblings, 4 replies; 81+ messages in thread
From: Kyle Moffett @ 2010-11-17  5:40 UTC (permalink / raw)
  To: Marcus Meissner; +Cc: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

On Tue, Nov 16, 2010 at 05:46, Marcus Meissner <meissner@suse.de> wrote:
> Making /proc/kallsyms readable only for root makes it harder
> for attackers to write generic kernel exploits by removing
> one source of knowledge where things are in the kernel.
>
> This is the second submit, discussion happened on this on first submit
> and mostly concerned that this is just one hole of the sieve ... but
> one of the bigger ones.
>
> Changing the permissions of at least System.map and vmlinux is
> also required to fix the same set, but a packaging issue.
>
> Target of this starter patch and follow ups is removing any kind of
> kernel space address information leak from the kernel.
[...snip...]
> -       proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
> +       proc_create("kallsyms", 0400, NULL, &kallsyms_operations);

Erm... this still seems to be missing a couple of really major
criticisms from the last review:

  (1) For 99%+ of all the computers out there you can get a 90%+
accurate guess for what kernel is running by looking at the version of
libc installed on the system.  All you have to do for those computers
is download a bunch of distro kernels and look at the libc packages
and build a table of "libc6-SOMEVERSION => 0xADDRESS", etc.  Because
of how all the vendors backport and track versions, "SOMEVERSION"
usually includes something wonderfully helpful like "el5" or "squeeze"
or whatever.  This does *nothing* for those users, and it's not clear
that it ever *could*.

  (2) Most of the arguments about introducing "uncertainty" into the
hacking process are specious as well.  If a kernel bug is truly a
"workable" vulnerability then 99%+ of the attempts to exploit it would
be completely automated virii and computer worms that don't really
care what happens if they fail to compromise the system.  Take a look
at the vast collection of sample code we have in the form of Windows
virii/trojans/worms/malware/etc; care to guess what portion of those
programs authors would shed a tear if their exploit horribly crashed
or generated vast amounts of audit spam for 70% of the computers it
executed on?

  (2) By just flat out changing the permissions on this file you are
breaking all sorts of existing debugging and analysis tools (which
currently operate just fine as non-root).  If you make the argument
that those people "can just write a boot script to 'chmod' the file",
well, you *too* can write a boot script to just chmod the file.
Furthermore, if you're truly locking down a system that hard, there
are lots of other boot scripts you will be modifying already anyways.

  (3) If you are really interested in locking down a system to this
degree then you should also be using an appropriate LSM, which is
already a much better place to hook these sorts of specific checks.
In fact, with roughly a 5-line SELinux policy change I could already
close this so-called "security hole" with no kernel changes
whatsoever.

Cheers,
Kyle Moffett

^ permalink raw reply	[flat|nested] 81+ messages in thread

* Re: [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
  2010-11-16 10:46 Marcus Meissner
@ 2010-11-17  5:07 ` Kyle McMartin
  2010-11-18  7:48   ` Ingo Molnar
  2010-11-17  5:40 ` Kyle Moffett
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 81+ messages in thread
From: Kyle McMartin @ 2010-11-17  5:07 UTC (permalink / raw)
  To: Marcus Meissner; +Cc: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

On Tue, Nov 16, 2010 at 11:46:03AM +0100, Marcus Meissner wrote:
> Target of this starter patch and follow ups is removing any kind of
> kernel space address information leak from the kernel.
> 

Er. Should probably hit /proc/modules while you're at it.

--Kyle

^ permalink raw reply	[flat|nested] 81+ messages in thread

* [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking
@ 2010-11-16 10:46 Marcus Meissner
  2010-11-17  5:07 ` Kyle McMartin
                   ` (3 more replies)
  0 siblings, 4 replies; 81+ messages in thread
From: Marcus Meissner @ 2010-11-16 10:46 UTC (permalink / raw)
  To: torvalds, linux-kernel, tj, akpm, hpa, mingo, w, alan

Hi,

Making /proc/kallsyms readable only for root makes it harder
for attackers to write generic kernel exploits by removing
one source of knowledge where things are in the kernel.

This is the second submit, discussion happened on this on first submit
and mostly concerned that this is just one hole of the sieve ... but
one of the bigger ones.

Changing the permissions of at least System.map and vmlinux is
also required to fix the same set, but a packaging issue.

Target of this starter patch and follow ups is removing any kind of
kernel space address information leak from the kernel.

Ciao, Marcus

Signed-off-by: Marcus Meissner <meissner@suse.de>
Acked-by: Tejun Heo <tj@kernel.org>
Acked-by: Eugene Teo <eugeneteo@kernel.org>
Reviewed-by: Jesper Juhl <jj@chaosbits.net>
---
 kernel/kallsyms.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 6f6d091..a8db257 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -546,7 +546,7 @@ static const struct file_operations kallsyms_operations = {
 
 static int __init kallsyms_init(void)
 {
-	proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
+	proc_create("kallsyms", 0400, NULL, &kallsyms_operations);
 	return 0;
 }
 device_initcall(kallsyms_init);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 81+ messages in thread

end of thread, other threads:[~2010-11-30 11:59 UTC | newest]

Thread overview: 81+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-04 10:09 [PATCH] kernel: make /proc/kallsyms mode 400 to reduce ease of attacking Marcus Meissner
2010-11-04 10:11 ` Tejun Heo
2010-11-05  0:11   ` [Security] " Eugene Teo
2010-11-04 11:46 ` Ingo Molnar
2010-11-04 12:29   ` Marcus Meissner
2010-11-04 13:58     ` Ingo Molnar
2010-11-04 14:11       ` Ingo Molnar
2010-11-04 14:33         ` Marcus Meissner
2010-11-04 14:38           ` Tejun Heo
2010-11-04 14:43             ` H. Peter Anvin
2010-11-04 14:48               ` Tejun Heo
2010-11-04 19:08           ` Ingo Molnar
2010-11-04 21:29             ` [Security] " Willy Tarreau
2010-11-04 21:51               ` Ingo Molnar
2010-11-04 22:35                 ` Willy Tarreau
2010-11-04 23:46                   ` Willy Tarreau
2010-11-07  8:50                   ` Ingo Molnar
2010-11-07  9:08                     ` Ingo Molnar
2010-11-07  9:49                     ` Willy Tarreau
2010-11-07 11:27                       ` Ingo Molnar
2010-11-07 11:41                         ` Willy Tarreau
2010-11-07 11:47                           ` Ingo Molnar
2010-11-07 11:56                             ` Willy Tarreau
2010-11-07 12:12                               ` Ingo Molnar
2010-11-07 12:22                                 ` Willy Tarreau
2010-11-07 12:25                                   ` Ingo Molnar
2010-11-07 12:39                                     ` Willy Tarreau
2010-11-07 12:32                                   ` Ingo Molnar
2010-11-07 12:51                                     ` Willy Tarreau
2010-11-07 15:27                                     ` Alan Cox
2010-11-08  6:29                                       ` Ingo Molnar
2010-11-07 11:42                       ` Ingo Molnar
2010-11-07 11:51                         ` Willy Tarreau
2010-11-07 12:37                           ` Ingo Molnar
2010-11-07 12:55                             ` Willy Tarreau
2010-11-07  8:56                   ` Ingo Molnar
2010-11-07  9:03                   ` Ingo Molnar
     [not found]               ` <20101104215157.GA25128@ <20101107090805.GA27983@elte.hu>
2010-11-13 13:06                 ` Gilles Espinasse
2010-11-07 18:02           ` Andi Kleen
2010-11-07 18:32             ` H. Peter Anvin
2010-11-10  8:53               ` Ingo Molnar
2010-11-11  2:51                 ` H. Peter Anvin
2010-11-11  7:05                   ` Ingo Molnar
2010-11-05  2:38     ` Frank Rowand
2010-11-10 20:58       ` Jesper Juhl
2010-11-05  0:20 ` Jesper Juhl
2010-11-16 10:46 Marcus Meissner
2010-11-17  5:07 ` Kyle McMartin
2010-11-18  7:48   ` Ingo Molnar
2010-11-20  3:18     ` Kees Cook
2010-11-26  7:51       ` Ingo Molnar
2010-11-17  5:40 ` Kyle Moffett
2010-11-17  5:41   ` Kyle Moffett
2010-11-17  5:58   ` Linus Torvalds
2010-11-17  6:19     ` Willy Tarreau
2010-11-18  7:31   ` Ingo Molnar
2010-11-23 17:24     ` Pavel Machek
2010-11-26  7:38       ` Ingo Molnar
2010-11-29 19:03         ` H. Peter Anvin
2010-11-20 11:32   ` Avi Kivity
2010-11-19 19:19 ` Sarah Sharp
2010-11-19 19:54   ` Linus Torvalds
2010-11-19 19:58     ` david
2010-11-19 20:04       ` Linus Torvalds
2010-11-19 20:16         ` Willy Tarreau
2010-11-19 20:55           ` david
2010-11-26  7:48     ` Ingo Molnar
2010-11-29 16:33       ` Sarah Sharp
2010-11-29 18:04         ` Ingo Molnar
2010-11-29 19:05           ` H. Peter Anvin
2010-11-29 19:21             ` Eric Paris
2010-11-29 19:38               ` H. Peter Anvin
2010-11-29 21:49             ` Willy Tarreau
2010-11-29 23:31         ` Alan Cox
2010-11-30 11:58           ` Ingo Molnar
2010-11-20 11:05 ` Richard W.M. Jones
2010-11-19 21:12 Andy Walls
2010-11-19 23:22 ` Linus Torvalds
2010-11-20  2:40   ` Kees Cook
2010-11-20 19:47     ` Henrique de Moraes Holschuh
2010-11-29 22:58       ` Kevin Easton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).