Skip to content

Commit

Permalink
[PATCH] svcrpc: gss: server context init failure handling
Browse files Browse the repository at this point in the history
We require the server's gssd to create a completed context before asking the
kernel to send a final context init reply.  However, gssd could be buggy, or
under some bizarre circumstances we might purge the context from our cache
before we get the chance to use it here.

Handle this case by returning GSS_S_NO_CONTEXT to the client.

Also move the relevant code here to a separate function rather than nesting
excessively.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Kevin Coffman authored and Linus Torvalds committed Jan 19, 2006
1 parent 822f100 commit 91a4762
Showing 1 changed file with 17 additions and 12 deletions.
29 changes: 17 additions & 12 deletions net/sunrpc/auth_gss/svcauth_gss.c
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,21 @@ svcauth_gss_set_client(struct svc_rqst *rqstp)
return SVC_OK;
}

static inline int
gss_write_init_verf(struct svc_rqst *rqstp, struct rsi *rsip)
{
struct rsc *rsci;

if (rsip->major_status != GSS_S_COMPLETE)
return gss_write_null_verf(rqstp);
rsci = gss_svc_searchbyctx(&rsip->out_handle);
if (rsci == NULL) {
rsip->major_status = GSS_S_NO_CONTEXT;
return gss_write_null_verf(rqstp);
}
return gss_write_verf(rqstp, rsci->mechctx, GSS_SEQ_WIN);
}

/*
* Accept an rpcsec packet.
* If context establishment, punt to user space
Expand Down Expand Up @@ -890,18 +905,8 @@ svcauth_gss_accept(struct svc_rqst *rqstp, u32 *authp)
case -ENOENT:
goto drop;
case 0:
if (rsip->major_status == GSS_S_COMPLETE) {
rsci = gss_svc_searchbyctx(&rsip->out_handle);
if (!rsci) {
goto drop;
}
if (gss_write_verf(rqstp, rsci->mechctx,
GSS_SEQ_WIN))
goto drop;
} else {
if (gss_write_null_verf(rqstp))
goto drop;
}
if (gss_write_init_verf(rqstp, rsip))
goto drop;
if (resv->iov_len + 4 > PAGE_SIZE)
goto drop;
svc_putu32(resv, rpc_success);
Expand Down

0 comments on commit 91a4762

Please sign in to comment.