diff options
author | Hyunchul Lee <hyc.lee@gmail.com> | 2021-09-17 22:14:08 +0900 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2021-09-17 17:18:48 -0500 |
commit | f58eae6c5fa882d6d0a6b7587a099602a59d57b5 (patch) | |
tree | 348ec6f925414c7a37b5f5c2f94a7b0c9b5a0392 /fs/ksmbd/misc.h | |
parent | a9b3043de47b7f8cbe38c36aee572526665b6315 (diff) | |
download | lwn-f58eae6c5fa882d6d0a6b7587a099602a59d57b5.tar.gz lwn-f58eae6c5fa882d6d0a6b7587a099602a59d57b5.zip |
ksmbd: prevent out of share access
Because of .., files outside the share directory
could be accessed. To prevent this, normalize
the given path and remove all . and ..
components.
In addition to the usual large set of regression tests (smbtorture
and xfstests), ran various tests on this to specifically check
path name validation including libsmb2 tests to verify path
normalization:
./examples/smb2-ls-async smb://172.30.1.15/homes2/../
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/../
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/../../
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/../
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/..bar/
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/bar../
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/bar..
./examples/smb2-ls-async smb://172.30.1.15/homes2/foo/bar../../../../
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/ksmbd/misc.h')
-rw-r--r-- | fs/ksmbd/misc.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h index af8717d4d85b..b7b10139ada2 100644 --- a/fs/ksmbd/misc.h +++ b/fs/ksmbd/misc.h @@ -16,8 +16,7 @@ int ksmbd_validate_filename(char *filename); int parse_stream_name(char *filename, char **stream_name, int *s_type); char *convert_to_nt_pathname(char *filename, char *sharepath); int get_nlink(struct kstat *st); -void ksmbd_conv_path_to_unix(char *path); -void ksmbd_strip_last_slash(char *path); +char *ksmbd_conv_path_to_unix(char *path); void ksmbd_conv_path_to_windows(char *path); char *ksmbd_extract_sharename(char *treename); char *convert_to_unix_name(struct ksmbd_share_config *share, char *name); |