Netdev List
 help / color / mirror / Atom feed
* [PATCH v3 00/14] nfsd/sunrpc: harden the netlink listener set interface
@ 2026-08-28 16:37 Jeff Layton
  2026-08-28 16:37 ` [PATCH v3 01/14] NFSD: cap the number of listeners accepted in listener_set Jeff Layton
                   ` (13 more replies)
  0 siblings, 14 replies; 17+ messages in thread
From: Jeff Layton @ 2026-08-28 16:37 UTC (permalink / raw)
  To: Chuck Lever, NeilBrown, Olga Kornievskaia, Dai Ngo, Tom Talpey,
	Trond Myklebust, Anna Schumaker, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan
  Cc: Slawomir Stepien, linux-nfs, linux-kernel, netdev,
	Trond Myklebust, linux-kselftest, Jeff Layton

This series is quite a bit different from v2. First, I cleaned things up
along the lines of Chuck's review of v2, but then Olga suggested that we
should just give up on trying to do new rpcbind registrations when one
fails.

I've added a patches to do that and this now seems to fix the reproducer
that syzbot provided recently. I have high hopes that it will fix the
other syzbot hangs that have been reported.

This also sets a foundation for some other work I have that will move
the rpcbind registration into userland. I'll submit that series
separately after this one is resolved.

Please consider these for v7.4.

To: Chuck Lever <cel@kernel.org>
To: NeilBrown <neil@brown.name>
To: Olga Kornievskaia <okorniev@redhat.com>
To: Dai Ngo <Dai.Ngo@oracle.com>
To: Tom Talpey <tom@talpey.com>
To: Trond Myklebust <trondmy@kernel.org>
To: Anna Schumaker <anna@kernel.org>
To: David S. Miller <davem@davemloft.net>
To: Eric Dumazet <edumazet@google.com>
To: Jakub Kicinski <kuba@kernel.org>
To: Paolo Abeni <pabeni@redhat.com>
To: Simon Horman <horms@kernel.org>
To: Shuah Khan <shuah@kernel.org>
Cc: Slawomir Stepien <sst@poczta.fm>
Cc: linux-nfs@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: Trond Myklebust <trondmy@gmail.com>
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: Jeff Layton <jlayton@kernel.org>

--- Changes in v2:
- New patch 4: when a later registration failed, svc_register() left the
  entries that it had already set in rpcbind. Those entries pointed at a
  port that the caller then closed.
- Tests: behavioural fixes for several tests. Several assertions checked
  only an errno that both the fixed kernel and the broken kernel return.
  val_bad_transport() now also requires that the rpcbind stub saw no
  traffic. val_second_entry_bad() requires that no listener started.
  func_empty_destroys requires that the kernel dropped the local rpcbind
  client and then connected again. The two -EBUSY tests require that the
  listener set does not change. find_listener() now matches the address
  too.
- Tests: the stub read the revents of a newly accepted pollfd that poll()
  had not written. The stub could therefore start a blocking read with no
  readiness event.
- Tests: the config fragment now includes NAMESPACES, SHMEM, TMPFS and
  UNIX. Without them, every test skipped.
- Link to v1: https://lore.kernel.org/r/20260810-nfsd-nl-hang-v1-0-2519fdd5bc1a@kernel.org

---
Changes in v3:
- Dropped v2's patch 4, the svc_register() unwind. rpcbind matches an UNSET
  on [program, version, netid], and the v2 fallback ignores the protocol
  completely. The unwind could therefore clear entries that belong to other
  live listeners. Chuck Lever found that.
- A failed registration stays fatal. Patch 3 makes CONFIG_NFS_LOCALIO=y
  agree with CONFIG_NFS_LOCALIO=n on that point.
- Tests: sem_register_refused now reads the listener set back, because
  -EACCES alone does not show that no listener was created.
  sem_create_failure_extack is new. The netlink socket now asks for
  NETLINK_EXT_ACK and NETLINK_CAP_ACK, so that a test can read the extack.
- Tests: FIXTURE_TEARDOWN removes any listener or thread that a test left
  behind. Those pinned the netns.
- Stop attempting to register any more listeners when the first
  svc_register() call fails.
- Bound the unregistration side the same way. svc_register(),
  svc_unregister() and the per-listener teardown in svc_delete_xprt() all
  give up once the local rpcbind stops answering, so one listener_set pays
  one timeout in each direction rather than one per listener.
- Link to v2: https://lore.kernel.org/r/20260811-nfsd-nl-hang-v2-0-c0c92b3953c3@kernel.org

---
Jeff Layton (14):
      NFSD: cap the number of listeners accepted in listener_set
      NFSD: validate transport name in listener_set before serv creation
      SUNRPC: keep the first error in svc_register()
      SUNRPC: bound the local rpcbind client timeout to 1s
      NFSD: report listener creation failures through extack
      SUNRPC: report local rpcbind calls that get no answer
      SUNRPC: stop svc_register() once rpcbind stops answering
      SUNRPC: stop the svc_unregister() sweep once rpcbind stops answering
      SUNRPC: stop unregistering listeners once rpcbind stops answering
      NFSD: stop registering with rpcbind after a failure in listener_set
      selftests/nfsd: exercise listener_set request validation
      selftests/nfsd: add a per-netns rpcbind stub and the listener round-trips
      selftests/nfsd: check that listener_set asks rpcbind once
      selftests/nfsd: check that listener removal asks rpcbind once

 MAINTAINERS                                        |    1 +
 fs/nfsd/nfsctl.c                                   |   87 +-
 include/linux/sunrpc/clnt.h                        |    3 +-
 include/linux/sunrpc/svc.h                         |    7 +-
 net/sunrpc/rpcb_clnt.c                             |   22 +-
 net/sunrpc/svc.c                                   |   65 +-
 net/sunrpc/svc_xprt.c                              |   20 +
 tools/testing/selftests/Makefile                   |    1 +
 tools/testing/selftests/nfsd/.gitignore            |    1 +
 tools/testing/selftests/nfsd/Makefile              |    6 +
 tools/testing/selftests/nfsd/config                |    8 +
 .../testing/selftests/nfsd/nfsd_netlink_listener.c | 1328 ++++++++++++++++++++
 tools/testing/selftests/nfsd/settings              |    1 +
 13 files changed, 1529 insertions(+), 21 deletions(-)
---
base-commit: e247236b7ffa1e0940f834787feade8570c5db91
change-id: 20260717-nfsd-nl-hang-10a3b3e93f2a

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-08-31 12:05 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28 16:37 [PATCH v3 00/14] nfsd/sunrpc: harden the netlink listener set interface Jeff Layton
2026-08-28 16:37 ` [PATCH v3 01/14] NFSD: cap the number of listeners accepted in listener_set Jeff Layton
2026-08-28 16:37 ` [PATCH v3 02/14] NFSD: validate transport name in listener_set before serv creation Jeff Layton
2026-08-28 16:37 ` [PATCH v3 03/14] SUNRPC: keep the first error in svc_register() Jeff Layton
2026-08-28 16:37 ` [PATCH v3 04/14] SUNRPC: bound the local rpcbind client timeout to 1s Jeff Layton
2026-08-28 16:37 ` [PATCH v3 05/14] NFSD: report listener creation failures through extack Jeff Layton
2026-08-28 16:37 ` [PATCH v3 06/14] SUNRPC: report local rpcbind calls that get no answer Jeff Layton
2026-08-30 15:51   ` Chuck Lever
2026-08-31 12:05     ` Jeff Layton
2026-08-28 16:37 ` [PATCH v3 07/14] SUNRPC: stop svc_register() once rpcbind stops answering Jeff Layton
2026-08-28 16:37 ` [PATCH v3 08/14] SUNRPC: stop the svc_unregister() sweep " Jeff Layton
2026-08-28 16:37 ` [PATCH v3 09/14] SUNRPC: stop unregistering listeners " Jeff Layton
2026-08-28 16:37 ` [PATCH v3 10/14] NFSD: stop registering with rpcbind after a failure in listener_set Jeff Layton
2026-08-28 16:37 ` [PATCH v3 11/14] selftests/nfsd: exercise listener_set request validation Jeff Layton
2026-08-28 16:37 ` [PATCH v3 12/14] selftests/nfsd: add a per-netns rpcbind stub and the listener round-trips Jeff Layton
2026-08-28 16:37 ` [PATCH v3 13/14] selftests/nfsd: check that listener_set asks rpcbind once Jeff Layton
2026-08-28 16:37 ` [PATCH v3 14/14] selftests/nfsd: check that listener removal " Jeff Layton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox