mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
four ksmbd server fixes, most also for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmeAJWIACgkQiiy9cAdy T1FPvQv/WJUcN5+1Kt/JyrijXYBNannwFsOZuQDielvTZduPdXYQqe+zMDcIaF3I wHD6/3+yRk6pXRD8ETtmdsV0GYQ8n1iTCN7pwKRTSeu5qv1ZFna8ImfzofEvrAsU Hywod8nXPF8IWCRB15qhAUIphI07mfBcFOQk84OsnM3UO2Lwc89A7siwaIwjQiWz +7CN1fuSfH9VqR5P5BtOGr8ZgMYSTQ9Tx4WyRH8XKWuznUeQdcrQfxO/NGyvdX+2 dfkKKWhMGJNR0Xrwg+5ocTCm/e+oVCTyRi07y9b3M+4n2DKzcMaqS5XKNZDqOsb9 L7GIBOM5tcyB6zBjH9NO+2fTwhoKQWt3wBHJV7ZWpcthCONZhPGHShNFJfdSmoAS 3WbDE4a3KOGsksTPG0JzHlUxGSW+bx4Bo5Thofk+bxxYsaY6JAQHnmZG36TQ8YTm 1FaI2aRiN9WYs7P6/7Di2BgznixcrNdjZLewtQbjxg/eybVbikB/I+dKeoo7C+ch ida0+Fh6 =cKlJ -----END PGP SIGNATURE----- Merge tag '6.13-rc6-ksmbd-server-fixes' of git://git.samba.org/ksmbd Pull smb server fixes from Steve French: "Four ksmbd server fixes, most also for stable: - fix for reporting special file type more accurately when POSIX extensions negotiated - minor cleanup - fix possible incorrect creation path when dirname is not present. In some cases, Windows apps create files without checking if they exist. - fix potential NULL pointer dereference sending interim response" * tag '6.13-rc6-ksmbd-server-fixes' of git://git.samba.org/ksmbd: ksmbd: Implement new SMB3 POSIX type ksmbd: fix unexpectedly changed path in ksmbd_vfs_kern_path_locked ksmbd: Remove unneeded if check in ksmbd_rdma_capable_netdev() ksmbd: fix a missing return value check bug
This commit is contained in:
commit
2144da2558
4 changed files with 56 additions and 3 deletions
|
@ -695,6 +695,9 @@ void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status)
|
|||
struct smb2_hdr *rsp_hdr;
|
||||
struct ksmbd_work *in_work = ksmbd_alloc_work_struct();
|
||||
|
||||
if (!in_work)
|
||||
return;
|
||||
|
||||
if (allocate_interim_rsp_buf(in_work)) {
|
||||
pr_err("smb_allocate_rsp_buf failed!\n");
|
||||
ksmbd_free_work_struct(in_work);
|
||||
|
@ -3991,6 +3994,26 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
|||
posix_info->DeviceId = cpu_to_le32(ksmbd_kstat->kstat->rdev);
|
||||
posix_info->HardLinks = cpu_to_le32(ksmbd_kstat->kstat->nlink);
|
||||
posix_info->Mode = cpu_to_le32(ksmbd_kstat->kstat->mode & 0777);
|
||||
switch (ksmbd_kstat->kstat->mode & S_IFMT) {
|
||||
case S_IFDIR:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFLNK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFCHR:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFBLK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFIFO:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFSOCK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT);
|
||||
}
|
||||
|
||||
posix_info->Inode = cpu_to_le64(ksmbd_kstat->kstat->ino);
|
||||
posix_info->DosAttributes =
|
||||
S_ISDIR(ksmbd_kstat->kstat->mode) ?
|
||||
|
@ -5181,6 +5204,26 @@ static int find_file_posix_info(struct smb2_query_info_rsp *rsp,
|
|||
file_info->AllocationSize = cpu_to_le64(stat.blocks << 9);
|
||||
file_info->HardLinks = cpu_to_le32(stat.nlink);
|
||||
file_info->Mode = cpu_to_le32(stat.mode & 0777);
|
||||
switch (stat.mode & S_IFMT) {
|
||||
case S_IFDIR:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFLNK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFCHR:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFBLK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFIFO:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFSOCK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT);
|
||||
}
|
||||
|
||||
file_info->DeviceId = cpu_to_le32(stat.rdev);
|
||||
|
||||
/*
|
||||
|
|
|
@ -502,4 +502,14 @@ static inline void *smb2_get_msg(void *buf)
|
|||
return buf + 4;
|
||||
}
|
||||
|
||||
#define POSIX_TYPE_FILE 0
|
||||
#define POSIX_TYPE_DIR 1
|
||||
#define POSIX_TYPE_SYMLINK 2
|
||||
#define POSIX_TYPE_CHARDEV 3
|
||||
#define POSIX_TYPE_BLKDEV 4
|
||||
#define POSIX_TYPE_FIFO 5
|
||||
#define POSIX_TYPE_SOCKET 6
|
||||
|
||||
#define POSIX_FILETYPE_SHIFT 12
|
||||
|
||||
#endif /* _SMB2PDU_H */
|
||||
|
|
|
@ -2283,8 +2283,7 @@ out:
|
|||
|
||||
ibdev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_UNKNOWN);
|
||||
if (ibdev) {
|
||||
if (rdma_frwr_is_supported(&ibdev->attrs))
|
||||
rdma_capable = true;
|
||||
rdma_capable = rdma_frwr_is_supported(&ibdev->attrs);
|
||||
ib_device_put(ibdev);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1264,6 +1264,8 @@ int ksmbd_vfs_kern_path_locked(struct ksmbd_work *work, char *name,
|
|||
filepath,
|
||||
flags,
|
||||
path);
|
||||
if (!is_last)
|
||||
next[0] = '/';
|
||||
if (err)
|
||||
goto out2;
|
||||
else if (is_last)
|
||||
|
@ -1271,7 +1273,6 @@ int ksmbd_vfs_kern_path_locked(struct ksmbd_work *work, char *name,
|
|||
path_put(parent_path);
|
||||
*parent_path = *path;
|
||||
|
||||
next[0] = '/';
|
||||
remain_len -= filename_len + 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue