smb: client: handle path separator of created SMB symlinks
[ Upstream commit 8bde59b20de06339d598e8b05e5195f7c631c38b ] Convert path separator to CIFS_DIR_SEP(cifs_sb) from symlink target before sending it over the wire otherwise the created SMB symlink may become innaccesible from server side. Fixes: 514d793e27a3 ("smb: client: allow creating symlinks via reparse points") Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
1b5f2928cc
commit
fff4045e71
@ -5212,7 +5212,7 @@ static int smb2_create_reparse_symlink(const unsigned int xid,
|
||||
struct inode *new;
|
||||
struct kvec iov;
|
||||
__le16 *path;
|
||||
char *sym;
|
||||
char *sym, sep = CIFS_DIR_SEP(cifs_sb);
|
||||
u16 len, plen;
|
||||
int rc = 0;
|
||||
|
||||
@ -5226,7 +5226,8 @@ static int smb2_create_reparse_symlink(const unsigned int xid,
|
||||
.symlink_target = sym,
|
||||
};
|
||||
|
||||
path = cifs_convert_path_to_utf16(symname, cifs_sb);
|
||||
convert_delimiter(sym, sep);
|
||||
path = cifs_convert_path_to_utf16(sym, cifs_sb);
|
||||
if (!path) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
@ -5249,7 +5250,10 @@ static int smb2_create_reparse_symlink(const unsigned int xid,
|
||||
buf->PrintNameLength = cpu_to_le16(plen);
|
||||
memcpy(buf->PathBuffer, path, plen);
|
||||
buf->Flags = cpu_to_le32(*symname != '/' ? SYMLINK_FLAG_RELATIVE : 0);
|
||||
if (*sym != sep)
|
||||
buf->Flags = cpu_to_le32(SYMLINK_FLAG_RELATIVE);
|
||||
|
||||
convert_delimiter(sym, '/');
|
||||
iov.iov_base = buf;
|
||||
iov.iov_len = len;
|
||||
new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
|
||||
|
Loading…
x
Reference in New Issue
Block a user