smb/client: check whether smb2_error_map_table is sorted in ascending order

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>
This commit is contained in:
ChenXiaoSong 2025-12-24 09:33:28 +08:00 committed by Steve French
parent c527e13a7a
commit 453382f15b
3 changed files with 23 additions and 0 deletions

View 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);
/*

View 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;
}

View 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);