From: "Luck, Tony" <tony.luck@intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Cong Wang <xiyou.wangcong@gmail.com>,
linux-kernel@vger.kernel.org, linux-edac@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 1/2] ras: fix an off-by-one error in __find_elem()
Date: Tue, 16 Apr 2019 15:18:52 -0700 [thread overview]
Message-ID: <20190416221852.GA10781@agluck-desk> (raw)
In-Reply-To: <20190416090726.GD27892@zn.tnic>
On Tue, Apr 16, 2019 at 11:07:26AM +0200, Borislav Petkov wrote:
> On Mon, Apr 15, 2019 at 06:20:00PM -0700, Cong Wang wrote:
> > ce_arr.array[] is always within the range [0, ce_arr.n-1].
> > However, the binary search code in __find_elem() uses ce_arr.n
> > as the maximum index, which could lead to an off-by-one
> > out-of-bound access when the element after the last is exactly
> > the one just got deleted, that is, 'min' returned to caller as
> > 'ce_arr.n'.
>
> Sorry, I don't follow.
>
> There's a debugfs interface in /sys/kernel/debug/ras/cec/ with which you
> can input random PFNs and test the thing.
>
> Show me pls how this can happen with an example.
The array of previously seen pfn values is one page.
The problem case occurs when we've seen enough distinct
errors that we have filled every entry, then we try to
look up a pfn that is larger that any seen before.
The loop:
while (min < max) {
...
}
will terminate with "min" set to MAX_ELEMS. Then we
execute:
this_pfn = PFN(ca->array[min]);
which references beyond the end of the space allocated
for ca->array.
Probably won't crash, but we will read a garbage value
from whatever memory is allocated next.
Chances are high that the test:
if (this_pfn == pfn)
won't find that the garbage value matches the pfn that
we were looking for ... so we will likley be lucky and
not do anything too dumb. But we shouldn't just cross
our fingers and hope.
Fix looks mostly OK, but we should probably move the
if (to)
*to = min;
inside the new
if (min < ca->n) {
...
}
clause.
-Tony
next prev parent reply other threads:[~2019-04-16 22:18 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-16 1:20 [PATCH 1/2] ras: fix an off-by-one error in __find_elem() Cong Wang
2019-04-16 1:20 ` [PATCH 2/2] ras: close the race condition with timer Cong Wang
2019-04-16 9:58 ` Borislav Petkov
2019-04-16 17:09 ` Cong Wang
2019-04-16 17:42 ` Borislav Petkov
2019-04-16 18:00 ` Cong Wang
2019-04-16 18:06 ` Cong Wang
2019-04-16 9:07 ` [PATCH 1/2] ras: fix an off-by-one error in __find_elem() Borislav Petkov
2019-04-16 17:01 ` Cong Wang
2019-04-16 22:18 ` Luck, Tony [this message]
2019-04-16 23:18 ` Cong Wang
2019-04-16 23:28 ` Luck, Tony
2019-04-16 23:47 ` Cong Wang
2019-04-17 1:53 ` Luck, Tony
2019-04-17 2:31 ` Cong Wang
2019-04-17 2:37 ` Cong Wang
2019-04-17 21:15 ` Luck, Tony
2019-04-18 22:54 ` Cong Wang
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=20190416221852.GA10781@agluck-desk \
--to=tony.luck@intel.com \
--cc=bp@alien8.de \
--cc=linux-edac@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=xiyou.wangcong@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox