lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAH2r5msN59rNqDxJaBTPZQ_smsYOiMbyy4V+cMdWeuGbe9GR1Q@mail.gmail.com>
Date: Tue, 1 Jul 2025 12:07:08 -0500
From: Steve French <smfrench@...il.com>
To: David Howells <dhowells@...hat.com>
Cc: Christian Brauner <christian@...uner.io>, Paulo Alcantara <pc@...guebit.com>, netfs@...ts.linux.dev, 
	linux-afs@...ts.infradead.org, linux-cifs@...r.kernel.org, 
	linux-nfs@...r.kernel.org, ceph-devel@...r.kernel.org, v9fs@...ts.linux.dev, 
	linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org, 
	Paulo Alcantara <pc@...guebit.org>, samba-technical <samba-technical@...ts.samba.org>, 
	Shyam Prasad <nspmangalore@...il.com>
Subject: Re: [PATCH 09/13] smb: client: fix warning when reconnecting channel

I already have this patch in my for-next branch (which also includes
the  Reviewed-by from Shyam)

On Tue, Jul 1, 2025 at 11:44 AM David Howells <dhowells@...hat.com> wrote:
>
> From: Paulo Alcantara <pc@...guebit.org>
>
> When reconnecting a channel in smb2_reconnect_server(), a dummy tcon
> is passed down to smb2_reconnect() with ->query_interface
> uninitialized, so we can't call queue_delayed_work() on it.
>
> Fix the following warning by ensuring that we're queueing the delayed
> worker from correct tcon.
>
> WARNING: CPU: 4 PID: 1126 at kernel/workqueue.c:2498 __queue_delayed_work+0x1d2/0x200
> Modules linked in: cifs cifs_arc4 nls_ucs2_utils cifs_md4 [last unloaded: cifs]
> CPU: 4 UID: 0 PID: 1126 Comm: kworker/4:0 Not tainted 6.16.0-rc3 #5 PREEMPT(voluntary)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-4.fc42 04/01/2014
> Workqueue: cifsiod smb2_reconnect_server [cifs]
> RIP: 0010:__queue_delayed_work+0x1d2/0x200
> Code: 41 5e 41 5f e9 7f ee ff ff 90 0f 0b 90 e9 5d ff ff ff bf 02 00
> 00 00 e8 6c f3 07 00 89 c3 eb bd 90 0f 0b 90 e9 57 f> 0b 90 e9 65 fe
> ff ff 90 0f 0b 90 e9 72 fe ff ff 90 0f 0b 90 e9
> RSP: 0018:ffffc900014afad8 EFLAGS: 00010003
> RAX: 0000000000000000 RBX: ffff888124d99988 RCX: ffffffff81399cc1
> RDX: dffffc0000000000 RSI: ffff888114326e00 RDI: ffff888124d999f0
> RBP: 000000000000ea60 R08: 0000000000000001 R09: ffffed10249b3331
> R10: ffff888124d9998f R11: 0000000000000004 R12: 0000000000000040
> R13: ffff888114326e00 R14: ffff888124d999d8 R15: ffff888114939020
> FS:  0000000000000000(0000) GS:ffff88829f7fe000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007ffe7a2b4038 CR3: 0000000120a6f000 CR4: 0000000000750ef0
> PKRU: 55555554
> Call Trace:
>  <TASK>
>  queue_delayed_work_on+0xb4/0xc0
>  smb2_reconnect+0xb22/0xf50 [cifs]
>  smb2_reconnect_server+0x413/0xd40 [cifs]
>  ? __pfx_smb2_reconnect_server+0x10/0x10 [cifs]
>  ? local_clock_noinstr+0xd/0xd0
>  ? local_clock+0x15/0x30
>  ? lock_release+0x29b/0x390
>  process_one_work+0x4c5/0xa10
>  ? __pfx_process_one_work+0x10/0x10
>  ? __list_add_valid_or_report+0x37/0x120
>  worker_thread+0x2f1/0x5a0
>  ? __kthread_parkme+0xde/0x100
>  ? __pfx_worker_thread+0x10/0x10
>  kthread+0x1fe/0x380
>  ? kthread+0x10f/0x380
>  ? __pfx_kthread+0x10/0x10
>  ? local_clock_noinstr+0xd/0xd0
>  ? ret_from_fork+0x1b/0x1f0
>  ? local_clock+0x15/0x30
>  ? lock_release+0x29b/0x390
>  ? rcu_is_watching+0x20/0x50
>  ? __pfx_kthread+0x10/0x10
>  ret_from_fork+0x15b/0x1f0
>  ? __pfx_kthread+0x10/0x10
>  ret_from_fork_asm+0x1a/0x30
>  </TASK>
> irq event stamp: 1116206
> hardirqs last  enabled at (1116205): [<ffffffff8143af42>] __up_console_sem+0x52/0x60
> hardirqs last disabled at (1116206): [<ffffffff81399f0e>] queue_delayed_work_on+0x6e/0xc0
> softirqs last  enabled at (1116138): [<ffffffffc04562fd>] __smb_send_rqst+0x42d/0x950 [cifs]
> softirqs last disabled at (1116136): [<ffffffff823d35e1>] release_sock+0x21/0xf0
>
> Cc: linux-cifs@...r.kernel.org
> Reported-by: David Howells <dhowells@...hat.com>
> Fixes: 42ca547b13a2 ("cifs: do not disable interface polling on failure")
> Reviewed-by: David Howells <dhowells@...hat.com>
> Tested-by: David Howells <dhowells@...hat.com>
> Signed-off-by: Paulo Alcantara (Red Hat) <pc@...guebit.org>
> Signed-off-by: David Howells <dhowells@...hat.com>
> Tested-by: Steve French <sfrench@...ba.org>
> ---
>  fs/smb/client/cifsglob.h |  1 +
>  fs/smb/client/smb2pdu.c  | 10 ++++------
>  2 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
> index 318a8405d475..fdd95e5100cd 100644
> --- a/fs/smb/client/cifsglob.h
> +++ b/fs/smb/client/cifsglob.h
> @@ -1303,6 +1303,7 @@ struct cifs_tcon {
>         bool use_persistent:1; /* use persistent instead of durable handles */
>         bool no_lease:1;    /* Do not request leases on files or directories */
>         bool use_witness:1; /* use witness protocol */
> +       bool dummy:1; /* dummy tcon used for reconnecting channels */
>         __le32 capabilities;
>         __u32 share_flags;
>         __u32 maximal_access;
> diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
> index 084ee66e73fd..572cfc42dda8 100644
> --- a/fs/smb/client/smb2pdu.c
> +++ b/fs/smb/client/smb2pdu.c
> @@ -424,9 +424,9 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon,
>                 free_xid(xid);
>                 ses->flags &= ~CIFS_SES_FLAGS_PENDING_QUERY_INTERFACES;
>
> -               /* regardless of rc value, setup polling */
> -               queue_delayed_work(cifsiod_wq, &tcon->query_interfaces,
> -                                  (SMB_INTERFACE_POLL_INTERVAL * HZ));
> +               if (!tcon->ipc && !tcon->dummy)
> +                       queue_delayed_work(cifsiod_wq, &tcon->query_interfaces,
> +                                          (SMB_INTERFACE_POLL_INTERVAL * HZ));
>
>                 mutex_unlock(&ses->session_mutex);
>
> @@ -4229,10 +4229,8 @@ void smb2_reconnect_server(struct work_struct *work)
>                 }
>                 goto done;
>         }
> -
>         tcon->status = TID_GOOD;
> -       tcon->retry = false;
> -       tcon->need_reconnect = false;
> +       tcon->dummy = true;
>
>         /* now reconnect sessions for necessary channels */
>         list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) {
>
>


-- 
Thanks,

Steve

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ