чт, 6 февр. 2020 г. в 05:00, Aurelien Aptel <aaptel@xxxxxxxx>: > > The server var was accidentally used as an iterator over the global > list of connections, thus overwritten the passed argument. This > resulted in the wrong signing key being returned for extra channels. > > Fix this by using a separate var to iterate. > > Signed-off-by: Aurelien Aptel <aaptel@xxxxxxxx> > --- > fs/cifs/smb2transport.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c > index fe6acfce3390..08b703b7a15e 100644 > --- a/fs/cifs/smb2transport.c > +++ b/fs/cifs/smb2transport.c > @@ -104,13 +104,14 @@ int smb2_get_sign_key(__u64 ses_id, struct TCP_Server_Info *server, u8 *key) > { > struct cifs_chan *chan; > struct cifs_ses *ses = NULL; > + struct TCP_Server_Info *it = NULL; > int i; > int rc = 0; > > spin_lock(&cifs_tcp_ses_lock); > > - list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) { > - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { > + list_for_each_entry(it, &cifs_tcp_ses_list, tcp_ses_list) { > + list_for_each_entry(ses, &it->smb_ses_list, smb_ses_list) { > if (ses->Suid == ses_id) > goto found; > } Good catch! Reviewed-by: Pavel Shilovsky <pshilov@xxxxxxxxxxxxx> Stable candidate? -- Best regards, Pavel Shilovsky