|
@@ -674,6 +674,8 @@ static struct group_info *unix_gid_find(uid_t uid, struct svc_rqst *rqstp)
|
|
|
switch (ret) {
|
|
|
case -ENOENT:
|
|
|
return ERR_PTR(-ENOENT);
|
|
|
+ case -ETIMEDOUT:
|
|
|
+ return ERR_PTR(-ESHUTDOWN);
|
|
|
case 0:
|
|
|
gi = get_group_info(ug->gi);
|
|
|
cache_put(&ug->h, &unix_gid_cache);
|
|
@@ -720,8 +722,9 @@ svcauth_unix_set_client(struct svc_rqst *rqstp)
|
|
|
switch (cache_check(&ip_map_cache, &ipm->h, &rqstp->rq_chandle)) {
|
|
|
default:
|
|
|
BUG();
|
|
|
- case -EAGAIN:
|
|
|
case -ETIMEDOUT:
|
|
|
+ return SVC_CLOSE;
|
|
|
+ case -EAGAIN:
|
|
|
return SVC_DROP;
|
|
|
case -ENOENT:
|
|
|
return SVC_DENIED;
|
|
@@ -736,6 +739,8 @@ svcauth_unix_set_client(struct svc_rqst *rqstp)
|
|
|
switch (PTR_ERR(gi)) {
|
|
|
case -EAGAIN:
|
|
|
return SVC_DROP;
|
|
|
+ case -ESHUTDOWN:
|
|
|
+ return SVC_CLOSE;
|
|
|
case -ENOENT:
|
|
|
break;
|
|
|
default:
|
|
@@ -776,7 +781,7 @@ svcauth_null_accept(struct svc_rqst *rqstp, __be32 *authp)
|
|
|
cred->cr_gid = (gid_t) -1;
|
|
|
cred->cr_group_info = groups_alloc(0);
|
|
|
if (cred->cr_group_info == NULL)
|
|
|
- return SVC_DROP; /* kmalloc failure - client must retry */
|
|
|
+ return SVC_CLOSE; /* kmalloc failure - client must retry */
|
|
|
|
|
|
/* Put NULL verifier */
|
|
|
svc_putnl(resv, RPC_AUTH_NULL);
|
|
@@ -840,7 +845,7 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp)
|
|
|
goto badcred;
|
|
|
cred->cr_group_info = groups_alloc(slen);
|
|
|
if (cred->cr_group_info == NULL)
|
|
|
- return SVC_DROP;
|
|
|
+ return SVC_CLOSE;
|
|
|
for (i = 0; i < slen; i++)
|
|
|
GROUP_AT(cred->cr_group_info, i) = svc_getnl(argv);
|
|
|
if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) {
|