Skip to content

Commit

Permalink
drivers/block/zram/zram_drv.c: do not keep dangling zcomp pointer aft…
Browse files Browse the repository at this point in the history
…er zram reset

We do all reset operations under write lock, so we don't need to save
->disksize and ->comp to stack variables.  Another thing is that ->comp is
freed during zram reset, but comp pointer is not NULL-ed, so zram keeps
the freed pointer value.

Link: https://lkml.kernel.org/r/20220824035100.971816-1-senozhatsky@chromium.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
  • Loading branch information
sergey-senozhatsky authored and akpm00 committed Sep 12, 2022
1 parent 67e139b commit 6d2453c
Showing 1 changed file with 4 additions and 9 deletions.
13 changes: 4 additions & 9 deletions drivers/block/zram/zram_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1710,9 +1710,6 @@ static int zram_rw_page(struct block_device *bdev, sector_t sector,

static void zram_reset_device(struct zram *zram)
{
struct zcomp *comp;
u64 disksize;

down_write(&zram->init_lock);

zram->limit_pages = 0;
Expand All @@ -1722,17 +1719,15 @@ static void zram_reset_device(struct zram *zram)
return;
}

comp = zram->comp;
disksize = zram->disksize;
zram->disksize = 0;

set_capacity_and_notify(zram->disk, 0);
part_stat_set_all(zram->disk->part0, 0);

/* I/O operation under all of CPU are done so let's free */
zram_meta_free(zram, disksize);
zram_meta_free(zram, zram->disksize);
zram->disksize = 0;
memset(&zram->stats, 0, sizeof(zram->stats));
zcomp_destroy(comp);
zcomp_destroy(zram->comp);
zram->comp = NULL;
reset_bdev(zram);

up_write(&zram->init_lock);
Expand Down

0 comments on commit 6d2453c

Please sign in to comment.