diff options
author | Paolo Abeni <[email protected]> | 2024-10-21 09:14:18 +0200 |
---|---|---|
committer | Paolo Abeni <[email protected]> | 2024-10-21 09:14:18 +0200 |
commit | 91afa49a3eda8ebf902ce68f02cb16b48c879b6a (patch) | |
tree | 3ceca7290ee7358c8e647b27f992604ce9c7ec20 /fs/smb/client/cifs_unicode.c | |
parent | 906c68657850796023a8b183d1ca681ebbd6ef98 (diff) | |
parent | 07d6bf634bc8f93caf8920c9d61df761645336e2 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR (net-6.12-rc4).
Conflicts:
107a034d5c1e ("net/mlx5: qos: Store rate groups in a qos domain")
1da9cfd6c41c ("net/mlx5: Unregister notifier on eswitch init failure")
Signed-off-by: Paolo Abeni <[email protected]>
Diffstat (limited to 'fs/smb/client/cifs_unicode.c')
-rw-r--r-- | fs/smb/client/cifs_unicode.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/fs/smb/client/cifs_unicode.c b/fs/smb/client/cifs_unicode.c index 79d99a913944..4cc6e0896fad 100644 --- a/fs/smb/client/cifs_unicode.c +++ b/fs/smb/client/cifs_unicode.c @@ -484,10 +484,21 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen, /** * Remap spaces and periods found at the end of every * component of the path. The special cases of '.' and - * '..' do not need to be dealt with explicitly because - * they are addressed in namei.c:link_path_walk(). + * '..' are need to be handled because of symlinks. + * They are treated as non-end-of-string to avoid + * remapping and breaking symlinks pointing to . or .. **/ - if ((i == srclen - 1) || (source[i+1] == '\\')) + if ((i == 0 || source[i-1] == '\\') && + source[i] == '.' && + (i == srclen-1 || source[i+1] == '\\')) + end_of_string = false; /* "." case */ + else if (i >= 1 && + (i == 1 || source[i-2] == '\\') && + source[i-1] == '.' && + source[i] == '.' && + (i == srclen-1 || source[i+1] == '\\')) + end_of_string = false; /* ".." case */ + else if ((i == srclen - 1) || (source[i+1] == '\\')) end_of_string = true; else end_of_string = false; |