diff options
author | Peter Rosin <peda@lysator.liu.se> | 2015-10-30 10:44:24 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2015-10-30 10:53:12 -0400 |
commit | fad57784796d6fcbaf77f776508749981a6a5d2e (patch) | |
tree | 7cc0b8ea875cd0195516724fa8322494ba34c02f /src/svc_vc.c | |
parent | b7c2ade67a49ea8a25bdf4333cf62cbd284d5dcd (diff) | |
download | ti-rpc-fad57784796d6fcbaf77f776508749981a6a5d2e.tar.gz |
Fix SVCAUTH lifetime issues and move towards Solaris
There are lifetime problems with the current handling of SVCAUTH
and the core library has no business ever destroying an SVCAUTH.
These lifetime problems leads to the gss authenticator leaking
a SVCAUTH when interleaved calls on the transport arrive with
non-gss credential flavors.
So, plagiarize the Solaris solution and keep an inlined SVCAUTH
struct to make it obvious that the core library is not managing
the life of SVCAUTH. Then point the old xp_auth pointer to the
inlined SVCAUTH by default. This makes it possible to match the
Solaris macro SVC_XP_AUTH, while still remaining compatible with
any old external xp_auth pointer users.
Adjust the gss authenticator to keep track of its own gss data
per SVCXPRT. This is still not a good gss implementation, but it
is at least better than before.
Tested-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Peter Rosin <peda@lysator.liu.se>
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'src/svc_vc.c')
-rw-r--r-- | src/svc_vc.c | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/src/svc_vc.c b/src/svc_vc.c index f95c644..bab3e05 100644 --- a/src/svc_vc.c +++ b/src/svc_vc.c @@ -450,10 +450,6 @@ __svc_vc_dodestroy(xprt) } if (ext) mem_free(ext, sizeof (*ext)); - if (xprt->xp_auth != NULL) { - SVCAUTH_DESTROY(xprt->xp_auth); - xprt->xp_auth = NULL; - } if (xprt->xp_rtaddr.buf) mem_free(xprt->xp_rtaddr.buf, xprt->xp_rtaddr.maxlen); if (xprt->xp_ltaddr.buf) |