linux-stable-rt/fs/nfs
Trond Myklebust d953126a28 NFSv4: Fix a problem whereby a buggy server can oops the kernel
We just had a case in which a buggy server occasionally returns the wrong
attributes during an OPEN call. While the client does catch this sort of
condition in nfs4_open_done(), and causes the nfs4_atomic_open() to return
-EISDIR, the logic in nfs_atomic_lookup() is broken, since it causes a
fallback to an ordinary lookup instead of just returning the error.

When the buggy server then returns a regular file for the fallback lookup,
the VFS allows the open, and bad things start to happen, since the open
file doesn't have any associated NFSv4 state.

The fix is firstly to return the EISDIR/ENOTDIR errors immediately, and
secondly to ensure that we are always careful when dereferencing the
nfs_open_context state pointer.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2009-07-21 19:22:38 -04:00
..
Kconfig Merge branch 'for-2.6.31' of git://fieldses.org/git/linux-nfsd 2009-06-22 12:55:50 -07:00
Makefile
callback.c Merge branch 'devel-for-2.6.31' into for-2.6.31 2009-06-18 18:13:44 -07:00
callback.h
callback_proc.c
callback_xdr.c
client.c NFSv4: Fix an NFSv4 mount regression 2009-07-21 16:48:07 -04:00
delegation.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
delegation.h
dir.c NFSv4: Fix a problem whereby a buggy server can oops the kernel 2009-07-21 19:22:38 -04:00
direct.c
file.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
fscache-index.c
fscache.c
fscache.h
getroot.c headers: mnt_namespace.h redux 2009-07-08 09:31:56 -07:00
idmap.c
inode.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
internal.h Merge branch 'devel-for-2.6.31' into for-2.6.31 2009-06-18 18:13:44 -07:00
iostat.h
mount_clnt.c NFS: Remove unused XDR decoder functions 2009-06-17 18:02:13 -07:00
namespace.c NFS: Fix nfs_path() to always return a '/' at the beginning of the path 2009-06-22 21:28:25 -07:00
nfs2xdr.c
nfs3acl.c nfs: remove unnecessary NFS_INO_INVALID_ACL checks 2009-06-17 18:02:14 -07:00
nfs3proc.c
nfs3xdr.c
nfs4_fs.h NFSv4: Fix an NFSv4 mount regression 2009-07-21 16:48:07 -04:00
nfs4namespace.c
nfs4proc.c NFSv4: Fix a problem whereby a buggy server can oops the kernel 2009-07-21 19:22:38 -04:00
nfs4renewd.c
nfs4state.c NFSv4: Fix an Oops in nfs4_free_lock_state 2009-07-21 16:47:46 -04:00
nfs4xdr.c
nfsroot.c NFS: Update MNT and MNT3 reply decoding functions 2009-06-17 18:02:13 -07:00
pagelist.c
proc.c
read.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
super.c NFS: Correct the NFS mount path when following a referral 2009-06-22 21:28:25 -07:00
symlink.c
sysctl.c
unlink.c
write.c Revert "fuse: Fix build error" as unnecessary 2009-07-11 11:22:34 -07:00