diff options
author | Neil Brown <neilb@suse.de> | 2008-10-15 23:15:16 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-10-17 13:06:45 -0400 |
commit | 504e518953a330c8d44a95bdd65a5c9f50f1012e (patch) | |
tree | 383df8cd12bebecd9bcf7714b6d8b07324a6353f | |
parent | 18de9735300756e3ca9c361ef58409d8561dfe0d (diff) |
Make nfs_file_cred more robust.
As not all files have an associated open_context (e.g. device special
files), it is safest to test for the existence of the open context
before de-referencing it.
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | fs/nfs/nfs4proc.c | 6 | ||||
-rw-r--r-- | include/linux/nfs_fs.h | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index c910413eaeca..83e700a2b0c0 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -1659,8 +1659,10 @@ nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, | |||
1659 | struct nfs_open_context *ctx; | 1659 | struct nfs_open_context *ctx; |
1660 | 1660 | ||
1661 | ctx = nfs_file_open_context(sattr->ia_file); | 1661 | ctx = nfs_file_open_context(sattr->ia_file); |
1662 | cred = ctx->cred; | 1662 | if (ctx) { |
1663 | state = ctx->state; | 1663 | cred = ctx->cred; |
1664 | state = ctx->state; | ||
1665 | } | ||
1664 | } | 1666 | } |
1665 | 1667 | ||
1666 | status = nfs4_do_setattr(inode, cred, fattr, sattr, state); | 1668 | status = nfs4_do_setattr(inode, cred, fattr, sattr, state); |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index ac8d0233b05c..4eaa8347a0d9 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -367,8 +367,12 @@ static inline struct nfs_open_context *nfs_file_open_context(struct file *filp) | |||
367 | 367 | ||
368 | static inline struct rpc_cred *nfs_file_cred(struct file *file) | 368 | static inline struct rpc_cred *nfs_file_cred(struct file *file) |
369 | { | 369 | { |
370 | if (file != NULL) | 370 | if (file != NULL) { |
371 | return nfs_file_open_context(file)->cred; | 371 | struct nfs_open_context *ctx = |
372 | nfs_file_open_context(file); | ||
373 | if (ctx) | ||
374 | return ctx->cred; | ||
375 | } | ||
372 | return NULL; | 376 | return NULL; |
373 | } | 377 | } |
374 | 378 | ||