From: Jeff Layton <jlayton@kernel.org>
To: Olga Kornievskaia <okorniev@redhat.com>, chuck.lever@oracle.com
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 0/3] fix removal of nfsd listeners
Date: Thu, 16 Jan 2025 06:53:29 -0500 [thread overview]
Message-ID: <3a6f2a3d97ef3541d06c378a2dcd15fbbcdbc4dc.camel@kernel.org> (raw)
In-Reply-To: <20250115232406.44815-1-okorniev@redhat.com>
On Wed, 2025-01-15 at 18:24 -0500, Olga Kornievskaia wrote:
> Currently if a root user using nfsdctl command tries to remove a particular
> listener from the list of previously added ones, then starting the nfsd
> leads to the following problem:
>
> [ 158.835354] refcount_t: addition on 0; use-after-free.
> [ 158.835603] WARNING: CPU: 2 PID: 9145 at lib/refcount.c:25 refcount_warn_saturate+0x160/0x1a0
> [ 158.836017] Modules linked in: rpcrdma rdma_cm iw_cm ib_cm ib_core nfsd auth_rpcgss nfs_acl lockd grace overlay isofs uinput snd_seq_dummy snd_hrtimer nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 rfkill ip_set nf_tables qrtr sunrpc vfat fat uvcvideo videobuf2_vmalloc videobuf2_memops uvc videobuf2_v4l2 videodev videobuf2_common snd_hda_codec_generic mc e1000e snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hda_core snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer snd soundcore sg loop dm_multipath dm_mod nfnetlink vsock_loopback vmw_vsock_virtio_transport_common vmw_vsock_vmci_transport vmw_vmci vsock xfs libcrc32c crct10dif_ce ghash_ce vmwgfx sha2_ce sha256_arm64 sr_mod sha1_ce cdrom nvme drm_client_lib drm_ttm_helper ttm nvme_core drm_kms_helper nvme_auth drm fuse
> [ 158.840093] CPU: 2 UID: 0 PID: 9145 Comm: nfsd Kdump: loaded Tainted: G B W 6.13.0-rc6+ #7
> [ 158.840624] Tainted: [B]=BAD_PAGE, [W]=WARN
> [ 158.840802] Hardware name: VMware, Inc. VMware20,1/VBSA, BIOS VMW201.00V.24006586.BA64.2406042154 06/04/2024
> [ 158.841220] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
> [ 158.841563] pc : refcount_warn_saturate+0x160/0x1a0
> [ 158.841780] lr : refcount_warn_saturate+0x160/0x1a0
> [ 158.842000] sp : ffff800089be7d80
> [ 158.842147] x29: ffff800089be7d80 x28: ffff00008e68c148 x27: ffff00008e68c148
> [ 158.842492] x26: ffff0002e3b5c000 x25: ffff600011cd1829 x24: ffff00008653c010
> [ 158.842832] x23: ffff00008653c000 x22: 1fffe00011cd1829 x21: ffff00008653c028
> [ 158.843175] x20: 0000000000000002 x19: ffff00008653c010 x18: 0000000000000000
> [ 158.843505] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
> [ 158.843836] x14: 0000000000000000 x13: 0000000000000001 x12: ffff600050a26493
> [ 158.844143] x11: 1fffe00050a26492 x10: ffff600050a26492 x9 : dfff800000000000
> [ 158.844475] x8 : 00009fffaf5d9b6e x7 : ffff000285132493 x6 : 0000000000000001
> [ 158.844823] x5 : ffff000285132490 x4 : ffff600050a26493 x3 : ffff8000805e72bc
> [ 158.845174] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff000098588000
> [ 158.845528] Call trace:
> [ 158.845658] refcount_warn_saturate+0x160/0x1a0 (P)
> [ 158.845894] svc_recv+0x58c/0x680 [sunrpc]
> [ 158.846183] nfsd+0x1fc/0x348 [nfsd]
> [ 158.846390] kthread+0x274/0x2f8
> [ 158.846546] ret_from_fork+0x10/0x20
> [ 158.846714] ---[ end trace 0000000000000000 ]---
>
> nfsd_nl_listener_set_doit() would manipulate the list of transports of
> server's sv_permsocks and svc_xprt_close() the specified listener but
> the other list of transports (server's sp_xprts list) would not be
> changed leading to the problem.
>
> the other problem is that sp_xprt is a lwq structure of lockless
> list which does not have an ability to remove a single entry from
> the list.
>
> this patch series addis a function to remove a single entry, then modifies
> nfsd_nl_listener_set_doit() to make sure the to-be-removed listener is
> removed from both lists and then it also ensures that the remaining
> listeners are added back in the correct state.
>
> Olga Kornievskaia (3):
> llist: add ability to remove a particular entry from the list
> SUNRPC: add ability to remove specific server transport
> nfsd: fix management of listener transports
>
> fs/nfsd/nfsctl.c | 4 +++-
> include/linux/llist.h | 36 ++++++++++++++++++++++++++++++++++++
> include/linux/sunrpc/svc.h | 1 +
> net/sunrpc/svc_xprt.c | 11 +++++++++++
> 4 files changed, 51 insertions(+), 1 deletion(-)
>
Nice work, Olga.
Reviewed-by: Jeff Layton <jlayton@kernel.org>
prev parent reply other threads:[~2025-01-16 11:53 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-15 23:24 [PATCH 0/3] fix removal of nfsd listeners Olga Kornievskaia
2025-01-15 23:24 ` [PATCH 1/3] llist: add ability to remove a particular entry from the list Olga Kornievskaia
2025-01-16 14:26 ` Chuck Lever
2025-01-16 14:54 ` Olga Kornievskaia
2025-01-16 15:33 ` Chuck Lever
2025-01-16 15:42 ` Jeff Layton
2025-01-16 16:00 ` Chuck Lever
2025-01-16 16:31 ` Olga Kornievskaia
2025-01-16 16:44 ` Chuck Lever
2025-01-17 4:08 ` kernel test robot
2025-01-17 4:08 ` kernel test robot
2025-01-24 0:57 ` kernel test robot
2025-01-15 23:24 ` [PATCH 2/3] SUNRPC: add ability to remove specific server transport Olga Kornievskaia
2025-01-15 23:24 ` [PATCH 3/3] nfsd: fix management of listener transports Olga Kornievskaia
2025-01-16 14:27 ` Chuck Lever
2025-01-16 14:46 ` Jeff Layton
2025-01-16 14:55 ` Chuck Lever
2025-01-16 15:34 ` Olga Kornievskaia
2025-01-16 15:42 ` Chuck Lever
2025-01-16 11:53 ` Jeff Layton [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a6f2a3d97ef3541d06c378a2dcd15fbbcdbc4dc.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=okorniev@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.