summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* GSSD: move process_krb5_updcall non machine cred case to helper functionAndy Adamson2015-09-231-27/+50
| | | | | | Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Jeff Layton <jlayton@poochiereds.net> Signed-off-by: Steve Dickson <steved@redhat.com>
* GSSD: move process_krb5_upcall machine cred case to helper functionAndy Adamson2015-09-231-45/+65
| | | | | | Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Jeff Layton <jlayton@poochiereds.net> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountstats.man: Remove a few bogus .R macrosScott Mayhew2015-09-161-4/+4
| | | | | | | | | | These have no effect on the rendering of the man page, but they do cause the following error if you try to pipe or redirect the output: `R' is a string (producing the registered sign), not a macro. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* statd: statd_get_socket() should return open fdsChuck Lever2015-09-161-9/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Tastky <tastky@gmail.com> reports: > There appears to be a bug in nfs-utils exposed by musl, which > makes rpc.statd loop with: > > my_svc_run() - select: Bad file descriptor OpenGroup says getservbyport(3) is supposed to return NULL when no entry exists for the specified port. But musl's getservbyport(3) never returns NULL (likely a bug). Thus statd_get_socket() tries bindresvport(3) 100 times, then gives up and returns the last socket it created. This should work fine, but there's a bug in the retry loop: Rich Felker <dalias@libc.org> says: > The logic bug is the count-down loop that closes all the temp > sockets. In the case where the loop terminates via break, it > leaves the last one open and only closes the extras. But in the > case where where the loop terminates via the end condition in the > for statement, the close loop closes all the sockets _including_ > the one it intends to use. (emphasis mine). The closed socket fd is then passed to select(2). See also: http://www.openwall.com/lists/musl/2015/08 The fix is to perform the loop termination test before adding sockfd to the set of fds to be closed. As additional clean ups, remove the use of the variable-length stack array, and switch to variable names that better document the purpose of this logic. Reported-by: Tastky <tastky@gmail.com> Fixes: eb8229338f06 ("rpc.statd: Fix socket binding loop.") Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: fix mount issue due to comparison with uninitialized uuidVivek Trivedi2015-09-161-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | Fix mount issue due to comparison of uninitialized variable u(uuid) with parsed->fhuuid when uuid_by_path return 0. /tmp/usb 192.168.1.0/16(ro,no_root_squash,no_subtree_check,fsid=0) /tmp/usb/sda1 192.168.1.0/16(ro,no_root_squash,no_subtree_check) /tmp/usb/sdb1 192.168.1.0/16(ro,no_root_squash,no_subtree_check) mount -t nfs -o nolock,nfsvers=3 192.168.1.2:/tmp/usb/sda1 /tmp/sda1 mount -t nfs -o nolock,nfsvers=3 192.168.1.2:/tmp/usb/sdb1 /tmp/sdb1 results in below mountd error: mountd: /tmp/usb and /tmp/usb/sdb1 have same filehandle for 192.168.1.0/16, using first when uuid_by_path returned 0, by chance, garbage value of u was same as parsed->fhuuid(of sdb1), and comparison of these resulted in above error. Signed-off-by: Vivek Trivedi <t.vivek@samsung.com> Reviewed-by: Amit Sahrawat <a.sahrawat@samsung.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: Clean up other exit status casesChuck Lever2015-09-161-15/+14
| | | | | | | Make it unambiguous where 0 or 1 represent an exit status. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: Fix error handling in name_lookup()Chuck Lever2015-09-161-10/+11
| | | | | | | | | | | | | | | | | As near as I can tell, the exit status of nfsidmap is supposed to be zero (success) or one (failure). The return value of name_lookup() becomes the exit status, so it should return only zero or one. The libnfsidmap calls return a signed integer, either 0 or negative errno values. These have to be translated to an exit status. libkeyutils calls return a signed long, either 0 or -1. These also have to be translated to an exit status. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: Fix error handling in id_lookup()Chuck Lever2015-09-161-19/+22
| | | | | | | | | | | | | | | | | As near as I can tell, the exit status of nfsidmap is supposed to be zero (success) or one (failure). The return value of id_lookup() becomes the exit status, so it should return only zero or one. The libnfsidmap calls return a signed integer, either 0 or negative errno values. These have to be translated to an exit status. libkeyutils calls return a signed long, either 0 or -1. These also have to be translated to an exit status. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: List cached ID mapping resultsChuck Lever2015-09-162-3/+98
| | | | | | | User space can see the keys, but not their contents. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: Use find_key_by_type_and_desc() if availableChuck Lever2015-09-162-44/+65
| | | | | | | | | | | Recent versions of libkeyutils have find_key_by_type_and_desc() which replaces the open-coded keyring search in keyring_clear(). I don't quite understand what's going on in key_invalidate(), so I didn't touch it. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: Display the effective NFSv4 domain nameChuck Lever2015-09-162-14/+71
| | | | | | | | | Sorry for the extensive man page changes. I added the description for the new "-d" option, then realized there was no explanation about what an "NFSv4 domain name" is. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* configure.ac: with-systemd flag not using default directorySteve Dickson2015-09-151-1/+8
| | | | | | | The with-systemd config flag was not using the default directory when a directory was not given Signed-off-by: Steve Dickson <steved@redhat.com>
* Install only needed systemd unit fileAurelien Chabot2015-09-151-5/+17
| | | | | Signed-off-by: Aurelien Chabot <aurelien@chabot.fr> Signed-off-by: Steve Dickson <steved@redhat.com>
* Revert "rpc.gssd: Replace exit(0) by return in process_krb5_upcall"Steve Dickson2015-09-081-1/+1
| | | | | This reverts commit 21f10369965bb183d1a72df1da0c2811cd2b1d5c due to child processes not exiting on upcalls.
* rpc.gssd: Replace exit(0) by return in process_krb5_upcallAndy Adamson2015-08-241-1/+1
| | | | | | | | | | | From: Andy Adamson <andros@netapp.com> exit(0) silenty reaps the gssd_k5_kt_princ struct, the in-memory rpc.gssd cache which means that rpc.gssd will get a new TGT and TGS for each upcall, ignoring a valid TGT in the kerberos credential cache. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountstats.man: fixed typo in man pageSteve Dickson2015-08-101-1/+1
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* rpc.gssd: Only clear the retval if it has not been setSteve Dickson2015-07-311-1/+3
| | | | | | | | In gssd_search_krb5_keytab() an error code can be cleared by blindly setting retval to zero. Reported-by: Jianhong Yin <jiyin@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Fixed typo in rpc.mount man pageSteve Dickson2015-07-141-1/+1
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* blkmapd: Skip the SCSI ID if data length is zeroKinglong Mee2015-07-141-0/+7
| | | | | | | | | | | | | | | | | | | | | | | In vmware linux, the iscsi device contains more than one SCSI ID, and the second one's data length is zero. If there are two iSCSI devices with the second SCSI ID's data length is zero, the first iSCSI device will record with an invalid SCSI ID as zero length, the second one will be treat as the first one for the SCSI ID is zero length too. It means the only the first iSCSI device is exist in blkmapd's cache, the request for the second iSCSI device will failed as, "blkmapd: Could not find disk for device" and, "bl_resolve_deviceid failed to decode device: 2". v2, update comments v3, add a comment in the code v4, update comment as Christoph's suggestion Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* rpc.nfsd: Squelch DNS errors when using the --host optionChuck Lever2015-07-143-90/+29
| | | | | | | | | | | | | | | | | | | | Sean Elble <elbles@sessys.com> says: > [rpc.nfsd --host] throws an error/warning (where nfs-server is > defined in /etc/hosts for the IPv4 address of the interface I wish > for TCP port 2049 to be opened on): > > rpc.nfsd: unable to resolve nfs-server:nfs to inet6 address: Name > or service not known I think we can simplify the use of getaddrinfo(3) so that only one call is needed to gather both IPv4 and IPv6 addresses. The call should fail, and an error should be reported, only when there are _no_ addresses bound to a hostname. Reported-by: Sean Elble <elbles@sessys.com> Reviewed-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* blkmapd: Fix infinite loop when reading serialKinglong Mee2015-06-301-1/+2
| | | | | | | | | | If (dev_id->ids & 0xf) < current_id, must updates pos when continue. Otherwise an infinite loop. No other places use the pos value, just move to the top of while. Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: Set var-lib-nfs-rpc_pipefs.mount After= tmpfilesColin Walters2015-06-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | OSTree is a mechanism for atomic updates of operating systems, with designs for how system state is managed; in particular, `/var` should start out empty, and components are responsible for creating content there at runtime. rpm-ostree consumes RPMs and commits them to an OSTree repository. It has some support for automatically synthesizing systemd `tmpfiles.d` snippets from RPM content in `/var` using systemd-tmpfiles. However, in this case nfs-utils wants a mount point directory, and it's running before systemd-tmpfiles. It should be perfectly fine to do this mount after tmpfiles has run. A better fix for this would be to move transient directories to `/run`; However, that would be an invasive change, which can happen after this fix. Signed-off-by: Colin Walters <walters@verbum.org> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-server: Use rpcbind.service instead of rpbind.targetSteve Dickson2015-06-251-2/+2
| | | | | | | | To trigger the systemd socket activation support in rpcbind, nfs-service needs to Requires/After rpcbind.service instead of rpbind.target Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs manpage: Add nfsmount.confSteve Dickson2015-06-251-1/+4
| | | | | | | Add nfsmount.conf to both the FILES and SEE ALSO sections Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs manpage: Add nfsmount.confSteve Dickson2015-06-251-0/+4
| | | | | | | Add nfsmount.conf to both the FILES and SEE ALSO sections Signed-off-by: Steve Dickson <steved@redhat.com>
* mountstats: Fix the retrans counter output by the nfsstat commandScott Mayhew2015-06-031-1/+1
| | | | | Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* security information number as, 1 1 0 0Kinglong Mee2015-05-062-1/+4
| | | | | | | | | | | It's caused by commit 4a1ad4aa30, "mountd: Enable all auth flavors on pseudofs exports" This patch removes duplicate secinfo and invalid secinfo (zero). Acked-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: Writes signal number to kernel as command lineKinglong Mee2015-05-061-2/+7
| | | | | | | | | | | | When mounting nfs with -overs=4,minorversion=2, want getting nfs mounts with vers=4.2, but got vers=4.0 as, It's caused by mount.nfs writing bad vers to kernel. This patch lets mount.nfs writing signal number to kernel as command line. Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* When mounting nfs with -ov4, -overs=4 or -onfsvers=4, fail as,Kinglong Mee2015-05-061-9/+3
| | | | | | | | | | | mount -t nfs -ov4 192.168.31.12:/ /testidr/ mount.nfs: access denied by server while mounting 192.168.31.12:/ Fixes: f980298853 "mount.nfs: configurable minor version defaults" Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* osd_login: add --disable-osdlogin for configure osd_loginKinglong Mee2015-05-061-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | Configure using the following command ./configure --prefix=/home/username/installs/tmp --exec-prefix=/home/username/installs/tmp When running "make install" most of the packages are put under /home/username/installs/tmp, but for some reason the install script tries to put osd_login under /sbin, which results in an error: Making install in osd_login make[2]: Entering directory `/home/username/installs/nfs-utils-1.3.2/utils/osd_login' make[3]: Entering directory `/home/username/installs/nfs-utils-1.3.2/utils/osd_login' /usr/bin/mkdir -p '/sbin' /usr/bin/install -c osd_login '/sbin' /usr/bin/install: cannot remove ‘/sbin/osd_login’: Permission denied make[3]: *** [install-dist_sbinSCRIPTS] Error 1 Reported-by: Eino Juhani Oltedal <e.j.oltedal@fys.uio.no> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* configure.ac: fix configure fail with --disable-mountKinglong Mee2015-05-061-1/+3
| | | | | | | | | | | | Configure fail as, ./configure --disable-mount : checking for suitable libblkid version... yes checking for mnt_context_do_mount in -lmount... no configure: error: libmount needed Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* configure.ac: fix typo of enable_nfsdcltrackKinglong Mee2015-05-061-1/+1
| | | | | Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsidmap: make sure give arguments are validSteve Dickson2015-05-041-1/+4
| | | | | | | Detect when a given argument is invalid. Log the error and exit gracefully Signed-off-by: Steve Dickson <steved@redhat.com>
* exportfs: add missing comma for exports entKinglong Mee2015-04-061-1/+1
| | | | | | | | | | | | | When using pnfs with "fsid=0", exportfs prints error as, $ exportfs -a exportfs: /var/lib/nfs/etab:1: unknown keyword "no_pnfsfsid=0" Commit cdd16bef98 ("nfs-utils: add support for the "pnfs" export option") miss the comma after "pnfs"/"on_pnfs" operation. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-utils: add support for the "pnfs" export optionChristoph Hellwig2015-04-024-0/+17
| | | | | | | | This goes along with the patch just sent to Bruce to make pnfs support conditional. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs.man, nfs.man: Update distinction between fstypesBen Hutchings2015-04-021-4/+8
| | | | | | | | | | From: Ben Hutchings <ben@decadent.org.uk> this is a resync of the man page updates in the Debian package with mainline nfs-utils. Acked-By: J. Bruce Fields <bfields@fieldses.org> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-utils: cross-reference nfsd.7 from nfsd.8 and vice versaCyril Brulebois2015-04-022-0/+2
| | | | | | | | | | | From: Cyril Brulebois <kibi@debian.org> It'd be nice if one could notice nfsd(7) when reading nfsd(8) and the other way round, without having to have to resort to dpkg -L $pkg to figure out what documentation is available. Acked-By: J. Bruce Fields <bfields@fieldses.org> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: Enable all auth flavors on pseudofs exportsScott Mayhew2015-04-021-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the current mountd code it's possible to craft exports in such a manner that clients will be unable to mount exports that they *should* be able to mount. Consider the following example: /foo *(rw,insecure,no_root_squash,sec=krb5p) /bar client.example.com(rw,insecure,no_root_squash) Initially, client.example.com will be able to mount the /foo export using sec=krb5p, but attempts to mount /bar using sec=sys will return EPERM. Once the nfsd.export cache entry expires, client.example.com will then be able to mount /bar using sec=sys but attempts to mount /foo using sec=krb5p will return EPERM. The reason this happens is because the initial nfsd.export cache entry is actually pre-populated by nfsd_fh(), which is the handler for the nfsd.fh cache, while later cache requests (once the initial entry expires) are handled by nfsd_export(). These functions have slightly different logic in how they select a v4root export from the cache -- nfsd_fh() takes last matching v4root export it finds, while nfsd_export() (actually lookup_export()) takes the first. Either way it's wrong because the client should be able to mount both exports. Both rfc3503bis and rfc5661 say: A common and convenient practice, unless strong security requirements dictate otherwise, is to make the entire pseudo file system accessible by all of the valid security mechanisms. ...so lets do that. Acked-by: J. Bruce Fields <bfields@fieldses.org> Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: improve error message when statd cannot be started.NeilBrown2015-03-262-0/+4
| | | | | | | | | | | | | | | | | | | | | | If you try to mount and NFSv3 filesystem, and statd is not running and cannot be started (maybe rpcbind isn't running either), the error message is: mount.nfs: rpc.statd is not running but is required for remote locking. mount.nfs: Either use '-o nolock' to keep locks local, or start statd. mount.nfs: an incorrect mount option was specified That last line is incorrect and misleading: no incorret mount option was specified. This line comes from mount_error() in error.c. In this case that function doesn't really need to provide any more information. So introduce a concention that EALREADY means an error message has already been printed, and use it to suppress that message. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
* blkmapd: Make sure device root contains valid device idKinglong Mee2015-03-261-3/+7
| | | | | | | | | When testing pnfs in virtual linux based on VirtualBox, blkmapd gets dev_root->len == 0, which causes it Segmentation fault. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-blkmap.service: add EnvironmentFile directiveSteve Dickson2015-03-191-0/+1
| | | | | | Fixes: https://bugzilla.linux-nfs.org/show_bug.cgi?id=281 Signed-off-by: Steve Dickson <steved@redhat.com>
* units: nuke nfs-blkmap.targetZbigniew Jędrzejewski-Szmek2015-03-195-15/+5
| | | | | | | | | | | | | | | | | It seems that the purpose of nfs-blkmap.target was to enable and disable nfs-blkmap.service. This can be done directly by adding an [Install] section in nfs-blkmap.service. The downside of the previous arrangement, apart from the unnecessary complexity, was a warning during boot: [ INFO ] PNFS blkmaping enablement. is not active. [DEPEND] Dependency failed for pNFS block layout mapping daemon. https://bugzilla.redhat.com/show_bug.cgi?id=1088665 Signed-off-by: Zbigniew J?drzejewski-Szmek <zbyszek@in.waw.pl> Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: Relax dependencies of servicesMartin Pitt2015-03-197-4/+13
| | | | | | | | | | Stop depending on basic.target in the daemons which still do; i. e. add DefaultDependencies=no. This makes it possible to run NFS during early boot, and helps if you e. g. have /var on NFS. We don't require much else than local-fs. Acked-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: Order NFS server before clientMartin Pitt2015-03-191-0/+3
| | | | | | | | | This makes mounting NFS shares from localhost work reliably, as you need to start the server before attempting (client) mounts, and conversely on shutdown need to unmount all shares before stopping the server to avoid hangs. Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: Have rpc-statd-notify.service Require network.targetSteve Dickson2015-03-191-1/+1
| | | | | | | | | | | | Its been reported that having the rpc-statd-notify service depend on network.target instead network-online.target decrease boot times as much as 10 seconds on some installs Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1183293 Signed-off-by: Steve Dickson <steved@redhat.com> Reported-by: Eric Work <work.eric@gmail.com>
* mountstats: Normalize the mountpoints passed on the command line.Scott Mayhew2015-03-041-3/+3
| | | | | | | | Normalize the mountpoints passed on the command line so that commands like 'mountstats /mnt/' succeed rather than fail. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountstats: Fix exit code handlingScott Mayhew2015-03-041-4/+7
| | | | | | | | | | | When I changed mountstats to use the argparse module, I neglected to make the subcommand functions return any values even though main() was looking for them. Also removed SystemExit from the except clause at the end of the program since it was causing the program to always exit with a status of 1. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* configure.ac: Fix systemd autotools activation optionAurélien Chabot2015-02-261-1/+0
| | | | | | | The option to activate the install of systemd service files was never taken into account. Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: Fix memory leak in getexportentScott Mayhew2015-02-261-1/+1
| | | | | | | | | | | Valgrind shows that the memory allocated for ee.e_hostname in getexportent() is being leaked. While there _is_ a call to xfree(), by the time it gets called the leak's already happened. Moving the xfree() call so that it occurs before the assignment that overwrites ee fixes this. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* rpc.statd: Avoid passing unregistered socket to svc_getreqsetCarlos O'Donell2015-02-261-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rpc.statd may crash if it receives both a notification reply and a client connection at the same time. It crashes because it adds sockfd to SVC_FDSET and that violates the API contract. The SVC_FDSET is to be considered read-only and must not be modified by user code. The daemon modifies it for expediency to avoid having to maintain two distinct fd lists and select on each one. It is a practical choice that makes sense. Thus, if a notification reply arrives by itself everything works, or if a client connection arrives by itself everything works. Both must arrive at the same time for sockfd to be set in SVC_FDSET and to be processed by svc_getreqset because more than one of readfds is ready. It is the processing by svc_getreqset that will crash when it finds an unregistered fd in the list that doesn't correlate to any of the internal book keeping done by the library. At present the glibc SunRPC library will crash, but TIRPC does not (it is robust against invalid API usage in this case). However, future RPC libraries may be implemented differently, and the questionable API usage should be fixed. The simplest fix is for process_reply to *clear* sockfd from the ready-to-read fds, since it was never registered with xprt_register. This works because the code always calls process_reply before handing the fd set to the RPC layer for processing. Compile-tested on x86_64 against master. Signed-off-by: Carlos O'Donell <carlos@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>