mirror of
https://github.com/torvalds/linux.git
synced 2026-10-15 04:13:02 +02:00
smb/client: check if ntstatus_to_dos_map is sorted
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. We are going to define 3 functions to check the sort results, introduce the macro DEFINE_CHECK_SORT_FUNC() to reduce duplicate code. Signed-off-by: Youling Tang <tangyouling@kylinos.cn> Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
3c6c23ed94
commit
010ad1e895
|
|
@ -1911,6 +1911,12 @@ init_cifs(void)
|
|||
{
|
||||
int rc = 0;
|
||||
|
||||
#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
|
||||
rc = smb1_init_maperror();
|
||||
if (rc)
|
||||
return rc;
|
||||
#endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
|
||||
|
||||
rc = smb2_init_maperror();
|
||||
if (rc)
|
||||
return rc;
|
||||
|
|
|
|||
|
|
@ -256,3 +256,35 @@ map_and_check_smb_error(struct TCP_Server_Info *server,
|
|||
|
||||
return rc;
|
||||
}
|
||||
|
||||
#define DEFINE_CHECK_SORT_FUNC(__array, __field) \
|
||||
static int __init __array ## _is_sorted(void) \
|
||||
{ \
|
||||
unsigned int i; \
|
||||
\
|
||||
/* Check whether the array is sorted in ascending order */ \
|
||||
for (i = 1; i < ARRAY_SIZE(__array); i++) { \
|
||||
if (__array[i].__field >= \
|
||||
__array[i - 1].__field) \
|
||||
continue; \
|
||||
\
|
||||
pr_err(#__array " array order is incorrect\n"); \
|
||||
return -EINVAL; \
|
||||
} \
|
||||
\
|
||||
return 0; \
|
||||
}
|
||||
|
||||
/* ntstatus_to_dos_map_is_sorted */
|
||||
DEFINE_CHECK_SORT_FUNC(ntstatus_to_dos_map, ntstatus);
|
||||
|
||||
int __init smb1_init_maperror(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = ntstatus_to_dos_map_is_sorted();
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -234,6 +234,7 @@ int cifs_verify_signature(struct smb_rqst *rqst,
|
|||
* smb1maperror.c
|
||||
*/
|
||||
int map_smb_to_linux_error(char *buf, bool logErr);
|
||||
int smb1_init_maperror(void);
|
||||
int map_and_check_smb_error(struct TCP_Server_Info *server,
|
||||
struct mid_q_entry *mid, bool logErr);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user