]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb/client: check whether smb2_error_map_table is sorted in ascending order
authorChenXiaoSong <chenxiaosong@kylinos.cn>
Wed, 24 Dec 2025 01:33:28 +0000 (09:33 +0800)
committerSteve French <stfrench@microsoft.com>
Mon, 9 Feb 2026 03:24:41 +0000 (21:24 -0600)
Although the array is sorted at build time, verify the ordering again
when cifs.ko is loaded to avoid potential regressions introduced by
future script changes.

Suggested-by: David Howells <dhowells@redhat.com>
Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Reviewed-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/linux-cifs/20260106071507.1420900-4-chenxiaosong.chenxiaosong@linux.dev/
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cifsfs.c
fs/smb/client/smb2maperror.c
fs/smb/client/smb2proto.h

index c96d09be11a5fa855009c19aadfe3f2d8058024b..87d8c93fcff46d37e36cb0c5e72da31a9bfb9c55 100644 (file)
@@ -1904,6 +1904,11 @@ static int __init
 init_cifs(void)
 {
        int rc = 0;
+
+       rc = smb2_init_maperror();
+       if (rc)
+               return rc;
+
        cifs_proc_init();
        INIT_LIST_HEAD(&cifs_tcp_ses_list);
 /*
index 42fec9abeac7f29006fad6a760e11b504f336590..c36cfe707bf112892e5b8021a930fd959dd7f836 100644 (file)
@@ -75,3 +75,20 @@ map_smb2_to_linux_error(char *buf, bool log_err)
                smb_EIO1(smb_eio_trace_smb2_received_error, le32_to_cpu(smb2err));
        return rc;
 }
+
+int __init smb2_init_maperror(void)
+{
+       unsigned int i;
+
+       /* Check whether the array is sorted in ascending order */
+       for (i = 1; i < ARRAY_SIZE(smb2_error_map_table); i++) {
+               if (smb2_error_map_table[i].smb2_status >=
+                   smb2_error_map_table[i - 1].smb2_status)
+                       continue;
+
+               pr_err("smb2_error_map_table array order is incorrect\n");
+               return -EINVAL;
+       }
+
+       return 0;
+}
index abd62cb2cecd195a053412e5a9b685e13cd77216..c7759e37d975f11f7d9693a06600f7cf25307ffa 100644 (file)
@@ -23,6 +23,7 @@ struct smb_rqst;
  *****************************************************************
  */
 int map_smb2_to_linux_error(char *buf, bool log_err);
+int smb2_init_maperror(void);
 int smb2_check_message(char *buf, unsigned int pdu_len, unsigned int len,
                       struct TCP_Server_Info *server);
 unsigned int smb2_calc_size(void *buf);