Messages in this thread | | | Date | Fri, 17 Feb 2012 14:28:06 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH] Fix potentially derefencing uninitialized 'r'. |
| |
On Fri, 3 Feb 2012 17:20:56 +0900 Geunsik Lim <geunsik.lim@gmail.com> wrote:
> struct memblock_region 'r' will not be initialized potentially > because of while statement's condition in __next_mem_pfn_range()function. > Initialize struct memblock_region data structure by default. > > Signed-off-by: Geunsik Lim <geunsik.lim@samsung.com> > --- > mm/memblock.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/mm/memblock.c b/mm/memblock.c > index 77b5f22..867f5a2 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -671,7 +671,7 @@ void __init_memblock __next_mem_pfn_range(int *idx, int nid, > unsigned long *out_end_pfn, int *out_nid) > { > struct memblock_type *type = &memblock.memory; > - struct memblock_region *r; > + struct memblock_region *r = &type->regions[*idx]; > > while (++*idx < type->cnt) { > r = &type->regions[*idx];
The following `if' test prevents any such dereference.
Maybe you saw a compilation warning (I didn't). If so, unintialized_var() is one way of suppressing it.
A better way is to reorganise the code (nicely). Often that option isn't available.
| |