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

From: Haoqin Huang

Date: Wed Jul 29 2026 - 22:54:11 EST


From: Haoqin Huang <haoqinhuang@xxxxxxxxxxx>

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 <haoqinhuang@xxxxxxxxxxx>
Signed-off-by: Rongwei Wang <zigiwang@xxxxxxxxxxx>
---
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