Messages in this thread | | | Date | Mon, 22 Dec 2014 13:05:39 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH] lib/genalloc.c: fix the end addr check in addr_in_gen_pool() |
| |
On Thu, 18 Dec 2014 18:30:59 -0800 Toshi Kikuchi <toshik@chromium.org> wrote:
> Since chunk->end_addr is (chunk->start_addr + size - 1), > the end address to compare should be (start + size - 1). > > Signed-off-by: Toshi Kikuchi <toshik@chromium.org> > --- > lib/genalloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/genalloc.c b/lib/genalloc.c > index 2e65d20..42a95e9 100644 > --- a/lib/genalloc.c > +++ b/lib/genalloc.c > @@ -415,7 +415,7 @@ bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start, > size_t size) > { > bool found = false; > - unsigned long end = start + size; > + unsigned long end = start + size - 1; > struct gen_pool_chunk *chunk; > > rcu_read_lock();
urgh. gen_pool_chunk.end_addr should have been made exclusive, not inclusive. Or switch to start_addr/size. The code would be considerably nicer that way.
And the struct gen_pool_chunk definition should be moved into genalloc.c. I'm not sure what drivers/acpi/apei/ghes.c is doing fiddling around with genalloc internals, but it should stop doing it.
Sigh :(
| |