* Kernel update 3.5.7 -> 3.6.3 breaks NFS4 @ 2012-10-26 15:58 Sven Geggus 2012-10-26 16:39 ` VDR User 2012-10-26 17:15 ` J. Bruce Fields 0 siblings, 2 replies; 29+ messages in thread From: Sven Geggus @ 2012-10-26 15:58 UTC (permalink / raw) To: linux-nfs Hello, after updating the kernel of my NFS4-Server (because of 3.5.x EOL) I ended up with NFS4 stopped working. Kernel config is more or less the same as with 3.5.7, as I used "make oldconfig". The only new stuff in the NFS area seems to be swap over NFS which is disabled. So starting from a working setup with 3.5.7 on the server (client uses kernel 3.6.3) NFS4 stops working after upgrading the server to 3.6.3. What happens is that mounting seems to hang infinitely when trying to mount the server using the following command: mount -v -t nfs4 -o sec=krb5 <server>:/<dir> /mnt/ However everything works fine again when the server has been rebooted into kernel 3.5.7. Here is the relevant part of .config: CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m CONFIG_NFS_V2=m CONFIG_NFS_V3=m CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=m # CONFIG_NFS_SWAP is not set # CONFIG_NFS_V4_1 is not set # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y CONFIG_NFS_DEBUG=y CONFIG_NFSD=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_ACL_SUPPORT=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_RPCSEC_GSS_KRB5=y CONFIG_SUNRPC_DEBUG=y Sven P.S.: The system is using nfs-utils 1.2.6 on debian wheezy if this should be relevant. -- "Those who do not understand Unix are condemned to reinvent it, poorly" (Henry Spencer) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-26 15:58 Kernel update 3.5.7 -> 3.6.3 breaks NFS4 Sven Geggus @ 2012-10-26 16:39 ` VDR User 2012-10-31 12:47 ` Sven Geggus 2012-10-26 17:15 ` J. Bruce Fields 1 sibling, 1 reply; 29+ messages in thread From: VDR User @ 2012-10-26 16:39 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs I use debian testing here and NFSv4. My clients are running kernel 3.6.3, server is running 3.6.2. No problems here. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-26 16:39 ` VDR User @ 2012-10-31 12:47 ` Sven Geggus 0 siblings, 0 replies; 29+ messages in thread From: Sven Geggus @ 2012-10-31 12:47 UTC (permalink / raw) To: linux-nfs VDR User <user.vdr@gmail.com> wrote: > I use debian testing here and NFSv4. My clients are running kernel > 3.6.3, server is running 3.6.2. No problems here. Are you using sec=krb5? Sven -- "Der wichtigste Aspekt, den Sie vor der Entscheidung für ein Open Source-Betriebssystem bedenken sollten, ist, dass Sie kein Windows-Betriebssystem erhalten." (von http://www.dell.de/ubuntu) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-26 15:58 Kernel update 3.5.7 -> 3.6.3 breaks NFS4 Sven Geggus 2012-10-26 16:39 ` VDR User @ 2012-10-26 17:15 ` J. Bruce Fields [not found] ` <20121029094038.GA14836@geggus.net> 1 sibling, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-10-26 17:15 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Fri, Oct 26, 2012 at 03:58:34PM +0000, Sven Geggus wrote: > Hello, > > after updating the kernel of my NFS4-Server (because of 3.5.x EOL) I ended > up with NFS4 stopped working. > > Kernel config is more or less the same as with 3.5.7, as I used "make > oldconfig". The only new stuff in the NFS area seems to be swap over NFS > which is disabled. > > So starting from a working setup with 3.5.7 on the server (client uses > kernel 3.6.3) NFS4 stops working after upgrading the server to 3.6.3. > > What happens is that mounting seems to hang infinitely when trying to mount > the server using the following command: > mount -v -t nfs4 -o sec=krb5 <server>:/<dir> /mnt/ Could I see a network trace? tcpdump -s0 -wtmp.pcap 'host <myclient> && host <myserver>' then try the mount, then kill tcpdump and send me a copy of tmp.pcap. --b. > > However everything works fine again when the server has been rebooted into kernel > 3.5.7. > > Here is the relevant part of .config: > CONFIG_NETWORK_FILESYSTEMS=y > CONFIG_NFS_FS=m > CONFIG_NFS_V2=m > CONFIG_NFS_V3=m > CONFIG_NFS_V3_ACL=y > CONFIG_NFS_V4=m > # CONFIG_NFS_SWAP is not set > # CONFIG_NFS_V4_1 is not set > # CONFIG_NFS_USE_LEGACY_DNS is not set > CONFIG_NFS_USE_KERNEL_DNS=y > CONFIG_NFS_DEBUG=y > CONFIG_NFSD=y > CONFIG_NFSD_V2_ACL=y > CONFIG_NFSD_V3=y > CONFIG_NFSD_V3_ACL=y > CONFIG_NFSD_V4=y > # CONFIG_NFSD_FAULT_INJECTION is not set > CONFIG_LOCKD=y > CONFIG_LOCKD_V4=y > CONFIG_NFS_ACL_SUPPORT=y > CONFIG_NFS_COMMON=y > CONFIG_SUNRPC=y > CONFIG_SUNRPC_GSS=y > CONFIG_RPCSEC_GSS_KRB5=y > CONFIG_SUNRPC_DEBUG=y > > > Sven > > P.S.: The system is using nfs-utils 1.2.6 on debian wheezy if this should be > relevant. > > -- > "Those who do not understand Unix are condemned to reinvent it, poorly" > (Henry Spencer) > > /me is giggls@ircnet, http://sven.gegg.us/ on the Web > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 29+ messages in thread
[parent not found: <20121029094038.GA14836@geggus.net>]
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 [not found] ` <20121029094038.GA14836@geggus.net> @ 2012-10-29 15:02 ` J. Bruce Fields 2012-10-29 16:33 ` Sven Geggus 2012-11-05 16:55 ` Sven Geggus 0 siblings, 2 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-10-29 15:02 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs Re-adding linux-nfs to cc: On Mon, Oct 29, 2012 at 10:40:38AM +0100, Sven Geggus wrote: > J. Bruce Fields schrieb am Freitag, den 26. Oktober um 19:15 Uhr: > > > Could I see a network trace? > > Shure. I can also do one with the working kernel. > > > tcpdump -s0 -wtmp.pcap 'host <myclient> && host <myserver>' > > > > then try the mount, then kill tcpdump and send me a copy of tmp.pcap. > > pcap file attached. Thanks. So running "wireshark nfs4.pcap", I see: frame 13, 15: create a gss context with handle 0x01000000 frame 17, 18: client sends a DESTROY for context 0x01000000 and a TCP FIN. The RPC is malformed in that it has no verifier field. The server doesn't respond. frame 19: client sends a PUTROOTFH using context 0x01000000. frame 25-31: a minute has passed, the client gives up, closes the connection and retries the PUTROOTFH, again with the same context. That DESTROY is sent over the same connection as the context creation, so must have been done by gssd. So gssd has a bug. Well, two: first, the DESTROY is malformed, second, it shouldn't be sending it anyway. I don't understand why the server is dropping requests instead of returning errors. I actually would have expected it to return BADVERF to the DESTROY request and then accept the PUTROOTFH normally, which might have allowed the mount to succeed despite the bizarre rpc.gssd behavior. I'd be curious to understand what changed on the server to make a difference. I can't think of anything. Looking at a network trace from a successful mount with 3.5.7 might be useful. --b. > > This is what I called: > mount -t nfs4 -v -o sec=krb5 centauri:/storage /mnt > > Client ist venus (10.1.7.30), server is centauri (10.1.7.67) kerberos realm > (AD) is PC.IITB.FHG.DE > > What I should probably also metion is that the machine is a redundant system > using drbd. The IP-address 10.1.7.67 can be migrated to the the slave > machine in case of a hardware failure. So if something seems to be missing I > can also create a capture file including the other IP-address of the > server system. > > Regards > > Sven > > -- > "Those who do not understand Unix are condemned to reinvent it, poorly" > (Henry Spencer) > > /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-29 15:02 ` J. Bruce Fields @ 2012-10-29 16:33 ` Sven Geggus 2012-10-29 22:09 ` J. Bruce Fields 2012-10-31 12:52 ` Sven Geggus 2012-11-05 16:55 ` Sven Geggus 1 sibling, 2 replies; 29+ messages in thread From: Sven Geggus @ 2012-10-29 16:33 UTC (permalink / raw) To: J. Bruce Fields; +Cc: linux-nfs [-- Attachment #1: Type: text/plain, Size: 968 bytes --] J. Bruce Fields schrieb am Montag, den 29. Oktober um 16:02 Uhr: > Re-adding linux-nfs to cc OK > I don't understand why the server is dropping requests instead of > returning errors. I actually would have expected it to return BADVERF > to the DESTROY request and then accept the PUTROOTFH normally, which > might have allowed the mount to succeed despite the bizarre rpc.gssd > behavior. Hm rpc.gssd is the one from debian nfs-utils 1.2.6 looking at their custom patches inside the debian package there is nothing which could cause this. > I'd be curious to understand what changed on the server to make a > difference. Nothing but the kernel. I'm currently dual booting either 3.5.7 or 3.6.3 vanilla kernels on the same system. > Looking at a network trace from a successful mount with 3.5.7 might be > useful. attached. Sven -- "C Is Quirky, Flawed, And An Enormous Success." (Dennis M. Ritchie) /me is giggls@ircnet, http://sven.gegg.us/ on the Web [-- Attachment #2: nfs4-ok.pcap --] [-- Type: application/cap, Size: 11440 bytes --] ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-29 16:33 ` Sven Geggus @ 2012-10-29 22:09 ` J. Bruce Fields 2012-10-31 12:52 ` Sven Geggus 1 sibling, 0 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-10-29 22:09 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Mon, Oct 29, 2012 at 05:33:23PM +0100, Sven Geggus wrote: > J. Bruce Fields schrieb am Montag, den 29. Oktober um 16:02 Uhr: > > > Re-adding linux-nfs to cc > > OK > > > I don't understand why the server is dropping requests instead of > > returning errors. I actually would have expected it to return BADVERF > > to the DESTROY request and then accept the PUTROOTFH normally, which > > might have allowed the mount to succeed despite the bizarre rpc.gssd > > behavior. > > Hm rpc.gssd is the one from debian nfs-utils 1.2.6 looking at their custom > patches inside the debian package there is nothing which could cause this. > > > I'd be curious to understand what changed on the server to make a > > difference. > > Nothing but the kernel. I'm currently dual booting either 3.5.7 or 3.6.3 > vanilla kernels on the same system. > > > Looking at a network trace from a successful mount with 3.5.7 might be > > useful. > > attached. Thanks! The sequence of events is pretty much what I described for the "bad" trace, except that PUTROOTFH gets a succesful reply. One other odd difference: in the "bad" case, the timing is a little different: the socket gssd created doesn't get shut down in the same way, and the PUTROOTFH comes more quickly on the heels of the FIN. Which shouldn't make a difference. Hm. --b. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-29 16:33 ` Sven Geggus 2012-10-29 22:09 ` J. Bruce Fields @ 2012-10-31 12:52 ` Sven Geggus 2012-10-31 14:28 ` VDR User 1 sibling, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-10-31 12:52 UTC (permalink / raw) To: linux-nfs Sven Geggus <lists@fuchsschwanzdomain.de> wrote: >> I'd be curious to understand what changed on the server to make a >> difference. > > Nothing but the kernel. I'm currently dual booting either 3.5.7 or 3.6.3 > vanilla kernels on the same system. I did some further investigation on this using a freshly installed system on virtualbox with either kernel. Same odd behaviour. Everything work using Kernel 3.5.7. Server does not work using Kernel 3.6.3. There are even different filesystems on the vm (ext4) and on the real server (xfs). Looks like I need to cherry-pick nfs4 server changes between 3.5.7 and 3.6.3 now :( Regards Sven -- "Those who do not understand Unix are condemned to reinvent it, poorly" (Henry Spencer) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-31 12:52 ` Sven Geggus @ 2012-10-31 14:28 ` VDR User 2012-10-31 15:33 ` Sven Geggus 0 siblings, 1 reply; 29+ messages in thread From: VDR User @ 2012-10-31 14:28 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Wed, Oct 31, 2012 at 5:52 AM, Sven Geggus <lists@fuchsschwanzdomain.de> wrote: >>> I'd be curious to understand what changed on the server to make a >>> difference. >> >> Nothing but the kernel. I'm currently dual booting either 3.5.7 or 3.6.3 >> vanilla kernels on the same system. > > I did some further investigation on this using a freshly installed > system on virtualbox with either kernel. > > Same odd behaviour. Everything work using Kernel 3.5.7. Server does not work using > Kernel 3.6.3. > > There are even different filesystems on the vm (ext4) and on the real server > (xfs). > > Looks like I need to cherry-pick nfs4 server changes between 3.5.7 and 3.6.3 now :( In case you missed my previous message, "I use debian testing here and NFSv4. My clients are running kernel 3.6.3, server is running 3.6.2. No problems here". It would seem you only need to cherry-pick server changes between 3.6.2 and 3.6.3...? ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-31 14:28 ` VDR User @ 2012-10-31 15:33 ` Sven Geggus 2012-10-31 17:43 ` VDR User 0 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-10-31 15:33 UTC (permalink / raw) To: linux-nfs VDR User <user.vdr@gmail.com> wrote: > In case you missed my previous message, "I use debian testing here and > NFSv4. My clients are running kernel 3.6.3, server is running 3.6.2. No > problems here". No, I did not miss your post. I even asked if you are using sec=krb5. I did not try if it works without using kerberos, because I am not interested in "No File Security" NFS3-like mode. > It would seem you only need to cherry-pick server changes between 3.6.2 > and 3.6.3...? Unfortunately not. It already did not work using 3.6.2 Regards Sven -- "Der wichtigste Aspekt, den Sie vor der Entscheidung für ein Open Source-Betriebssystem bedenken sollten, ist, dass Sie kein Windows-Betriebssystem erhalten." (von http://www.dell.de/ubuntu) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-31 15:33 ` Sven Geggus @ 2012-10-31 17:43 ` VDR User 2012-11-05 14:45 ` Sven Geggus 0 siblings, 1 reply; 29+ messages in thread From: VDR User @ 2012-10-31 17:43 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Wed, Oct 31, 2012 at 8:33 AM, Sven Geggus <lists@fuchsschwanzdomain.de> wrote: >> In case you missed my previous message, "I use debian testing here and >> NFSv4. My clients are running kernel 3.6.3, server is running 3.6.2. No >> problems here". > > No, I did not miss your post. I even asked if you are using sec=krb5. I did > not try if it works without using kerberos, because I am not interested in > "No File Security" NFS3-like mode. Ahh sorry. I misread your post and thought it was directed towards someone else. No, I'm not using sec=krb5. >> It would seem you only need to cherry-pick server changes between 3.6.2 >> and 3.6.3...? > > Unfortunately not. It already did not work using 3.6.2 You could always write a simple script to download & compile each kernel inbetween that range, then just boot into each and find where the breakage occured that way. Sometimes its easier than sifting through a sea of changes. :) ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-31 17:43 ` VDR User @ 2012-11-05 14:45 ` Sven Geggus 0 siblings, 0 replies; 29+ messages in thread From: Sven Geggus @ 2012-11-05 14:45 UTC (permalink / raw) To: linux-nfs VDR User <user.vdr@gmail.com> wrote: > Ahh sorry. I misread your post and thought it was directed towards > someone else. No, I'm not using sec=krb5. OK so this is not a comparable use case. Sven -- "Ich fürchte mich nicht vor der Rückkehr der Faschisten in der Maske der Faschisten, sondern vor der Rückkehr der Faschisten in der Maske der Demokraten" (Theodor W. Adorno) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-10-29 15:02 ` J. Bruce Fields 2012-10-29 16:33 ` Sven Geggus @ 2012-11-05 16:55 ` Sven Geggus 2012-11-09 18:45 ` Sven Geggus 1 sibling, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-11-05 16:55 UTC (permalink / raw) To: J. Bruce Fields J. Bruce Fields schrieb am Montag, den 29. Oktober um 16:02 Uhr: > I'd be curious to understand what changed on the server to make a > difference. I can't think of anything. OK, I now figured out which commit did cause the problem: commit 08843b79fb35d33859e0f8f11a7318341076e4d1 Merge: cc8362b 2c142ba Author: Linus Torvalds <torvalds@linux-foundation.org> Date: Tue Jul 31 14:42:28 2012 -0700 Merge branch 'nfsd-next' of git://linux-nfs.org/~bfields/linux Pull nfsd changes from J. Bruce Fields: "This has been an unusually quiet cycle--mostly bugfixes and cleanup. The one large piece is Stanislav's work to containerize the server's grace period--but that in itself is just one more step in a not-yet-complete project to allow fully containerized nfs service. There are a number of outstanding delegation, container, v4 state, and gss patches that aren't quite ready yet; 3.7 may be wilder." * 'nfsd-next' of git://linux-nfs.org/~bfields/linux: (35 commits) NFSd: make boot_time variable per network namespace NFSd: make grace end flag per network namespace Lockd: move grace period management from lockd() to per-net functions LockD: pass actual network namespace to grace period management functions LockD: manage grace list per network namespace SUNRPC: service request network namespace helper introduced NFSd: make nfsd4_manager allocated per network namespace context. LockD: make lockd manager allocated per network namespace LockD: manage grace period per network namespace Lockd: add more debug to host shutdown functions Lockd: host complaining function introduced LockD: manage used host count per networks namespace LockD: manage garbage collection timeout per networks namespace LockD: make garbage collector network namespace aware. LockD: mark host per network namespace on garbage collect nfsd4: fix missing fault_inject.h include locks: move lease-specific code out of locks_delete_lock locks: prevent side-effects of locks_release_private before file_lock is initialized NFSd: set nfsd_serv to NULL after service destruction NFSd: introduce nfsd_destroy() helper ... Thus "git diff 08843b79..cc8362b1" on a linux-stable tree from git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git should give us the relevant changes. Regards Sven -- Das allgemeine Persönlichkeitsrecht (Art. 2 Abs.1 i.V.m. Art.1 Abs. 1GG) umfasst das Grundrecht auf Gewährleistung der Vertraulichkeit und Integrität informationstechnischer Systeme. (BVerfG, 1BvR 370/07) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-05 16:55 ` Sven Geggus @ 2012-11-09 18:45 ` Sven Geggus 2012-11-09 20:07 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-11-09 18:45 UTC (permalink / raw) To: linux-nfs Sven Geggus <lists@fuchsschwanzdomain.de> wrote: > OK, I now figured out which commit did cause the problem: > > Thus "git diff 08843b79..cc8362b1" on a linux-stable tree from > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git should > give us the relevant changes. After a private conversation with J. Bruce Fields I figured out that I have not been quite there yet. So here comes a FTR post what exactly caused my problem. It is the following change: $ git diff d9c2ede63c74048dfddbb129c59ac01176b0ab71 bbf43dc888833ac0539e437dbaeb28bfd4fbab9f diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 6def1f6..af42596 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h @@ -217,8 +217,6 @@ extern int qword_get(char **bpp, char *dest, int bufsize); static inline int get_int(char **bpp, int *anint) { char buf[50]; - char *ep; - int rv; int len = qword_get(bpp, buf, sizeof(buf)); if (len < 0) @@ -226,11 +224,9 @@ static inline int get_int(char **bpp, int *anint) if (len == 0) return -ENOENT; - rv = simple_strtol(buf, &ep, 0); - if (*ep) + if (kstrtoint(buf, 0, anint)) return -EINVAL; - *anint = rv; return 0; } Reverting this change on recent kernels makes them work for me again. Sven -- Unix is simple and coherent, but it takes a genius – or at any rate a programmer – to understand and appreciate the simplicity (Dennis M. Ritchie) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 18:45 ` Sven Geggus @ 2012-11-09 20:07 ` J. Bruce Fields 2012-11-09 20:09 ` J. Bruce Fields ` (2 more replies) 0 siblings, 3 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-11-09 20:07 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs, Eldad Zack On Fri, Nov 09, 2012 at 06:45:32PM +0000, Sven Geggus wrote: > Sven Geggus <lists@fuchsschwanzdomain.de> wrote: > > > OK, I now figured out which commit did cause the problem: > > > > Thus "git diff 08843b79..cc8362b1" on a linux-stable tree from > > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git should > > give us the relevant changes. > > After a private conversation with J. Bruce Fields I figured out that > I have not been quite there yet. So here comes a FTR post what > exactly caused my problem. Thanks for tracking this down--not what I would have guessed! Given that the trace showed a problem starting around context creation time, I'm most suspicious of the callers in rsc_parse, which are mostly parsing uid's. Is it possible that your system has very large uid's? (Large enough that they'd look like negative numbers when cast to ints?) Output from strace -p $(pidof rpc.mountd) -s4096 -e trace=open,close,read,write (while reproducing the bug) might help confirm that. --b. > > It is the following change: > > $ git diff d9c2ede63c74048dfddbb129c59ac01176b0ab71 bbf43dc888833ac0539e437dbaeb28bfd4fbab9f > diff --git a/include/linux/sunrpc/cache.h > b/include/linux/sunrpc/cache.h > index 6def1f6..af42596 100644 > --- a/include/linux/sunrpc/cache.h > +++ b/include/linux/sunrpc/cache.h > @@ -217,8 +217,6 @@ extern int qword_get(char **bpp, char *dest, int > bufsize); > static inline int get_int(char **bpp, int *anint) > { > char buf[50]; > - char *ep; > - int rv; > int len = qword_get(bpp, buf, sizeof(buf)); > > if (len < 0) > @@ -226,11 +224,9 @@ static inline int get_int(char **bpp, int > *anint) > if (len == 0) > return -ENOENT; > > - rv = simple_strtol(buf, &ep, 0); > - if (*ep) > + if (kstrtoint(buf, 0, anint)) > return -EINVAL; > > - *anint = rv; > return 0; > } > > Reverting this change on recent kernels makes them work for me again. > > Sven > > > -- > Unix is simple and coherent, but it takes a genius – or at any rate a > programmer – to understand and appreciate the simplicity > (Dennis M. Ritchie) > /me is giggls@ircnet, http://sven.gegg.us/ on the Web > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 20:07 ` J. Bruce Fields @ 2012-11-09 20:09 ` J. Bruce Fields 2012-11-09 22:45 ` Sven Geggus 2012-11-09 23:17 ` Eldad Zack 2 siblings, 0 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-11-09 20:09 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs, Eldad Zack On Fri, Nov 09, 2012 at 03:07:30PM -0500, bfields wrote: > On Fri, Nov 09, 2012 at 06:45:32PM +0000, Sven Geggus wrote: > > Sven Geggus <lists@fuchsschwanzdomain.de> wrote: > > > > > OK, I now figured out which commit did cause the problem: > > > > > > Thus "git diff 08843b79..cc8362b1" on a linux-stable tree from > > > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git should > > > give us the relevant changes. > > > > After a private conversation with J. Bruce Fields I figured out that > > I have not been quite there yet. So here comes a FTR post what > > exactly caused my problem. > > Thanks for tracking this down--not what I would have guessed! > > Given that the trace showed a problem starting around context creation > time, I'm most suspicious of the callers in rsc_parse, which are mostly > parsing uid's. > > Is it possible that your system has very large uid's? (Large enough > that they'd look like negative numbers when cast to ints?) > > Output from > > strace -p $(pidof rpc.mountd) -s4096 -e trace=open,close,read,write > > (while reproducing the bug) might help confirm that. And this might help. --b. diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index ec76f3a..31b4e95 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -430,7 +430,7 @@ static int rsc_parse(struct cache_detail *cd, goto out; /* uid, or NEGATIVE */ - rv = get_int(&mesg, &rsci.cred.cr_uid); + rv = get_uint(&mesg, &rsci.cred.cr_uid); if (rv == -EINVAL) goto out; if (rv == -ENOENT) @@ -439,7 +439,7 @@ static int rsc_parse(struct cache_detail *cd, int N, i; /* gid */ - if (get_int(&mesg, &rsci.cred.cr_gid)) + if (get_uint(&mesg, &rsci.cred.cr_gid)) goto out; /* number of additional gid's */ @@ -455,7 +455,7 @@ static int rsc_parse(struct cache_detail *cd, for (i=0; i<N; i++) { gid_t gid; kgid_t kgid; - if (get_int(&mesg, &gid)) + if (get_uint(&mesg, &gid)) goto out; kgid = make_kgid(&init_user_ns, gid); if (!gid_valid(kgid)) ^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 20:07 ` J. Bruce Fields 2012-11-09 20:09 ` J. Bruce Fields @ 2012-11-09 22:45 ` Sven Geggus 2012-11-09 23:24 ` J. Bruce Fields 2012-11-09 23:17 ` Eldad Zack 2 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-11-09 22:45 UTC (permalink / raw) To: J. Bruce Fields; +Cc: linux-nfs In article <20121109200730.GI6171@fieldses.org> you wrote: > Is it possible that your system has very large uid's? (Large enough > that they'd look like negative numbers when cast to ints?) Shurely not. however, mounting is done as root which might get mapped to nobody which usually is 65534. > Output from > > strace -p $(pidof rpc.mountd) -s4096 -e trace=open,close,read,write > > (while reproducing the bug) might help confirm that. While doing the hanging or while doing the proper mount? Sven -- Microsoft ist offenbar die einzige Firma, die in der Lage ist, ein mit Office nicht kompatibles Bürosoftwarepaket einzuführen. (Florian Weimer in de.alt.sysadmin.recovery) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 22:45 ` Sven Geggus @ 2012-11-09 23:24 ` J. Bruce Fields 2012-11-12 9:17 ` Sven Geggus 0 siblings, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-11-09 23:24 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Fri, Nov 09, 2012 at 11:45:41PM +0100, Sven Geggus wrote: > In article <20121109200730.GI6171@fieldses.org> you wrote: > > > Is it possible that your system has very large uid's? (Large enough > > that they'd look like negative numbers when cast to ints?) > > Shurely not. however, mounting is done as root which might get mapped to > nobody which usually is 65534. > > > Output from > > > > strace -p $(pidof rpc.mountd) -s4096 -e trace=open,close,read,write > > > > (while reproducing the bug) might help confirm that. > > While doing the hanging or while doing the proper mount? Restart the server, start strace, then try the mount, let it hang a few seconds just to make sure you got anything interesting, then kill strace and send the output. I guess the results in the succesful (good kernel) case might be interesting too, but probably the bad case is enough. --b. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 23:24 ` J. Bruce Fields @ 2012-11-12 9:17 ` Sven Geggus 2012-11-13 22:40 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-11-12 9:17 UTC (permalink / raw) To: J. Bruce Fields; +Cc: linux-nfs J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: OK, back at work and here is what I get: > Restart the server, start strace, then try the mount, let it hang a few > seconds just to make sure you got anything interesting, then kill strace > and send the output. OK, back at work and here is what I get... read(3, "nfsd 10.1.7.30\n", 2048) = 15 close(15) = 0 open("/var/lib/nfs/etab", O_RDONLY) = 15 close(15) = 0 close(15) = 0 write(3, "nfsd 10.1.7.30 1352710828 * \n", 29) = 29 read(4, "4294967295\n", 2048) = 11 close(16) = 0 close(15) = 0 read(15, "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0", 36) = 36 close(15) = 0 write(4, "4294967295 1352710828 0 \n", 25) = -1 EINVAL (Invalid argument) 4294967295 is UINT_MAX and this place is where it behaves differently on a good kernel where the write call will succeed: write(4, "4294967295 1352710828 0 \n", 25) = 25 Sven P.S.: Your patched svcauth_gss.c will give me an "access denied by server" while mounting instead of the infinite delay: ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ mount.nfs4: access denied by server while mounting testsrv:/storage -- Those who would give up Essential Liberty to purchase a little Temporary Safety, deserve neither Liberty nor Safety (Benjamin Franklin) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-12 9:17 ` Sven Geggus @ 2012-11-13 22:40 ` J. Bruce Fields 2012-11-14 0:58 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-11-13 22:40 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Mon, Nov 12, 2012 at 10:17:17AM +0100, Sven Geggus wrote: > J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: > > OK, back at work and here is what I get: > > > Restart the server, start strace, then try the mount, let it hang a few > > seconds just to make sure you got anything interesting, then kill strace > > and send the output. > > OK, back at work and here is what I get... > > read(3, "nfsd 10.1.7.30\n", 2048) = 15 > close(15) = 0 > open("/var/lib/nfs/etab", O_RDONLY) = 15 > close(15) = 0 > close(15) = 0 > write(3, "nfsd 10.1.7.30 1352710828 * \n", 29) = 29 > read(4, "4294967295\n", 2048) = 11 > close(16) = 0 > close(15) = 0 > read(15, > "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0", > 36) = 36 > close(15) = 0 > write(4, "4294967295 1352710828 0 \n", 25) = -1 EINVAL (Invalid argument) I suspect that error's coming from net/sunrpc/svcauth_unix.c:unix_gid_parse(). > 4294967295 is UINT_MAX and this place is where it behaves differently on a good > kernel where the write call will succeed: > > write(4, "4294967295 1352710828 0 \n", 25) = 25 > > Sven > > P.S.: Your patched svcauth_gss.c will give me an "access denied by server" > while mounting instead of the infinite delay: > ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ > mount.nfs4: access denied by server while mounting testsrv:/storage So, looks like the same get_int problem exists in several other places. Could you try the following instead of the previous patch? I think I got them all this time.... --b. commit 664f26313a738f539a32c4eadd5351905e301bf2 Author: J. Bruce Fields <bfields@redhat.com> Date: Fri Nov 9 15:16:02 2012 -0500 svcrpc: fix parsing of uids and gids in gss contexts bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace simple_strtoul" introduced new range-checking which could cause get_int to fail if given an unsigned integer too large to represent as an int. Symptoms were hangs on krb5 mounts after upgrading an NFS server. Cc: Eldad Zack <eldad@fogrefinery.com> Reported-by: Sven Geggus <lists@fuchsschwanzdomain.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com> diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index a3946cf..8481961 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -491,7 +491,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) int err; struct auth_domain *dom = NULL; struct svc_export exp = {}, *expp; - int an_int; + unsigned int an_int; if (mesg[mlen-1] != '\n') return -EINVAL; @@ -531,7 +531,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) goto out3; /* flags */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err == -ENOENT) { err = 0; set_bit(CACHE_NEGATIVE, &exp.h.flags); @@ -541,19 +541,19 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) exp.ex_flags= an_int; /* anon uid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_anon_uid= an_int; /* anon gid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_anon_gid= an_int; /* fsid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_fsid = an_int; diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c index a1f10c0..e2c9317 100644 --- a/fs/nfsd/nfs4idmap.c +++ b/fs/nfsd/nfs4idmap.c @@ -415,7 +415,7 @@ nametoid_parse(struct cache_detail *cd, char *buf, int buflen) goto out; /* ID */ - error = get_int(&buf, &ent.id); + error = get_uint(&buf, &ent.id); if (error == -EINVAL) goto out; if (error == -ENOENT) diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 73e9573..243d180 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -444,7 +444,7 @@ static int rsc_parse(struct cache_detail *cd, goto out; /* uid, or NEGATIVE */ - rv = get_int(&mesg, &rsci.cred.cr_uid); + rv = get_uint(&mesg, &rsci.cred.cr_uid); if (rv == -EINVAL) goto out; if (rv == -ENOENT) @@ -453,7 +453,7 @@ static int rsc_parse(struct cache_detail *cd, int N, i; /* gid */ - if (get_int(&mesg, &rsci.cred.cr_gid)) + if (get_uint(&mesg, &rsci.cred.cr_gid)) goto out; /* number of additional gid's */ @@ -469,7 +469,7 @@ static int rsc_parse(struct cache_detail *cd, for (i=0; i<N; i++) { gid_t gid; kgid_t kgid; - if (get_int(&mesg, &gid)) + if (get_uint(&mesg, &gid)) goto out; kgid = make_kgid(&init_user_ns, gid); if (!gid_valid(kgid)) diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index 4d01292..5d7020a 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c @@ -493,7 +493,7 @@ static int unix_gid_parse(struct cache_detail *cd, return -EINVAL; mesg[mlen-1] = 0; - rv = get_int(&mesg, &uid); + rv = get_uint(&mesg, &uid); if (rv) return -EINVAL; ug.uid = uid; @@ -513,7 +513,7 @@ static int unix_gid_parse(struct cache_detail *cd, for (i = 0 ; i < gids ; i++) { int gid; kgid_t kgid; - rv = get_int(&mesg, &gid); + rv = get_uint(&mesg, &gid); err = -EINVAL; if (rv) goto out; ^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-13 22:40 ` J. Bruce Fields @ 2012-11-14 0:58 ` J. Bruce Fields 2012-11-14 16:07 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-11-14 0:58 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs On Tue, Nov 13, 2012 at 05:40:05PM -0500, J. Bruce Fields wrote: > On Mon, Nov 12, 2012 at 10:17:17AM +0100, Sven Geggus wrote: > > J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: > > > > OK, back at work and here is what I get: > > > > > Restart the server, start strace, then try the mount, let it hang a few > > > seconds just to make sure you got anything interesting, then kill strace > > > and send the output. > > > > OK, back at work and here is what I get... > > > > read(3, "nfsd 10.1.7.30\n", 2048) = 15 > > close(15) = 0 > > open("/var/lib/nfs/etab", O_RDONLY) = 15 > > close(15) = 0 > > close(15) = 0 > > write(3, "nfsd 10.1.7.30 1352710828 * \n", 29) = 29 > > read(4, "4294967295\n", 2048) = 11 > > close(16) = 0 > > close(15) = 0 > > read(15, > > "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0", > > 36) = 36 > > close(15) = 0 > > write(4, "4294967295 1352710828 0 \n", 25) = -1 EINVAL (Invalid argument) > > I suspect that error's coming from > net/sunrpc/svcauth_unix.c:unix_gid_parse(). > > > 4294967295 is UINT_MAX and this place is where it behaves differently on a good > > kernel where the write call will succeed: > > > > write(4, "4294967295 1352710828 0 \n", 25) = 25 > > > > Sven > > > > P.S.: Your patched svcauth_gss.c will give me an "access denied by server" > > while mounting instead of the infinite delay: > > ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ > > mount.nfs4: access denied by server while mounting testsrv:/storage > > So, looks like the same get_int problem exists in several other places. > Could you try the following instead of the previous patch? I think I > got them all this time.... Oh, cripes, but this isn't good enough--svcgssd actually passes down -1 id's. Ugh--I'll take a closer look tomorrow. --b. > > --b. > > commit 664f26313a738f539a32c4eadd5351905e301bf2 > Author: J. Bruce Fields <bfields@redhat.com> > Date: Fri Nov 9 15:16:02 2012 -0500 > > svcrpc: fix parsing of uids and gids in gss contexts > > bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace > simple_strtoul" introduced new range-checking which could cause get_int > to fail if given an unsigned integer too large to represent as an int. > > Symptoms were hangs on krb5 mounts after upgrading an NFS server. > > Cc: Eldad Zack <eldad@fogrefinery.com> > Reported-by: Sven Geggus <lists@fuchsschwanzdomain.de> > Signed-off-by: J. Bruce Fields <bfields@redhat.com> > > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index a3946cf..8481961 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -491,7 +491,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) > int err; > struct auth_domain *dom = NULL; > struct svc_export exp = {}, *expp; > - int an_int; > + unsigned int an_int; > > if (mesg[mlen-1] != '\n') > return -EINVAL; > @@ -531,7 +531,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) > goto out3; > > /* flags */ > - err = get_int(&mesg, &an_int); > + err = get_uint(&mesg, &an_int); > if (err == -ENOENT) { > err = 0; > set_bit(CACHE_NEGATIVE, &exp.h.flags); > @@ -541,19 +541,19 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) > exp.ex_flags= an_int; > > /* anon uid */ > - err = get_int(&mesg, &an_int); > + err = get_uint(&mesg, &an_int); > if (err) > goto out3; > exp.ex_anon_uid= an_int; > > /* anon gid */ > - err = get_int(&mesg, &an_int); > + err = get_uint(&mesg, &an_int); > if (err) > goto out3; > exp.ex_anon_gid= an_int; > > /* fsid */ > - err = get_int(&mesg, &an_int); > + err = get_uint(&mesg, &an_int); > if (err) > goto out3; > exp.ex_fsid = an_int; > diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c > index a1f10c0..e2c9317 100644 > --- a/fs/nfsd/nfs4idmap.c > +++ b/fs/nfsd/nfs4idmap.c > @@ -415,7 +415,7 @@ nametoid_parse(struct cache_detail *cd, char *buf, int buflen) > goto out; > > /* ID */ > - error = get_int(&buf, &ent.id); > + error = get_uint(&buf, &ent.id); > if (error == -EINVAL) > goto out; > if (error == -ENOENT) > diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c > index 73e9573..243d180 100644 > --- a/net/sunrpc/auth_gss/svcauth_gss.c > +++ b/net/sunrpc/auth_gss/svcauth_gss.c > @@ -444,7 +444,7 @@ static int rsc_parse(struct cache_detail *cd, > goto out; > > /* uid, or NEGATIVE */ > - rv = get_int(&mesg, &rsci.cred.cr_uid); > + rv = get_uint(&mesg, &rsci.cred.cr_uid); > if (rv == -EINVAL) > goto out; > if (rv == -ENOENT) > @@ -453,7 +453,7 @@ static int rsc_parse(struct cache_detail *cd, > int N, i; > > /* gid */ > - if (get_int(&mesg, &rsci.cred.cr_gid)) > + if (get_uint(&mesg, &rsci.cred.cr_gid)) > goto out; > > /* number of additional gid's */ > @@ -469,7 +469,7 @@ static int rsc_parse(struct cache_detail *cd, > for (i=0; i<N; i++) { > gid_t gid; > kgid_t kgid; > - if (get_int(&mesg, &gid)) > + if (get_uint(&mesg, &gid)) > goto out; > kgid = make_kgid(&init_user_ns, gid); > if (!gid_valid(kgid)) > diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c > index 4d01292..5d7020a 100644 > --- a/net/sunrpc/svcauth_unix.c > +++ b/net/sunrpc/svcauth_unix.c > @@ -493,7 +493,7 @@ static int unix_gid_parse(struct cache_detail *cd, > return -EINVAL; > mesg[mlen-1] = 0; > > - rv = get_int(&mesg, &uid); > + rv = get_uint(&mesg, &uid); > if (rv) > return -EINVAL; > ug.uid = uid; > @@ -513,7 +513,7 @@ static int unix_gid_parse(struct cache_detail *cd, > for (i = 0 ; i < gids ; i++) { > int gid; > kgid_t kgid; > - rv = get_int(&mesg, &gid); > + rv = get_uint(&mesg, &gid); > err = -EINVAL; > if (rv) > goto out; ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-14 0:58 ` J. Bruce Fields @ 2012-11-14 16:07 ` J. Bruce Fields 2012-11-14 16:08 ` J. Bruce Fields 2012-11-14 22:26 ` Eldad Zack 0 siblings, 2 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-11-14 16:07 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs, Eldad Zack On Tue, Nov 13, 2012 at 07:58:15PM -0500, J. Bruce Fields wrote: > On Tue, Nov 13, 2012 at 05:40:05PM -0500, J. Bruce Fields wrote: > > On Mon, Nov 12, 2012 at 10:17:17AM +0100, Sven Geggus wrote: > > > J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: > > > > > > OK, back at work and here is what I get: > > > > > > > Restart the server, start strace, then try the mount, let it hang a few > > > > seconds just to make sure you got anything interesting, then kill strace > > > > and send the output. > > > > > > OK, back at work and here is what I get... > > > > > > read(3, "nfsd 10.1.7.30\n", 2048) = 15 > > > close(15) = 0 > > > open("/var/lib/nfs/etab", O_RDONLY) = 15 > > > close(15) = 0 > > > close(15) = 0 > > > write(3, "nfsd 10.1.7.30 1352710828 * \n", 29) = 29 > > > read(4, "4294967295\n", 2048) = 11 > > > close(16) = 0 > > > close(15) = 0 > > > read(15, > > > "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0", > > > 36) = 36 > > > close(15) = 0 > > > write(4, "4294967295 1352710828 0 \n", 25) = -1 EINVAL (Invalid argument) > > > > I suspect that error's coming from > > net/sunrpc/svcauth_unix.c:unix_gid_parse(). > > > > > 4294967295 is UINT_MAX and this place is where it behaves differently on a good > > > kernel where the write call will succeed: > > > > > > write(4, "4294967295 1352710828 0 \n", 25) = 25 > > > > > > Sven > > > > > > P.S.: Your patched svcauth_gss.c will give me an "access denied by server" > > > while mounting instead of the infinite delay: > > > ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ > > > mount.nfs4: access denied by server while mounting testsrv:/storage > > > > So, looks like the same get_int problem exists in several other places. > > Could you try the following instead of the previous patch? I think I > > got them all this time.... > > Oh, cripes, but this isn't good enough--svcgssd actually passes down -1 > id's. Ugh--I'll take a closer look tomorrow. Yeah, for backwards compatibility reasons we probably don't want to reject either -1 or 4294967295. So I'm inclined to revert unless Eldad has a better idea. --b. commit 664f26313a738f539a32c4eadd5351905e301bf2 Author: J. Bruce Fields <bfields@redhat.com> Date: Fri Nov 9 15:16:02 2012 -0500 svcrpc: fix parsing of uids and gids in gss contexts bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace simple_strtoul" introduced new range-checking which could cause get_int to fail if given an unsigned integer too large to represent as an int. Symptoms were hangs on krb5 mounts after upgrading an NFS server. Cc: Eldad Zack <eldad@fogrefinery.com> Reported-by: Sven Geggus <lists@fuchsschwanzdomain.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com> diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index a3946cf..8481961 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -491,7 +491,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) int err; struct auth_domain *dom = NULL; struct svc_export exp = {}, *expp; - int an_int; + unsigned int an_int; if (mesg[mlen-1] != '\n') return -EINVAL; @@ -531,7 +531,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) goto out3; /* flags */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err == -ENOENT) { err = 0; set_bit(CACHE_NEGATIVE, &exp.h.flags); @@ -541,19 +541,19 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) exp.ex_flags= an_int; /* anon uid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_anon_uid= an_int; /* anon gid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_anon_gid= an_int; /* fsid */ - err = get_int(&mesg, &an_int); + err = get_uint(&mesg, &an_int); if (err) goto out3; exp.ex_fsid = an_int; diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c index a1f10c0..e2c9317 100644 --- a/fs/nfsd/nfs4idmap.c +++ b/fs/nfsd/nfs4idmap.c @@ -415,7 +415,7 @@ nametoid_parse(struct cache_detail *cd, char *buf, int buflen) goto out; /* ID */ - error = get_int(&buf, &ent.id); + error = get_uint(&buf, &ent.id); if (error == -EINVAL) goto out; if (error == -ENOENT) diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 73e9573..243d180 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -444,7 +444,7 @@ static int rsc_parse(struct cache_detail *cd, goto out; /* uid, or NEGATIVE */ - rv = get_int(&mesg, &rsci.cred.cr_uid); + rv = get_uint(&mesg, &rsci.cred.cr_uid); if (rv == -EINVAL) goto out; if (rv == -ENOENT) @@ -453,7 +453,7 @@ static int rsc_parse(struct cache_detail *cd, int N, i; /* gid */ - if (get_int(&mesg, &rsci.cred.cr_gid)) + if (get_uint(&mesg, &rsci.cred.cr_gid)) goto out; /* number of additional gid's */ @@ -469,7 +469,7 @@ static int rsc_parse(struct cache_detail *cd, for (i=0; i<N; i++) { gid_t gid; kgid_t kgid; - if (get_int(&mesg, &gid)) + if (get_uint(&mesg, &gid)) goto out; kgid = make_kgid(&init_user_ns, gid); if (!gid_valid(kgid)) diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index 4d01292..5d7020a 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c @@ -493,7 +493,7 @@ static int unix_gid_parse(struct cache_detail *cd, return -EINVAL; mesg[mlen-1] = 0; - rv = get_int(&mesg, &uid); + rv = get_uint(&mesg, &uid); if (rv) return -EINVAL; ug.uid = uid; @@ -513,7 +513,7 @@ static int unix_gid_parse(struct cache_detail *cd, for (i = 0 ; i < gids ; i++) { int gid; kgid_t kgid; - rv = get_int(&mesg, &gid); + rv = get_uint(&mesg, &gid); err = -EINVAL; if (rv) goto out; ^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-14 16:07 ` J. Bruce Fields @ 2012-11-14 16:08 ` J. Bruce Fields 2012-11-15 16:58 ` Sven Geggus 2012-11-14 22:26 ` Eldad Zack 1 sibling, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-11-14 16:08 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs, Eldad Zack On Wed, Nov 14, 2012 at 11:07:13AM -0500, J. Bruce Fields wrote: > On Tue, Nov 13, 2012 at 07:58:15PM -0500, J. Bruce Fields wrote: > > On Tue, Nov 13, 2012 at 05:40:05PM -0500, J. Bruce Fields wrote: > > > On Mon, Nov 12, 2012 at 10:17:17AM +0100, Sven Geggus wrote: > > > > J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: > > > > > > > > OK, back at work and here is what I get: > > > > > > > > > Restart the server, start strace, then try the mount, let it hang a few > > > > > seconds just to make sure you got anything interesting, then kill strace > > > > > and send the output. > > > > > > > > OK, back at work and here is what I get... > > > > > > > > read(3, "nfsd 10.1.7.30\n", 2048) = 15 > > > > close(15) = 0 > > > > open("/var/lib/nfs/etab", O_RDONLY) = 15 > > > > close(15) = 0 > > > > close(15) = 0 > > > > write(3, "nfsd 10.1.7.30 1352710828 * \n", 29) = 29 > > > > read(4, "4294967295\n", 2048) = 11 > > > > close(16) = 0 > > > > close(15) = 0 > > > > read(15, > > > > "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0", > > > > 36) = 36 > > > > close(15) = 0 > > > > write(4, "4294967295 1352710828 0 \n", 25) = -1 EINVAL (Invalid argument) > > > > > > I suspect that error's coming from > > > net/sunrpc/svcauth_unix.c:unix_gid_parse(). > > > > > > > 4294967295 is UINT_MAX and this place is where it behaves differently on a good > > > > kernel where the write call will succeed: > > > > > > > > write(4, "4294967295 1352710828 0 \n", 25) = 25 > > > > > > > > Sven > > > > > > > > P.S.: Your patched svcauth_gss.c will give me an "access denied by server" > > > > while mounting instead of the infinite delay: > > > > ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ > > > > mount.nfs4: access denied by server while mounting testsrv:/storage > > > > > > So, looks like the same get_int problem exists in several other places. > > > Could you try the following instead of the previous patch? I think I > > > got them all this time.... > > > > Oh, cripes, but this isn't good enough--svcgssd actually passes down -1 > > id's. Ugh--I'll take a closer look tomorrow. > > Yeah, for backwards compatibility reasons we probably don't want to > reject either -1 or 4294967295. > > So I'm inclined to revert unless Eldad has a better idea. > > --b. Oops, sending the right thing this time.--b. commit 8688bcb10bd006111b1b46c23a27081ea359e140 Author: J. Bruce Fields <bfields@redhat.com> Date: Wed Nov 14 10:48:05 2012 -0500 svcrpc: Revert "sunrpc/cache.h: replace simple_strtoul" Commit bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace simple_strtoul" introduced new range-checking which could cause get_int to fail on unsigned integers to large to be represented as an int. We could parse them as unsigned instead--but it turns out svcgssd is actually passing down "-1" in some cases. Which is perhaps stupid, but there's nothing we can do about it now. So just revert back to the previous "sloppy" behavior that accepts either representation. Signed-off-by: J. Bruce Fields <bfields@redhat.com> diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index f792794..5dc9ee4 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h @@ -217,6 +217,8 @@ extern int qword_get(char **bpp, char *dest, int bufsize); static inline int get_int(char **bpp, int *anint) { char buf[50]; + char *ep; + int rv; int len = qword_get(bpp, buf, sizeof(buf)); if (len < 0) @@ -224,9 +226,11 @@ static inline int get_int(char **bpp, int *anint) if (len == 0) return -ENOENT; - if (kstrtoint(buf, 0, anint)) + rv = simple_strtol(buf, &ep, 0); + if (*ep) return -EINVAL; + *anint = rv; return 0; } ^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-14 16:08 ` J. Bruce Fields @ 2012-11-15 16:58 ` Sven Geggus 2012-11-16 19:19 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-11-15 16:58 UTC (permalink / raw) To: J. Bruce Fields; +Cc: linux-nfs, Eldad Zack J. Bruce Fields schrieb am Mittwoch, den 14. November um 17:08 Uhr: > commit 8688bcb10bd006111b1b46c23a27081ea359e140 > Author: J. Bruce Fields <bfields@redhat.com> > Date: Wed Nov 14 10:48:05 2012 -0500 > > svcrpc: Revert "sunrpc/cache.h: replace simple_strtoul" > > Commit bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace > simple_strtoul" introduced new range-checking which could cause get_int > to fail on unsigned integers to large to be represented as an int. > > We could parse them as unsigned instead--but it turns out svcgssd is > actually passing down "-1" in some cases. Which is perhaps stupid, but > there's nothing we can do about it now. > > So just revert back to the previous "sloppy" behavior that accepts > either representation. > > Signed-off-by: J. Bruce Fields <bfields@redhat.com> > > diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h > index f792794..5dc9ee4 100644 > --- a/include/linux/sunrpc/cache.h > +++ b/include/linux/sunrpc/cache.h > @@ -217,6 +217,8 @@ extern int qword_get(char **bpp, char *dest, int bufsize); > static inline int get_int(char **bpp, int *anint) > { > char buf[50]; > + char *ep; > + int rv; > int len = qword_get(bpp, buf, sizeof(buf)); > > if (len < 0) > @@ -224,9 +226,11 @@ static inline int get_int(char **bpp, int *anint) > if (len == 0) > return -ENOENT; > > - if (kstrtoint(buf, 0, anint)) > + rv = simple_strtol(buf, &ep, 0); > + if (*ep) > return -EINVAL; > > + *anint = rv; > return 0; > } OK, so this can be marked as resolved (for now) on my todo list, right? Will this go into 3.6.7 and of course 3.7? Sven -- "Those who do not understand Unix are condemned to reinvent it, poorly" (Henry Spencer) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-15 16:58 ` Sven Geggus @ 2012-11-16 19:19 ` J. Bruce Fields 2012-12-12 11:15 ` Sven Geggus 0 siblings, 1 reply; 29+ messages in thread From: J. Bruce Fields @ 2012-11-16 19:19 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs, Eldad Zack On Thu, Nov 15, 2012 at 05:58:24PM +0100, Sven Geggus wrote: > OK, so this can be marked as resolved (for now) on my todo list, right? Will > this go into 3.6.7 and of course 3.7? Yep, I'll pass this along by next week. --b. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-16 19:19 ` J. Bruce Fields @ 2012-12-12 11:15 ` Sven Geggus 2012-12-12 18:57 ` J. Bruce Fields 0 siblings, 1 reply; 29+ messages in thread From: Sven Geggus @ 2012-12-12 11:15 UTC (permalink / raw) To: linux-nfs J. Bruce Fields <bfields@fieldses.org> wrote: >> OK, so this can be marked as resolved (for now) on my todo list, right? Will >> this go into 3.6.7 and of course 3.7? > > Yep, I'll pass this along by next week. As 3.7 has been relased now: It looks like the unreverted Version is still present in Linux 3.7.0 as well as 3.6.10 While it is easy enough to use "git revert bbf43dc888833ac0539e437dbaeb28bfd4fbab9f" I would rather be able to use vanilla kernels again. Regards Sven -- Das Internet wird vor allem von Leuten genutzt, die sich Pornografie ansehen, während sie Bier trinken, es ist daher für Wahlen nicht geeignet (Jaroslaw Kaczynski) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-12-12 11:15 ` Sven Geggus @ 2012-12-12 18:57 ` J. Bruce Fields 0 siblings, 0 replies; 29+ messages in thread From: J. Bruce Fields @ 2012-12-12 18:57 UTC (permalink / raw) To: Sven Geggus; +Cc: linux-nfs Please don't drop me off the cc: line. On Wed, Dec 12, 2012 at 11:15:27AM +0000, Sven Geggus wrote: > J. Bruce Fields <bfields@fieldses.org> wrote: > > >> OK, so this can be marked as resolved (for now) on my todo list, right? Will > >> this go into 3.6.7 and of course 3.7? > > > > Yep, I'll pass this along by next week. > > As 3.7 has been relased now: > > It looks like the unreverted Version is still present in Linux 3.7.0 as well > as 3.6.10 > > While it is easy enough to use > "git revert bbf43dc888833ac0539e437dbaeb28bfd4fbab9f" I would rather be able > to use vanilla kernels again. Right, apologies, I ended up deciding to hold that for the merge window. It's marked for stable so should make it into 3.7.x as well. --b. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-14 16:07 ` J. Bruce Fields 2012-11-14 16:08 ` J. Bruce Fields @ 2012-11-14 22:26 ` Eldad Zack 1 sibling, 0 replies; 29+ messages in thread From: Eldad Zack @ 2012-11-14 22:26 UTC (permalink / raw) To: J. Bruce Fields; +Cc: Sven Geggus, linux-nfs On Wed, 14 Nov 2012, J. Bruce Fields wrote: > On Tue, Nov 13, 2012 at 07:58:15PM -0500, J. Bruce Fields wrote: > > On Tue, Nov 13, 2012 at 05:40:05PM -0500, J. Bruce Fields wrote: > > > On Mon, Nov 12, 2012 at 10:17:17AM +0100, Sven Geggus wrote: > > > > J. Bruce Fields schrieb am Samstag, den 10. November um 00:24 Uhr: > > > > > > > > 4294967295 is UINT_MAX and this place is where it behaves differently on a good > > > > kernel where the write call will succeed: > > > > > > > > write(4, "4294967295 1352710828 0 \n", 25) = 25 > > > > > > > > Sven > > > > > > > > P.S.: Your patched svcauth_gss.c will give me an "access denied by server" > > > > while mounting instead of the infinite delay: > > > > ~/ # mount -t nfs4 -o sec=krb5 testsrv:/storage /mnt/ > > > > mount.nfs4: access denied by server while mounting testsrv:/storage > > > > > > So, looks like the same get_int problem exists in several other places. > > > Could you try the following instead of the previous patch? I think I > > > got them all this time.... > > > > Oh, cripes, but this isn't good enough--svcgssd actually passes down -1 > > id's. Ugh--I'll take a closer look tomorrow. > > Yeah, for backwards compatibility reasons we probably don't want to > reject either -1 or 4294967295. > > So I'm inclined to revert unless Eldad has a better idea. I support that - please revert. I don't know my way around the code enough to suggest a good solution at this point. Cheers, Eldad ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: Kernel update 3.5.7 -> 3.6.3 breaks NFS4 2012-11-09 20:07 ` J. Bruce Fields 2012-11-09 20:09 ` J. Bruce Fields 2012-11-09 22:45 ` Sven Geggus @ 2012-11-09 23:17 ` Eldad Zack 2 siblings, 0 replies; 29+ messages in thread From: Eldad Zack @ 2012-11-09 23:17 UTC (permalink / raw) To: Sven Geggus, J. Bruce Fields; +Cc: linux-nfs On Fri, 9 Nov 2012, J. Bruce Fields wrote: > On Fri, Nov 09, 2012 at 06:45:32PM +0000, Sven Geggus wrote: > > Sven Geggus <lists@fuchsschwanzdomain.de> wrote: > > > > > OK, I now figured out which commit did cause the problem: > > > > > > Thus "git diff 08843b79..cc8362b1" on a linux-stable tree from > > > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git should > > > give us the relevant changes. > > > > After a private conversation with J. Bruce Fields I figured out that > > I have not been quite there yet. So here comes a FTR post what > > exactly caused my problem. > > Thanks for tracking this down--not what I would have guessed! > > Given that the trace showed a problem starting around context creation > time, I'm most suspicious of the callers in rsc_parse, which are mostly > parsing uid's. Uh oh. Sorry about that. This might help pinpoint the problem - have simple_strto* WARN (or WARN_ONCE maybe?) just before masking out the overflow. I'm running with this now and so far I get no warnings. Cheers, Eldad diff --git a/lib/vsprintf.c b/lib/vsprintf.c index c56de78..8a748c6 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -49,6 +49,8 @@ unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int bas cp = _parse_integer_fixup_radix(cp, &base); rv = _parse_integer(cp, base, &result); /* FIXME */ + WARN((rv & KSTRTOX_OVERFLOW) == KSTRTOX_OVERFLOW, + "simple_strtox overflow while parsing '%s' (base %d)\n", cp, base); cp += (rv & ~KSTRTOX_OVERFLOW); if (endp) ^ permalink raw reply related [flat|nested] 29+ messages in thread
end of thread, other threads:[~2012-12-12 18:58 UTC | newest] Thread overview: 29+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-10-26 15:58 Kernel update 3.5.7 -> 3.6.3 breaks NFS4 Sven Geggus 2012-10-26 16:39 ` VDR User 2012-10-31 12:47 ` Sven Geggus 2012-10-26 17:15 ` J. Bruce Fields [not found] ` <20121029094038.GA14836@geggus.net> 2012-10-29 15:02 ` J. Bruce Fields 2012-10-29 16:33 ` Sven Geggus 2012-10-29 22:09 ` J. Bruce Fields 2012-10-31 12:52 ` Sven Geggus 2012-10-31 14:28 ` VDR User 2012-10-31 15:33 ` Sven Geggus 2012-10-31 17:43 ` VDR User 2012-11-05 14:45 ` Sven Geggus 2012-11-05 16:55 ` Sven Geggus 2012-11-09 18:45 ` Sven Geggus 2012-11-09 20:07 ` J. Bruce Fields 2012-11-09 20:09 ` J. Bruce Fields 2012-11-09 22:45 ` Sven Geggus 2012-11-09 23:24 ` J. Bruce Fields 2012-11-12 9:17 ` Sven Geggus 2012-11-13 22:40 ` J. Bruce Fields 2012-11-14 0:58 ` J. Bruce Fields 2012-11-14 16:07 ` J. Bruce Fields 2012-11-14 16:08 ` J. Bruce Fields 2012-11-15 16:58 ` Sven Geggus 2012-11-16 19:19 ` J. Bruce Fields 2012-12-12 11:15 ` Sven Geggus 2012-12-12 18:57 ` J. Bruce Fields 2012-11-14 22:26 ` Eldad Zack 2012-11-09 23:17 ` Eldad Zack
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).