Commit ba271ca4 authored by Murad Masimov's avatar Murad Masimov Committed by Li Lingfeng
Browse files

cifs: Fix integer overflow while processing acdirmax mount option

stable inclusion
from stable-v6.6.84
commit 9e438d0410a4002d24f420f2c28897ba2dc0af64
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IBY44A
CVE: CVE-2025-21963

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=9e438d0410a4002d24f420f2c28897ba2dc0af64



--------------------------------

[ Upstream commit 5b29891f91dfb8758baf1e2217bef4b16b2b165b ]

User-provided mount parameter acdirmax of type u32 is intended to have
an upper limit, but before it is validated, the value is converted from
seconds to jiffies which can lead to an integer overflow.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 4c9f9481 ("cifs: Add new mount parameter "acdirmax" to allow caching directory metadata")
Signed-off-by: default avatarMurad Masimov <m.masimov@mt-integration.ru>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarLi Lingfeng <lilingfeng3@huawei.com>
parent 02c4b4f2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1269,11 +1269,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
		ctx->acregmax = HZ * result.uint_32;
		break;
	case Opt_acdirmax:
		ctx->acdirmax = HZ * result.uint_32;
		if (ctx->acdirmax > CIFS_MAX_ACTIMEO) {
		if (result.uint_32 > CIFS_MAX_ACTIMEO / HZ) {
			cifs_errorf(fc, "acdirmax too large\n");
			goto cifs_parse_mount_err;
		}
		ctx->acdirmax = HZ * result.uint_32;
		break;
	case Opt_actimeo:
		if (HZ * result.uint_32 > CIFS_MAX_ACTIMEO) {