3 ksmbd SMB3 server fixes
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmgumngACgkQiiy9cAdy T1G11wwAmJTHyRxLx/koFy7cKCwL4+ttza0TdXD+NhRSjtb3Bd69OvDLWtefpa+0 NERFUM43/kJ4vIBeIw0mTaW8BVuVc5zna/yzkbPRN0ehdRnN1iuZTjHLJeqMvDt8 jNKfuRpC0IaC5DQxtVWMDmNDNSEQmK9zlcRVb2LhDTTBPSLlFIUcmUfJDXysyzwB 4I7Q2xG/OkpBx7oA7QQZEvzj4S80kcDRkWZK2sQ0EgwuEflc+rU6EUSJsEkenUTx fQiv6rKY5ul6QV29VytXGOK3yHDDVNmUQ/g0FcbdAwpXEXz2H+ZmjDCVpRkuGlVZ 9IZA6lYy6eEheyCMYcVWmhtQgs+96Oqez6Z+snQf4Sjq+op37bWotFBaB5/gRuPr lue43XfUbjRey8a8xTb0zNCwph9y5WaEez9dPR3BoHMHgTvvhrgFT4VL/iffGK9v fLcMWb+HgHasvRag07khSRNp1pJEnYPEMzhyFyHTVExtgr3jhktP2k6jtSVRScrW Dc2/pjfM =vrEs -----END PGP SIGNATURE----- Merge tag 'v6.15-rc8-ksmbd-server-fixes' of git://git.samba.org/ksmbd Pull smb server fixes from Steve French: - Fix for rename regression due to the recent VFS lookup changes - Fix write failure - locking fix for oplock handling * tag 'v6.15-rc8-ksmbd-server-fixes' of git://git.samba.org/ksmbd: ksmbd: use list_first_entry_or_null for opinfo_get_list() ksmbd: fix rename failure ksmbd: fix stream write failure
This commit is contained in:
commit
e0f8e1a7c1
2 changed files with 9 additions and 14 deletions
|
@ -146,12 +146,9 @@ static struct oplock_info *opinfo_get_list(struct ksmbd_inode *ci)
|
||||||
{
|
{
|
||||||
struct oplock_info *opinfo;
|
struct oplock_info *opinfo;
|
||||||
|
|
||||||
if (list_empty(&ci->m_op_list))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
down_read(&ci->m_lock);
|
down_read(&ci->m_lock);
|
||||||
opinfo = list_first_entry(&ci->m_op_list, struct oplock_info,
|
opinfo = list_first_entry_or_null(&ci->m_op_list, struct oplock_info,
|
||||||
op_entry);
|
op_entry);
|
||||||
if (opinfo) {
|
if (opinfo) {
|
||||||
if (opinfo->conn == NULL ||
|
if (opinfo->conn == NULL ||
|
||||||
!atomic_inc_not_zero(&opinfo->refcount))
|
!atomic_inc_not_zero(&opinfo->refcount))
|
||||||
|
|
|
@ -409,10 +409,15 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
|
||||||
ksmbd_debug(VFS, "write stream data pos : %llu, count : %zd\n",
|
ksmbd_debug(VFS, "write stream data pos : %llu, count : %zd\n",
|
||||||
*pos, count);
|
*pos, count);
|
||||||
|
|
||||||
|
if (*pos >= XATTR_SIZE_MAX) {
|
||||||
|
pr_err("stream write position %lld is out of bounds\n", *pos);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
size = *pos + count;
|
size = *pos + count;
|
||||||
if (size > XATTR_SIZE_MAX) {
|
if (size > XATTR_SIZE_MAX) {
|
||||||
size = XATTR_SIZE_MAX;
|
size = XATTR_SIZE_MAX;
|
||||||
count = (*pos + count) - XATTR_SIZE_MAX;
|
count = XATTR_SIZE_MAX - *pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
v_len = ksmbd_vfs_getcasexattr(idmap,
|
v_len = ksmbd_vfs_getcasexattr(idmap,
|
||||||
|
@ -426,13 +431,6 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v_len <= *pos) {
|
|
||||||
pr_err("stream write position %lld is out of bounds (stream length: %zd)\n",
|
|
||||||
*pos, v_len);
|
|
||||||
err = -EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (v_len < size) {
|
if (v_len < size) {
|
||||||
wbuf = kvzalloc(size, KSMBD_DEFAULT_GFP);
|
wbuf = kvzalloc(size, KSMBD_DEFAULT_GFP);
|
||||||
if (!wbuf) {
|
if (!wbuf) {
|
||||||
|
@ -684,7 +682,7 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const struct path *old_path,
|
||||||
struct ksmbd_file *parent_fp;
|
struct ksmbd_file *parent_fp;
|
||||||
int new_type;
|
int new_type;
|
||||||
int err, lookup_flags = LOOKUP_NO_SYMLINKS;
|
int err, lookup_flags = LOOKUP_NO_SYMLINKS;
|
||||||
int target_lookup_flags = LOOKUP_RENAME_TARGET;
|
int target_lookup_flags = LOOKUP_RENAME_TARGET | LOOKUP_CREATE;
|
||||||
|
|
||||||
if (ksmbd_override_fsids(work))
|
if (ksmbd_override_fsids(work))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue