On (10/25/14 17:26), Weijie Yang wrote: > Date: Sat, 25 Oct 2014 17:26:31 +0800 > From: Weijie Yang <weijie.yang@xxxxxxxxxxx> > To: 'Minchan Kim' <minchan@xxxxxxxxxx> > Cc: 'Andrew Morton' <akpm@xxxxxxxxxxxxxxxxxxxx>, 'Dan Streetman' > <ddstreet@xxxxxxxx>, 'Sergey Senozhatsky' <sergey.senozhatsky@xxxxxxxxx>, > 'Nitin Gupta' <ngupta@xxxxxxxxxx>, 'Linux-MM' <linux-mm@xxxxxxxxx>, > 'linux-kernel' <linux-kernel@xxxxxxxxxxxxxxx>, 'Weijie Yang' > <weijie.yang.kh@xxxxxxxxx> > Subject: [PATCH 2/2] zram: avoid NULL pointer access when reading > mem_used_total > X-Mailer: Microsoft Office Outlook 12.0 > > There is a rare NULL pointer bug in mem_used_total_show() in concurrent > situation, like this: > zram is not initialized, process A is a mem_used_total reader which runs > periodicity, while process B try to init zram. > > process A process B > access meta, get a NULL value > init zram, done > init_done() is true > access meta->mem_pool, get a NULL pointer BUG > > This patch fixes this issue. > > Signed-off-by: Weijie Yang <weijie.yang@xxxxxxxxxxx> Acked-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx> -ss > --- > drivers/block/zram/zram_drv.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c > index 64dd79a..2ffd7d8 100644 > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -99,11 +99,12 @@ static ssize_t mem_used_total_show(struct device *dev, > { > u64 val = 0; > struct zram *zram = dev_to_zram(dev); > - struct zram_meta *meta = zram->meta; > > down_read(&zram->init_lock); > - if (init_done(zram)) > + if (init_done(zram)) { > + struct zram_meta *meta = zram->meta; > val = zs_get_total_pages(meta->mem_pool); > + } > up_read(&zram->init_lock); > > return scnprintf(buf, PAGE_SIZE, "%llu\n", val << PAGE_SHIFT); > -- > 1.7.0.4 > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href