summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorRoman Smirnov <r.smirnov@omp.ru>2025-03-31 11:22:49 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-04-25 10:45:32 +0200
commitb350dab6d4f42cf5dc6db871f05332f751dc88f7 (patch)
treec0bbafe4d15630c21292d8cac4edaea48fad37ed /fs
parent864ba5c651b03830f36f0906c21af05b15c1aaa6 (diff)
downloadlinux-b350dab6d4f42cf5dc6db871f05332f751dc88f7.tar.gz
linux-b350dab6d4f42cf5dc6db871f05332f751dc88f7.tar.bz2
linux-b350dab6d4f42cf5dc6db871f05332f751dc88f7.zip
cifs: fix integer overflow in match_server()
commit 2510859475d7f46ed7940db0853f3342bf1b65ee upstream. The echo_interval is not limited in any way during mounting, which makes it possible to write a large number to it. This can cause an overflow when multiplying ctx->echo_interval by HZ in match_server(). Add constraints for echo_interval to smb3_fs_context_parse_param(). Found by Linux Verification Center (linuxtesting.org) with Svace. Fixes: adfeb3e00e8e1 ("cifs: Make echo interval tunable") Cc: stable@vger.kernel.org Signed-off-by: Roman Smirnov <r.smirnov@omp.ru> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/smb/client/fs_context.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/smb/client/fs_context.c b/fs/smb/client/fs_context.c
index b90cc918de7a..d2e291ef104e 100644
--- a/fs/smb/client/fs_context.c
+++ b/fs/smb/client/fs_context.c
@@ -1299,6 +1299,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
ctx->closetimeo = HZ * result.uint_32;
break;
case Opt_echo_interval:
+ if (result.uint_32 < SMB_ECHO_INTERVAL_MIN ||
+ result.uint_32 > SMB_ECHO_INTERVAL_MAX) {
+ cifs_errorf(fc, "echo interval is out of bounds\n");
+ goto cifs_parse_mount_err;
+ }
ctx->echo_interval = result.uint_32;
break;
case Opt_snapshot: