From: "John Z. Bohach" <jzb@aexorsyst.com>
To: linux-kernel@vger.kernel.org, akpm <akpm@osdl.org>
Subject: Re: [PATCH] mpparse: prevent table index out-of-bounds
Date: Thu, 6 Apr 2006 22:34:00 -0700 [thread overview]
Message-ID: <200604062234.00455.jzb@aexorsyst.com> (raw)
In-Reply-To: <20060406131805.d6eb0fe7.rdunlap@xenotime.net>
On Thursday 06 April 2006 13:18, Randy.Dunlap wrote:
> On Thu, 6 Apr 2006 09:18:45 -0700 John Z. Bohach wrote:
>
> Re: mem= causes oops (was Re: BIOS causes (exposes?) modprobe (load_module)
> kernel oops)
>
> > I found the root cause, but don't know if its worth fixing. If the board
> > has more than 32 PCI busses on it, the mptable bus array will overwrite
> > its bounds for the PCI busses, and stomp on anything that's after it. In
> > this case, what got stomped on is the PAGE_KERNEL_EXEC variable, which
> > changed the bit-field settings for the page tables (cleared the 'present'
> > bit, and screwed up the rest), hence accounting for the page fault.
>
> Well, > 32 busses or just one busid value >= 32.
>
> > This can only happen if there are more than 32 PCI busses, so I'd say its
> > an _extremely_ rare condition on a desktop system. At any rate, the fix
> > would simply be to change the value of the #define in the mptable.h
> > header file (I forget which exactly, but its easy to find) from 32 to
> > 256. The side effect of that is that the kernel data area would grow, and
> > mostly be a total waste, since I can't fathom a desktop system with more
> > than 32 PCI busses. On arch's where more than 32 PCI busses are likely,
> > the #define is already 256.
>
> I think that the kernel init code should detect and prevent the
> data corruption. Here's a patch to do that, by ignoring busses
> whose busid value is too large.
Yeah, I follow your thinking, and was about to do the same thing, until
I consulted the book of armaments, in this case, the MP Spec. ver. 1.4.
Section 4.3.2, Bus Entries, Bus ID:
"An integer that identifies the bus entry. The BIOS assigns identifiers
starting at zero, sequentially."
Given this, I considered the kernel adequate. Nevertheless, your patch is a good
defensive programming method against buggy BIOS's. I haven't actually tested it,
but it looks like it'll be okay.
--john
prev parent reply other threads:[~2006-04-07 5:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-22 4:05 BIOS causes (exposes?) modprobe (load_module) kernel oops John Z. Bohach
2006-03-22 9:06 ` Arjan van de Ven
2006-03-23 3:48 ` John Z. Bohach
2006-03-23 5:26 ` John Z. Bohach
2006-03-23 5:42 ` Randy.Dunlap
2006-03-24 17:36 ` mem= causes oops (was Re: BIOS causes (exposes?) modprobe (load_module) kernel oops) John Z. Bohach
2006-03-25 0:32 ` Randy.Dunlap
2006-03-25 18:36 ` John Z. Bohach
2006-03-25 18:50 ` mem= causes oops Jan Engelhardt
2006-03-26 17:41 ` Randy.Dunlap
2006-03-26 18:40 ` Jan Engelhardt
2006-04-05 19:07 ` mem= causes oops (was Re: BIOS causes (exposes?) modprobe (load_module) kernel oops) Randy.Dunlap
2006-04-06 16:18 ` John Z. Bohach
2006-04-06 20:18 ` [PATCH] mpparse: prevent table index out-of-bounds Randy.Dunlap
2006-04-07 5:34 ` John Z. Bohach [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200604062234.00455.jzb@aexorsyst.com \
--to=jzb@aexorsyst.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.