mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
5 ksmbd server fixes, 4 for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmGiaB4ACgkQiiy9cAdy T1H4PAv+OG94BZe+MyMdXgoRbOLiEeye7dm/TZnlpdtV96WmyrMkA4/1nyOc8k7F bNRn3ocuH3YCjjUB2kU6MZW5Kh9aSxULYgEC0zxuPcA9q4Ig4FehZD2U3r6fztFM U5Do9n1xRXjIgS/gI7DfZHSQ+SYVwBMAzRB3opplcs1CW68N7+WmKa5CQ6wH5vZM GqhU4+yFLhZGiXdxXTFF/bLKWer2PF9p5J4mLzRH0ugTG26tY7WnJcQIj+XrNTrN ccBSXr+9fHFFa9iGcLY08pghk8s1F6dXl/BLv7DFswKOoje7HsDLcWpNSVtVDojO 0Fg5vVtuDKapCOrpmtPt8Khc4qgkxY6VpJyELMCwJuxrSzTE59C54gQcgJfZO97d bpGeV9L6D6VTLTe1LhUFCRQbc0FFO3daPWRrxrZnvtJeef70xVSZPtrQqNtpnAtM RwkN2Rf/Enl03w9U25nv3ymlKoHERiR2XZADLfWc5XdB40Lxc+fDccyoVP1wmxT8 uicPpySr =bEt3 -----END PGP SIGNATURE----- Merge tag '5.16-rc2-ksmbd-fixes' of git://git.samba.org/ksmbd Pull ksmbd fixes from Steve French: "Five ksmbd server fixes, four of them for stable: - memleak fix - fix for default data stream on filesystems that don't support xattr - error logging fix - session setup fix - minor doc cleanup" * tag '5.16-rc2-ksmbd-fixes' of git://git.samba.org/ksmbd: ksmbd: fix memleak in get_file_stream_info() ksmbd: contain default data stream even if xattr is empty ksmbd: downgrade addition info error msg to debug in smb2_get_info_sec() docs: filesystem: cifs: ksmbd: Fix small layout issues ksmbd: Fix an error handling path in 'smb2_sess_setup()'
This commit is contained in:
commit
3498e7f2bb
@ -50,11 +50,11 @@ ksmbd.mountd (user space daemon)
|
||||
--------------------------------
|
||||
|
||||
ksmbd.mountd is userspace process to, transfer user account and password that
|
||||
are registered using ksmbd.adduser(part of utils for user space). Further it
|
||||
are registered using ksmbd.adduser (part of utils for user space). Further it
|
||||
allows sharing information parameters that parsed from smb.conf to ksmbd in
|
||||
kernel. For the execution part it has a daemon which is continuously running
|
||||
and connected to the kernel interface using netlink socket, it waits for the
|
||||
requests(dcerpc and share/user info). It handles RPC calls (at a minimum few
|
||||
requests (dcerpc and share/user info). It handles RPC calls (at a minimum few
|
||||
dozen) that are most important for file server from NetShareEnum and
|
||||
NetServerGetInfo. Complete DCE/RPC response is prepared from the user space
|
||||
and passed over to the associated kernel thread for the client.
|
||||
@ -154,11 +154,11 @@ Each layer
|
||||
1. Enable all component prints
|
||||
# sudo ksmbd.control -d "all"
|
||||
|
||||
2. Enable one of components(smb, auth, vfs, oplock, ipc, conn, rdma)
|
||||
2. Enable one of components (smb, auth, vfs, oplock, ipc, conn, rdma)
|
||||
# sudo ksmbd.control -d "smb"
|
||||
|
||||
3. Show what prints are enable.
|
||||
# cat/sys/class/ksmbd-control/debug
|
||||
3. Show what prints are enabled.
|
||||
# cat /sys/class/ksmbd-control/debug
|
||||
[smb] auth vfs oplock ipc conn [rdma]
|
||||
|
||||
4. Disable prints:
|
||||
|
@ -1697,8 +1697,10 @@ int smb2_sess_setup(struct ksmbd_work *work)
|
||||
negblob_off = le16_to_cpu(req->SecurityBufferOffset);
|
||||
negblob_len = le16_to_cpu(req->SecurityBufferLength);
|
||||
if (negblob_off < offsetof(struct smb2_sess_setup_req, Buffer) ||
|
||||
negblob_len < offsetof(struct negotiate_message, NegotiateFlags))
|
||||
return -EINVAL;
|
||||
negblob_len < offsetof(struct negotiate_message, NegotiateFlags)) {
|
||||
rc = -EINVAL;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
negblob = (struct negotiate_message *)((char *)&req->hdr.ProtocolId +
|
||||
negblob_off);
|
||||
@ -4457,6 +4459,12 @@ static void get_file_stream_info(struct ksmbd_work *work,
|
||||
&stat);
|
||||
file_info = (struct smb2_file_stream_info *)rsp->Buffer;
|
||||
|
||||
buf_free_len =
|
||||
smb2_calc_max_out_buf_len(work, 8,
|
||||
le32_to_cpu(req->OutputBufferLength));
|
||||
if (buf_free_len < 0)
|
||||
goto out;
|
||||
|
||||
xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list);
|
||||
if (xattr_list_len < 0) {
|
||||
goto out;
|
||||
@ -4465,12 +4473,6 @@ static void get_file_stream_info(struct ksmbd_work *work,
|
||||
goto out;
|
||||
}
|
||||
|
||||
buf_free_len =
|
||||
smb2_calc_max_out_buf_len(work, 8,
|
||||
le32_to_cpu(req->OutputBufferLength));
|
||||
if (buf_free_len < 0)
|
||||
goto out;
|
||||
|
||||
while (idx < xattr_list_len) {
|
||||
stream_name = xattr_list + idx;
|
||||
streamlen = strlen(stream_name);
|
||||
@ -4496,8 +4498,10 @@ static void get_file_stream_info(struct ksmbd_work *work,
|
||||
":%s", &stream_name[XATTR_NAME_STREAM_LEN]);
|
||||
|
||||
next = sizeof(struct smb2_file_stream_info) + streamlen * 2;
|
||||
if (next > buf_free_len)
|
||||
if (next > buf_free_len) {
|
||||
kfree(stream_buf);
|
||||
break;
|
||||
}
|
||||
|
||||
file_info = (struct smb2_file_stream_info *)&rsp->Buffer[nbytes];
|
||||
streamlen = smbConvertToUTF16((__le16 *)file_info->StreamName,
|
||||
@ -4514,6 +4518,7 @@ static void get_file_stream_info(struct ksmbd_work *work,
|
||||
file_info->NextEntryOffset = cpu_to_le32(next);
|
||||
}
|
||||
|
||||
out:
|
||||
if (!S_ISDIR(stat.mode) &&
|
||||
buf_free_len >= sizeof(struct smb2_file_stream_info) + 7 * 2) {
|
||||
file_info = (struct smb2_file_stream_info *)
|
||||
@ -4522,14 +4527,13 @@ static void get_file_stream_info(struct ksmbd_work *work,
|
||||
"::$DATA", 7, conn->local_nls, 0);
|
||||
streamlen *= 2;
|
||||
file_info->StreamNameLength = cpu_to_le32(streamlen);
|
||||
file_info->StreamSize = 0;
|
||||
file_info->StreamAllocationSize = 0;
|
||||
file_info->StreamSize = cpu_to_le64(stat.size);
|
||||
file_info->StreamAllocationSize = cpu_to_le64(stat.blocks << 9);
|
||||
nbytes += sizeof(struct smb2_file_stream_info) + streamlen;
|
||||
}
|
||||
|
||||
/* last entry offset should be 0 */
|
||||
file_info->NextEntryOffset = 0;
|
||||
out:
|
||||
kvfree(xattr_list);
|
||||
|
||||
rsp->OutputBufferLength = cpu_to_le32(nbytes);
|
||||
@ -5068,7 +5072,7 @@ static int smb2_get_info_sec(struct ksmbd_work *work,
|
||||
if (addition_info & ~(OWNER_SECINFO | GROUP_SECINFO | DACL_SECINFO |
|
||||
PROTECTED_DACL_SECINFO |
|
||||
UNPROTECTED_DACL_SECINFO)) {
|
||||
pr_err("Unsupported addition info: 0x%x)\n",
|
||||
ksmbd_debug(SMB, "Unsupported addition info: 0x%x)\n",
|
||||
addition_info);
|
||||
|
||||
pntsd->revision = cpu_to_le16(1);
|
||||
|
Loading…
Reference in New Issue
Block a user