[PATCH v3 3/5] zram: add level validation in zstd setup_params

Haoqin Huang <[email protected]> Thu, 30 Jul 2026 10:52:38 +0800
Newsgroups org.kernel.vger.linux-block,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
From: Haoqin Huang <[email protected]>

zstd_setup_params() currently accepts any level and silently clamps
it via zstd_get_params(). Add explicit bounds checking using
zstd_max_clevel() to reject out-of-range levels early with an error
message. Since zstd_max_clevel() is a runtime function, the check
is done here rather than in the generic validation path.

Signed-off-by: Haoqin Huang <[email protected]>
Signed-off-by: Rongwei Wang <[email protected]>
---
 drivers/block/zram/backend_zstd.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/block/zram/backend_zstd.c b/drivers/block/zram/backend_zstd.c
index 2584f47c9b3c..6febb366f76e 100644
--- a/drivers/block/zram/backend_zstd.c
+++ b/drivers/block/zram/backend_zstd.c
@@ -60,6 +60,11 @@ static int zstd_setup_params(struct zcomp_params *params)
 	params->drv_data = zp;
 	if (params->level == ZCOMP_PARAM_NOT_SET)
 		params->level = zstd_default_clevel();
+	else if (params->level < -(int)ZSTD_TARGETLENGTH_MAX ||
+		 params->level > zstd_max_clevel()) {
+		pr_err("zstd: invalid compression level %d\n", params->level);
+		goto error;
+	}
 
 	zp->cprm = zstd_get_params(params->level, PAGE_SIZE);
 
-- 
2.43.7