6 smb3 client fixes, 3 for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmIOMicACgkQiiy9cAdy T1E8cgwAtD98XENDLvfJ/MlulI3xEY5fv2Pirwx8HVyMO5eM6Rw97DkgBRuOdGpT u0Z06mSkpQxS8r9w4DSSSsnQpA9Mz7/of0rU698Qqv34/jLRidySJD9iPgf7wijb 24IIxXGQt8RVsouRguEQ5b114HzGAwSJFJBt4oJFbiQX8tVdgPTB3/JS4enfLiQH 1tfDnQEm4P7xqoRFwzd7kMJb8V2oiM1I6JwKYc4q5KrGfwJJnIKSsePIztfooxQ0 NS7FbzYoSTH2QgbcwFHYbPSgzyeqo4Ai6Uxz7XPtv1LL9jCYrmAtJrkuVr9QlN2M nlac2dcuLYI6WwNZIO7lv+w0EG4xS9xuXT1aGz5Qgosy/6ap/Ed2RO8OgC35a1dV D3toAZeuyWVISgNQedntUct+XiF9hsQ953KufAsXUX0yWVu8XvvnpS90Oc2QMq0d JODJo97Nz2VLn6nAs2qpSDPo4qkZQE2fqeJM/4laVg8S+rqZ3sIbYNK+SVlKtARG ECJAJB/Q =Nwq6 -----END PGP SIGNATURE----- Merge tag '5.17-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull cifs fixes from Steve French: "Six small smb3 client fixes, three for stable: - fix for snapshot mount option - two ACL related fixes - use after free race fix - fix for confusing warning message logged with older dialects" * tag '5.17-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: fix confusing unneeded warning message on smb2.1 and earlier cifs: modefromsids must add an ACE for authenticated users cifs: fix double free race when mount fails in cifs_get_root() cifs: do not use uninitialized data in the owner/group sid cifs: fix set of group SID via NTSD xattrs smb3: fix snapshot mount option
This commit is contained in:
Коммит
7476b043b1
|
@ -949,6 +949,9 @@ static void populate_new_aces(char *nacl_base,
|
|||
pnntace = (struct cifs_ace *) (nacl_base + nsize);
|
||||
nsize += setup_special_mode_ACE(pnntace, nmode);
|
||||
num_aces++;
|
||||
pnntace = (struct cifs_ace *) (nacl_base + nsize);
|
||||
nsize += setup_authusers_ACE(pnntace);
|
||||
num_aces++;
|
||||
goto set_size;
|
||||
}
|
||||
|
||||
|
@ -1297,7 +1300,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd,
|
|||
|
||||
if (uid_valid(uid)) { /* chown */
|
||||
uid_t id;
|
||||
nowner_sid_ptr = kmalloc(sizeof(struct cifs_sid),
|
||||
nowner_sid_ptr = kzalloc(sizeof(struct cifs_sid),
|
||||
GFP_KERNEL);
|
||||
if (!nowner_sid_ptr) {
|
||||
rc = -ENOMEM;
|
||||
|
@ -1326,7 +1329,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd,
|
|||
}
|
||||
if (gid_valid(gid)) { /* chgrp */
|
||||
gid_t id;
|
||||
ngroup_sid_ptr = kmalloc(sizeof(struct cifs_sid),
|
||||
ngroup_sid_ptr = kzalloc(sizeof(struct cifs_sid),
|
||||
GFP_KERNEL);
|
||||
if (!ngroup_sid_ptr) {
|
||||
rc = -ENOMEM;
|
||||
|
@ -1613,7 +1616,7 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 *pnmode,
|
|||
nsecdesclen = secdesclen;
|
||||
if (pnmode && *pnmode != NO_CHANGE_64) { /* chmod */
|
||||
if (mode_from_sid)
|
||||
nsecdesclen += sizeof(struct cifs_ace);
|
||||
nsecdesclen += 2 * sizeof(struct cifs_ace);
|
||||
else /* cifsacl */
|
||||
nsecdesclen += 5 * sizeof(struct cifs_ace);
|
||||
} else { /* chown */
|
||||
|
|
|
@ -919,6 +919,7 @@ cifs_smb3_do_mount(struct file_system_type *fs_type,
|
|||
|
||||
out_super:
|
||||
deactivate_locked_super(sb);
|
||||
return root;
|
||||
out:
|
||||
if (cifs_sb) {
|
||||
kfree(cifs_sb->prepath);
|
||||
|
|
|
@ -149,7 +149,7 @@ const struct fs_parameter_spec smb3_fs_parameters[] = {
|
|||
fsparam_u32("echo_interval", Opt_echo_interval),
|
||||
fsparam_u32("max_credits", Opt_max_credits),
|
||||
fsparam_u32("handletimeout", Opt_handletimeout),
|
||||
fsparam_u32("snapshot", Opt_snapshot),
|
||||
fsparam_u64("snapshot", Opt_snapshot),
|
||||
fsparam_u32("max_channels", Opt_max_channels),
|
||||
|
||||
/* Mount options which take string value */
|
||||
|
@ -1078,7 +1078,7 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
|
|||
ctx->echo_interval = result.uint_32;
|
||||
break;
|
||||
case Opt_snapshot:
|
||||
ctx->snapshot_time = result.uint_32;
|
||||
ctx->snapshot_time = result.uint_64;
|
||||
break;
|
||||
case Opt_max_credits:
|
||||
if (result.uint_32 < 20 || result.uint_32 > 60000) {
|
||||
|
|
|
@ -127,11 +127,6 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)
|
|||
struct cifs_server_iface *ifaces = NULL;
|
||||
size_t iface_count;
|
||||
|
||||
if (ses->server->dialect < SMB30_PROT_ID) {
|
||||
cifs_dbg(VFS, "multichannel is not supported on this protocol version, use 3.0 or above\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
spin_lock(&ses->chan_lock);
|
||||
|
||||
new_chan_count = old_chan_count = ses->chan_count;
|
||||
|
@ -145,6 +140,12 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (ses->server->dialect < SMB30_PROT_ID) {
|
||||
spin_unlock(&ses->chan_lock);
|
||||
cifs_dbg(VFS, "multichannel is not supported on this protocol version, use 3.0 or above\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(ses->server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) {
|
||||
ses->chan_max = 1;
|
||||
spin_unlock(&ses->chan_lock);
|
||||
|
|
|
@ -175,11 +175,13 @@ static int cifs_xattr_set(const struct xattr_handler *handler,
|
|||
switch (handler->flags) {
|
||||
case XATTR_CIFS_NTSD_FULL:
|
||||
aclflags = (CIFS_ACL_OWNER |
|
||||
CIFS_ACL_GROUP |
|
||||
CIFS_ACL_DACL |
|
||||
CIFS_ACL_SACL);
|
||||
break;
|
||||
case XATTR_CIFS_NTSD:
|
||||
aclflags = (CIFS_ACL_OWNER |
|
||||
CIFS_ACL_GROUP |
|
||||
CIFS_ACL_DACL);
|
||||
break;
|
||||
case XATTR_CIFS_ACL:
|
||||
|
|
Загрузка…
Ссылка в новой задаче