[PATCH 5.10 5.15 6.1] zram: check comp is non-NULL before calling comp_destroy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a pre-requisite for the backport of commit 74363ec674cb ("zram:
fix uninitialized ZRAM not releasing backing device"), which has been
implemented differently in commit 7ac07a26dea7 ("zram: preparation for
multi-zcomp support") upstream.

We only need to ensure that zcomp_destroy is not called with a NULL
comp, so add this check as the other commit cannot be backported easily.

Stable-dep-of: 74363ec674cb ("zram: fix uninitialized ZRAM not releasing backing device")
Link: https://lore.kernel.org/Z3ytcILx4S1v_ueJ@xxxxxxxxxxxxx
Suggested-by: Kairui Song <kasong@xxxxxxxxxxx>
Signed-off-by: Dominique Martinet <dominique.martinet@xxxxxxxxxxxxxxxxx>
---
This is the fix suggested by kasong in reply to my report (his mail
didn't make it to lkml because of client sending html)

This applies cleanly on all 3 branches, and I've tested it works
properly on 5.10 (e.g. I can allocate and free zram devices fine)

I have no preference on which way forward is taken, the problematic
patch can be dropped for a cycle while this is sorted out...


Also, Kasong pointed to another issue he sent a patch for just now:
https://lore.kernel.org/all/20250107065446.86928-1-ryncsn@xxxxxxxxx/

Before 74363ec674cb ("zram: fix uninitialized ZRAM not releasing backing
device") that was indeed not a problem so I confirm this is a
regression, even if it is unlikely.
It doesn't look exploitable by unprivileged users anyway so I don't have
any opinion on whether the patches should be held until upstream picks
this latest fix up as well either.

Thanks,
Dominique


 drivers/block/zram/zram_drv.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index b83181357f36..b4133258e1bf 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1734,5 +1734,6 @@ static void zram_reset_device(struct zram *zram)
 	zram->disksize = 0;
 	memset(&zram->stats, 0, sizeof(zram->stats));
-	zcomp_destroy(zram->comp);
+	if (zram->comp)
+		zcomp_destroy(zram->comp);
 	zram->comp = NULL;
 	reset_bdev(zram);
-- 
2.39.5






[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux