Date: Thu, 20 Nov 1997 02:18:49 -0800 (PST) From: dk@farm.org To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/5102: we can crash netapp by weird mount options Message-ID: <199711201018.CAA20081@dao.genesyslab.com> Resent-Message-ID: <199711201020.CAA26723@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 5102 >Category: kern >Synopsis: freebsd NFS client with obscure mount options crash netapp server >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Nov 20 02:20:01 PST 1997 >Last-Modified: >Originator: Dmitry Kohmanyuk >Organization: FARM Computing Association >Release: FreeBSD 2.2-STABLE i386 >Environment: I use 2.2-stable with NFS in kernel. the same bug should exist in 3.0 (the code fragment didn't change). >Description: quote mail message: <<< this is only relevant to those using NetApp NFS file servers. background: there are 2 versions of NFS in town, v2 and v3. In v3, one of things introduced was ability to read names of files in directory with stat(2)ing them at the same time; the procedure name is readdirplus. It can be used to speed up programs like ls(1). Apparently, NFS code in FreeBSD 2.2 (derived from 4.4BSD code, so perhaps this applies to all of modern BSD systems here) allow client to specify this in mount options without using NFS v3. This meaningless set of options panics NetApp file server. >>> >How-To-Repeat: fstab entry: filer:/dir /nfs/dir nfs noauto,rw,nodev,-2,-l,-i,-b 0 0 of those, the combination of -2 and -l (ell) is important. of course, this is not our problem that the server crashes. the problem is that the client sends illegal requests using NFS v2. using the same mount flags with SunOS 4.1.x results in no files visible in mounted directory. >Fix: tested on 2.2, should apply on -current too (this code fragment didn't change) --- nfs_bio.c.ok Wed Nov 5 20:11:17 1997 +++ nfs_bio.c Wed Nov 5 20:14:06 1997 @@ -1031,6 +1031,8 @@ case VDIR: nfsstats.readdir_bios++; uiop->uio_offset = ((u_quad_t)bp->b_lblkno) * NFS_DIRBLKSIZ; + if (!(nmp->nm_flag & NFSMNT_NFSV3)) + nmp->nm_flag &= ~NFSMNT_RDIRPLUS; /* dk@farm.org */ if (nmp->nm_flag & NFSMNT_RDIRPLUS) { error = nfs_readdirplusrpc(vp, uiop, cr); if (error == NFSERR_NOTSUPP) >Audit-Trail: >Unformatted: Dmitry Kohmanyuk
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711201018.CAA20081>