aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc
diff options
context:
space:
mode:
authorKevin Coffman <kwc@citi.umich.edu>2007-11-09 18:42:04 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2007-11-17 13:08:45 -0500
commitffc40f569272b6be60c66441aeae79a686ff54d9 (patch)
tree1158008abba8849353d1da11ce66d762f4838df5 /net/sunrpc
parentb09b9417d074e01a4e4ab5c19358f1b3dc76c1b2 (diff)
downloadkernel_samsung_aries-ffc40f569272b6be60c66441aeae79a686ff54d9.zip
kernel_samsung_aries-ffc40f569272b6be60c66441aeae79a686ff54d9.tar.gz
kernel_samsung_aries-ffc40f569272b6be60c66441aeae79a686ff54d9.tar.bz2
sunrpc: gss_pipe_downcall(), don't assume all errors are transient
Instead of mapping all errors except EACCES to EAGAIN, map all errors except EAGAIN to EACCES. An example is user-land negotiating a Kerberos context with an encryption type that is not supported by the kernel code. (This can happen due to mis-configuration or a bug in the Kerberos code that does not honor our request to limit the encryption types negotiated.) This failure is not transient, and returning EAGAIN causes mount to continuously retry rather than giving up. Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/auth_gss/auth_gss.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index 53995af..c42362c 100644
--- a/net/sunrpc/auth_gss/auth_gss.c
+++ b/net/sunrpc/auth_gss/auth_gss.c
@@ -540,7 +540,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
if (IS_ERR(p)) {
err = PTR_ERR(p);
- gss_msg->msg.errno = (err == -EACCES) ? -EACCES : -EAGAIN;
+ gss_msg->msg.errno = (err == -EAGAIN) ? -EAGAIN : -EACCES;
goto err_release_msg;
}
gss_msg->ctx = gss_get_ctx(ctx);