summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve French <smfrench@gmail.com>2021-06-01 04:13:30 +0300
committerGitHub <noreply@github.com>2021-06-01 04:13:30 +0300
commit55b4fcdf0fe8e36d180dcca90a7a293de20f703a (patch)
tree68d758c65f564dea50368d3c88418059bb5dc97b
parent10a96b2b45e0d1fb7d6ecd7fa7fc4d3ee9915c2b (diff)
parent2ae1a6cc43027d84e33819ac4376c5e5e11b4152 (diff)
downloadlinux-55b4fcdf0fe8e36d180dcca90a7a293de20f703a.tar.xz
Merge pull request #52 from namjaejeon/cifsd-for-next
cifsd-fixes
-rw-r--r--fs/cifsd/smb2ops.c2
-rw-r--r--fs/cifsd/smb2pdu.c2
-rw-r--r--fs/cifsd/smb2pdu.h4
-rw-r--r--fs/cifsd/smbacl.h15
-rw-r--r--fs/cifsd/transport_ipc.h6
-rw-r--r--fs/cifsd/transport_tcp.c8
-rw-r--r--fs/cifsd/vfs.c28
-rw-r--r--fs/cifsd/vfs_cache.h16
8 files changed, 45 insertions, 36 deletions
diff --git a/fs/cifsd/smb2ops.c b/fs/cifsd/smb2ops.c
index 945bc6a78d3c..c47d60bce9d4 100644
--- a/fs/cifsd/smb2ops.c
+++ b/fs/cifsd/smb2ops.c
@@ -227,7 +227,7 @@ void init_smb3_0_server(struct ksmbd_conn *conn)
conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION &&
- conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)
+ conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)
conn->vals->capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
}
diff --git a/fs/cifsd/smb2pdu.c b/fs/cifsd/smb2pdu.c
index f68e2638d629..3e112fbdc2d9 100644
--- a/fs/cifsd/smb2pdu.c
+++ b/fs/cifsd/smb2pdu.c
@@ -560,7 +560,7 @@ int smb2_allocate_rsp_buf(struct ksmbd_work *work)
sz = large_sz;
if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_TBUF &&
- work->set_trans_buf)
+ work->set_trans_buf)
work->response_buf = ksmbd_find_buffer(sz);
else
work->response_buf = kvmalloc(sz, GFP_KERNEL | __GFP_ZERO);
diff --git a/fs/cifsd/smb2pdu.h b/fs/cifsd/smb2pdu.h
index 1a8da2122b75..b3d3365d7070 100644
--- a/fs/cifsd/smb2pdu.h
+++ b/fs/cifsd/smb2pdu.h
@@ -1623,10 +1623,10 @@ void smb2_set_sign_rsp(struct ksmbd_work *work);
int smb3_check_sign_req(struct ksmbd_work *work);
void smb3_set_sign_rsp(struct ksmbd_work *work);
int find_matching_smb2_dialect(int start_index, __le16 *cli_dialects,
- __le16 dialects_count);
+ __le16 dialects_count);
struct file_lock *smb_flock_init(struct file *f);
int setup_async_work(struct ksmbd_work *work, void (*fn)(void **),
- void **arg);
+ void **arg);
void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status);
struct channel *lookup_chann_list(struct ksmbd_session *sess);
void smb3_preauth_hash_rsp(struct ksmbd_work *work);
diff --git a/fs/cifsd/smbacl.h b/fs/cifsd/smbacl.h
index 032b6a3ec6f4..fb5480f0aa89 100644
--- a/fs/cifsd/smbacl.h
+++ b/fs/cifsd/smbacl.h
@@ -180,22 +180,23 @@ struct posix_acl_state {
};
int parse_sec_desc(struct smb_ntsd *pntsd, int acl_len,
- struct smb_fattr *fattr);
+ struct smb_fattr *fattr);
int build_sec_desc(struct smb_ntsd *pntsd, struct smb_ntsd *ppntsd,
- int addition_info, __u32 *secdesclen, struct smb_fattr *fattr);
+ int addition_info, __u32 *secdesclen,
+ struct smb_fattr *fattr);
int init_acl_state(struct posix_acl_state *state, int cnt);
void free_acl_state(struct posix_acl_state *state);
void posix_state_to_acl(struct posix_acl_state *state,
- struct posix_acl_entry *pace);
+ struct posix_acl_entry *pace);
int compare_sids(const struct smb_sid *ctsid, const struct smb_sid *cwsid);
bool smb_inherit_flags(int flags, bool is_dir);
int smb_inherit_dacl(struct ksmbd_conn *conn, struct dentry *dentry,
- unsigned int uid, unsigned int gid);
+ unsigned int uid, unsigned int gid);
int smb_check_perm_dacl(struct ksmbd_conn *conn, struct dentry *dentry,
- __le32 *pdaccess, int uid);
+ __le32 *pdaccess, int uid);
int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
- struct dentry *dentry, struct smb_ntsd *pntsd, int ntsd_len,
- bool type_check);
+ struct dentry *dentry, struct smb_ntsd *pntsd, int ntsd_len,
+ bool type_check);
void id_to_sid(unsigned int cid, uint sidtype, struct smb_sid *ssid);
void ksmbd_init_domain(u32 *sub_auth);
#endif /* _SMBACL_H */
diff --git a/fs/cifsd/transport_ipc.h b/fs/cifsd/transport_ipc.h
index 523b4df2c783..9eacc895ffdb 100644
--- a/fs/cifsd/transport_ipc.h
+++ b/fs/cifsd/transport_ipc.h
@@ -20,9 +20,9 @@ struct sockaddr;
struct ksmbd_tree_connect_response *
ksmbd_ipc_tree_connect_request(struct ksmbd_session *sess,
- struct ksmbd_share_config *share,
- struct ksmbd_tree_connect *tree_conn,
- struct sockaddr *peer_addr);
+ struct ksmbd_share_config *share,
+ struct ksmbd_tree_connect *tree_conn,
+ struct sockaddr *peer_addr);
int ksmbd_ipc_tree_disconnect_request(unsigned long long session_id,
unsigned long long connect_id);
int ksmbd_ipc_logout_request(const char *account);
diff --git a/fs/cifsd/transport_tcp.c b/fs/cifsd/transport_tcp.c
index 5bd332a58596..d6d5c0038dea 100644
--- a/fs/cifsd/transport_tcp.c
+++ b/fs/cifsd/transport_tcp.c
@@ -423,10 +423,10 @@ static int create_socket(struct interface *iface)
ksmbd_tcp_reuseaddr(ksmbd_socket);
ret = sock_setsockopt(ksmbd_socket,
- SOL_SOCKET,
- SO_BINDTODEVICE,
- KERNEL_SOCKPTR(iface->name),
- strlen(iface->name));
+ SOL_SOCKET,
+ SO_BINDTODEVICE,
+ KERNEL_SOCKPTR(iface->name),
+ strlen(iface->name));
if (ret != -ENODEV && ret < 0) {
ksmbd_err("Failed to set SO_BINDTODEVICE: %d\n", ret);
goto out_error;
diff --git a/fs/cifsd/vfs.c b/fs/cifsd/vfs.c
index 291953eff5fa..9111b485d611 100644
--- a/fs/cifsd/vfs.c
+++ b/fs/cifsd/vfs.c
@@ -274,7 +274,6 @@ static int ksmbd_vfs_stream_read(struct ksmbd_file *fp, char *buf, loff_t *pos,
{
ssize_t v_len;
char *stream_buf = NULL;
- int err;
ksmbd_debug(VFS, "read stream data pos : %llu, count : %zd\n",
*pos, count);
@@ -283,14 +282,22 @@ static int ksmbd_vfs_stream_read(struct ksmbd_file *fp, char *buf, loff_t *pos,
fp->stream.name,
fp->stream.size,
&stream_buf);
- if (v_len == -ENOENT) {
- ksmbd_err("not found stream in xattr : %zd\n", v_len);
- err = -ENOENT;
- return err;
+ if ((int)v_len <= 0)
+ return (int)v_len;
+
+ if (v_len <= *pos) {
+ count = -EINVAL;
+ goto free_buf;
}
+ if (v_len - *pos < count)
+ count = v_len - *pos;
+
memcpy(buf, &stream_buf[*pos], count);
- return v_len > count ? count : v_len;
+
+free_buf:
+ kvfree(stream_buf);
+ return count;
}
/**
@@ -414,9 +421,9 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
fp->stream.name,
fp->stream.size,
&stream_buf);
- if (v_len == -ENOENT) {
+ if ((int)v_len < 0) {
ksmbd_err("not found stream in xattr : %zd\n", v_len);
- err = -ENOENT;
+ err = (int)v_len;
goto out;
}
@@ -429,6 +436,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
if (v_len > 0)
memcpy(wbuf, stream_buf, v_len);
+ kvfree(stream_buf);
stream_buf = wbuf;
}
@@ -934,8 +942,8 @@ ssize_t ksmbd_vfs_getxattr(struct dentry *dentry, char *xattr_name,
if (!buf)
return -ENOMEM;
- xattr_len = vfs_getxattr(&init_user_ns, dentry, xattr_name, (void *)buf,
- xattr_len);
+ xattr_len = vfs_getxattr(&init_user_ns, dentry, xattr_name,
+ (void *)buf, xattr_len);
if (xattr_len > 0)
*xattr_buf = buf;
else
diff --git a/fs/cifsd/vfs_cache.h b/fs/cifsd/vfs_cache.h
index 823fcb257a42..635eedbd497c 100644
--- a/fs/cifsd/vfs_cache.h
+++ b/fs/cifsd/vfs_cache.h
@@ -25,14 +25,14 @@
#define KSMBD_NO_FID (UINT_MAX)
#define SMB2_NO_FID (0xFFFFFFFFFFFFFFFFULL)
-#define FP_FILENAME(fp) fp->filp->f_path.dentry->d_name.name
-#define FP_INODE(fp) d_inode(fp->filp->f_path.dentry)
-#define PARENT_INODE(fp) d_inode(fp->filp->f_path.dentry->d_parent)
-
-#define ATTR_FP(fp) (fp->attrib_only && \
- (fp->cdoption != FILE_OVERWRITE_IF_LE && \
- fp->cdoption != FILE_OVERWRITE_LE && \
- fp->cdoption != FILE_SUPERSEDE_LE))
+#define FP_FILENAME(fp) ((fp)->filp->f_path.dentry->d_name.name)
+#define FP_INODE(fp) d_inode((fp)->filp->f_path.dentry)
+#define PARENT_INODE(fp) d_inode((fp)->filp->f_path.dentry->d_parent)
+
+#define ATTR_FP(fp) ((fp)->attrib_only && \
+ ((fp)->cdoption != FILE_OVERWRITE_IF_LE && \
+ (fp)->cdoption != FILE_OVERWRITE_LE && \
+ (fp)->cdoption != FILE_SUPERSEDE_LE))
struct ksmbd_conn;
struct ksmbd_session;