Four small CIFS/SMB3 fixes
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAl5IHmgACgkQiiy9cAdy T1Hv9gv/QzgtpGUkK+8mLkv6BCoc0vChvr6s3xIxuSBOnAdhe6km1NSwVek7lUxU Liupsw+mLOt4TO8hCsHKEIfR4QKnPp22UF0nUj6bYWMJH2+zNNwlcV1TF01xGW8t J7jTKNd0MYOC1jQ+NLX4pwAz85Sp6yw4iYxg+PBpgPjEOUlGFttVK7U22nDMR1cz hlNY8KfJ3CiAOQEGIu+lIpQAo2/WcvUUGKjDwOlIRUwsodPJdy5XCromPa4wktuS OcDcrehfs16QfYW6K7rFSvRvcHUJ9nOf/Ht31rm9kD3DL8nN3MSV2vVWzszq+b4y LFm/6Z0/rjYE9+W+/w0H5jFGatjGpChrGzzGTaTjqIEAh9xNFGmfd96ZpixGZpIL SaJD8ab0RBUJ5Q0DAmBJHcaWCuN1ELbGu2ZFJNiJROH53epaRtyi54ryVv9XHNsh RQTbmmnbTPPqlv4S0Rd++Z6H+eYBSU1Vbm7lmZzK84XHQ0w2ttnU+grVsxoUdPlb 530Yvu5z =IQBE -----END PGP SIGNATURE----- Merge tag '5.6-rc1-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull cifs fixes from Steve French: "Four small CIFS/SMB3 fixes. One (the EA overflow fix) for stable" * tag '5.6-rc1-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: make sure we do not overflow the max EA buffer size cifs: enable change notification for SMB2.1 dialect cifs: Fix mode output in debugging statements cifs: fix mount option display for sec=krb5i
This commit is contained in:
commit
288b27a06e
|
@ -601,7 +601,7 @@ static void access_flags_to_mode(__le32 ace_flags, int type, umode_t *pmode,
|
||||||
((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
|
((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
|
||||||
*pmode |= (S_IXUGO & (*pbits_to_set));
|
*pmode |= (S_IXUGO & (*pbits_to_set));
|
||||||
|
|
||||||
cifs_dbg(NOISY, "access flags 0x%x mode now 0x%x\n", flags, *pmode);
|
cifs_dbg(NOISY, "access flags 0x%x mode now %04o\n", flags, *pmode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +630,7 @@ static void mode_to_access_flags(umode_t mode, umode_t bits_to_use,
|
||||||
if (mode & S_IXUGO)
|
if (mode & S_IXUGO)
|
||||||
*pace_flags |= SET_FILE_EXEC_RIGHTS;
|
*pace_flags |= SET_FILE_EXEC_RIGHTS;
|
||||||
|
|
||||||
cifs_dbg(NOISY, "mode: 0x%x, access flags now 0x%x\n",
|
cifs_dbg(NOISY, "mode: %04o, access flags now 0x%x\n",
|
||||||
mode, *pace_flags);
|
mode, *pace_flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -414,7 +414,7 @@ cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
|
||||||
seq_puts(s, "ntlm");
|
seq_puts(s, "ntlm");
|
||||||
break;
|
break;
|
||||||
case Kerberos:
|
case Kerberos:
|
||||||
seq_printf(s, "krb5,cruid=%u", from_kuid_munged(&init_user_ns,ses->cred_uid));
|
seq_puts(s, "krb5");
|
||||||
break;
|
break;
|
||||||
case RawNTLMSSP:
|
case RawNTLMSSP:
|
||||||
seq_puts(s, "ntlmssp");
|
seq_puts(s, "ntlmssp");
|
||||||
|
@ -427,6 +427,10 @@ cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
|
||||||
|
|
||||||
if (ses->sign)
|
if (ses->sign)
|
||||||
seq_puts(s, "i");
|
seq_puts(s, "i");
|
||||||
|
|
||||||
|
if (ses->sectype == Kerberos)
|
||||||
|
seq_printf(s, ",cruid=%u",
|
||||||
|
from_kuid_munged(&init_user_ns, ses->cred_uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -4151,7 +4151,7 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
|
||||||
cifs_sb->mnt_gid = pvolume_info->linux_gid;
|
cifs_sb->mnt_gid = pvolume_info->linux_gid;
|
||||||
cifs_sb->mnt_file_mode = pvolume_info->file_mode;
|
cifs_sb->mnt_file_mode = pvolume_info->file_mode;
|
||||||
cifs_sb->mnt_dir_mode = pvolume_info->dir_mode;
|
cifs_sb->mnt_dir_mode = pvolume_info->dir_mode;
|
||||||
cifs_dbg(FYI, "file mode: 0x%hx dir mode: 0x%hx\n",
|
cifs_dbg(FYI, "file mode: %04ho dir mode: %04ho\n",
|
||||||
cifs_sb->mnt_file_mode, cifs_sb->mnt_dir_mode);
|
cifs_sb->mnt_file_mode, cifs_sb->mnt_dir_mode);
|
||||||
|
|
||||||
cifs_sb->actimeo = pvolume_info->actimeo;
|
cifs_sb->actimeo = pvolume_info->actimeo;
|
||||||
|
|
|
@ -1648,7 +1648,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, umode_t mode)
|
||||||
struct TCP_Server_Info *server;
|
struct TCP_Server_Info *server;
|
||||||
char *full_path;
|
char *full_path;
|
||||||
|
|
||||||
cifs_dbg(FYI, "In cifs_mkdir, mode = 0x%hx inode = 0x%p\n",
|
cifs_dbg(FYI, "In cifs_mkdir, mode = %04ho inode = 0x%p\n",
|
||||||
mode, inode);
|
mode, inode);
|
||||||
|
|
||||||
cifs_sb = CIFS_SB(inode->i_sb);
|
cifs_sb = CIFS_SB(inode->i_sb);
|
||||||
|
|
|
@ -1116,7 +1116,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
|
||||||
void *data[1];
|
void *data[1];
|
||||||
struct smb2_file_full_ea_info *ea = NULL;
|
struct smb2_file_full_ea_info *ea = NULL;
|
||||||
struct kvec close_iov[1];
|
struct kvec close_iov[1];
|
||||||
int rc;
|
struct smb2_query_info_rsp *rsp;
|
||||||
|
int rc, used_len = 0;
|
||||||
|
|
||||||
if (smb3_encryption_required(tcon))
|
if (smb3_encryption_required(tcon))
|
||||||
flags |= CIFS_TRANSFORM_REQ;
|
flags |= CIFS_TRANSFORM_REQ;
|
||||||
|
@ -1139,6 +1140,38 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
|
||||||
cifs_sb);
|
cifs_sb);
|
||||||
if (rc == -ENODATA)
|
if (rc == -ENODATA)
|
||||||
goto sea_exit;
|
goto sea_exit;
|
||||||
|
} else {
|
||||||
|
/* If we are adding a attribute we should first check
|
||||||
|
* if there will be enough space available to store
|
||||||
|
* the new EA. If not we should not add it since we
|
||||||
|
* would not be able to even read the EAs back.
|
||||||
|
*/
|
||||||
|
rc = smb2_query_info_compound(xid, tcon, utf16_path,
|
||||||
|
FILE_READ_EA,
|
||||||
|
FILE_FULL_EA_INFORMATION,
|
||||||
|
SMB2_O_INFO_FILE,
|
||||||
|
CIFSMaxBufSize -
|
||||||
|
MAX_SMB2_CREATE_RESPONSE_SIZE -
|
||||||
|
MAX_SMB2_CLOSE_RESPONSE_SIZE,
|
||||||
|
&rsp_iov[1], &resp_buftype[1], cifs_sb);
|
||||||
|
if (rc == 0) {
|
||||||
|
rsp = (struct smb2_query_info_rsp *)rsp_iov[1].iov_base;
|
||||||
|
used_len = le32_to_cpu(rsp->OutputBufferLength);
|
||||||
|
}
|
||||||
|
free_rsp_buf(resp_buftype[1], rsp_iov[1].iov_base);
|
||||||
|
resp_buftype[1] = CIFS_NO_BUFFER;
|
||||||
|
memset(&rsp_iov[1], 0, sizeof(rsp_iov[1]));
|
||||||
|
rc = 0;
|
||||||
|
|
||||||
|
/* Use a fudge factor of 256 bytes in case we collide
|
||||||
|
* with a different set_EAs command.
|
||||||
|
*/
|
||||||
|
if(CIFSMaxBufSize - MAX_SMB2_CREATE_RESPONSE_SIZE -
|
||||||
|
MAX_SMB2_CLOSE_RESPONSE_SIZE - 256 <
|
||||||
|
used_len + ea_name_len + ea_value_len + 1) {
|
||||||
|
rc = -ENOSPC;
|
||||||
|
goto sea_exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4795,6 +4828,7 @@ struct smb_version_operations smb21_operations = {
|
||||||
.wp_retry_size = smb2_wp_retry_size,
|
.wp_retry_size = smb2_wp_retry_size,
|
||||||
.dir_needs_close = smb2_dir_needs_close,
|
.dir_needs_close = smb2_dir_needs_close,
|
||||||
.enum_snapshots = smb3_enum_snapshots,
|
.enum_snapshots = smb3_enum_snapshots,
|
||||||
|
.notify = smb3_notify,
|
||||||
.get_dfs_refer = smb2_get_dfs_refer,
|
.get_dfs_refer = smb2_get_dfs_refer,
|
||||||
.select_sectype = smb2_select_sectype,
|
.select_sectype = smb2_select_sectype,
|
||||||
#ifdef CONFIG_CIFS_XATTR
|
#ifdef CONFIG_CIFS_XATTR
|
||||||
|
|
Loading…
Reference in a new issue