smb: client: handle path separator of created SMB symlinks
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: 514d793e27
("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>
This commit is contained in:
parent
4508ec1735
commit
8bde59b20d
@ -5217,7 +5217,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;
|
||||
|
||||
@ -5231,7 +5231,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;
|
||||
@ -5254,7 +5255,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…
Reference in New Issue
Block a user