Commit d43df69f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag '6.9-rc5-cifs-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6

Pull smb client fixes from Steve French:
 "Three smb3 client fixes, all also for stable:

   - two small locking fixes spotted by Coverity

   - FILE_ALL_INFO and network_open_info packing fix"

* tag '6.9-rc5-cifs-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6:
  smb3: fix lock ordering potential deadlock in cifs_sync_mid_result
  smb3: missing lock when picking channel
  smb: client: Fix struct_group() usage in __packed structs
parents 5d12ed4b 8861fd51
...@@ -882,7 +882,7 @@ typedef struct smb_com_open_rsp { ...@@ -882,7 +882,7 @@ typedef struct smb_com_open_rsp {
__u8 OplockLevel; __u8 OplockLevel;
__u16 Fid; __u16 Fid;
__le32 CreateAction; __le32 CreateAction;
struct_group(common_attributes, struct_group_attr(common_attributes, __packed,
__le64 CreationTime; __le64 CreationTime;
__le64 LastAccessTime; __le64 LastAccessTime;
__le64 LastWriteTime; __le64 LastWriteTime;
...@@ -2266,7 +2266,7 @@ typedef struct { ...@@ -2266,7 +2266,7 @@ typedef struct {
/* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */
/******************************************************************************/ /******************************************************************************/
typedef struct { /* data block encoding of response to level 263 QPathInfo */ typedef struct { /* data block encoding of response to level 263 QPathInfo */
struct_group(common_attributes, struct_group_attr(common_attributes, __packed,
__le64 CreationTime; __le64 CreationTime;
__le64 LastAccessTime; __le64 LastAccessTime;
__le64 LastWriteTime; __le64 LastWriteTime;
......
...@@ -320,7 +320,7 @@ struct smb2_file_reparse_point_info { ...@@ -320,7 +320,7 @@ struct smb2_file_reparse_point_info {
} __packed; } __packed;
struct smb2_file_network_open_info { struct smb2_file_network_open_info {
struct_group(network_open_info, struct_group_attr(network_open_info, __packed,
__le64 CreationTime; __le64 CreationTime;
__le64 LastAccessTime; __le64 LastAccessTime;
__le64 LastWriteTime; __le64 LastWriteTime;
......
...@@ -909,12 +909,15 @@ cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) ...@@ -909,12 +909,15 @@ cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server)
list_del_init(&mid->qhead); list_del_init(&mid->qhead);
mid->mid_flags |= MID_DELETED; mid->mid_flags |= MID_DELETED;
} }
spin_unlock(&server->mid_lock);
cifs_server_dbg(VFS, "%s: invalid mid state mid=%llu state=%d\n", cifs_server_dbg(VFS, "%s: invalid mid state mid=%llu state=%d\n",
__func__, mid->mid, mid->mid_state); __func__, mid->mid, mid->mid_state);
rc = -EIO; rc = -EIO;
goto sync_mid_done;
} }
spin_unlock(&server->mid_lock); spin_unlock(&server->mid_lock);
sync_mid_done:
release_mid(mid); release_mid(mid);
return rc; return rc;
} }
...@@ -1057,9 +1060,11 @@ struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses) ...@@ -1057,9 +1060,11 @@ struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses)
index = (uint)atomic_inc_return(&ses->chan_seq); index = (uint)atomic_inc_return(&ses->chan_seq);
index %= ses->chan_count; index %= ses->chan_count;
} }
server = ses->chans[index].server;
spin_unlock(&ses->chan_lock); spin_unlock(&ses->chan_lock);
return ses->chans[index].server; return server;
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment