svcrpc: handle some gssproxy encoding errors
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 8 Oct 2013 20:09:04 +0000 (16:09 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 10 Oct 2013 15:04:47 +0000 (11:04 -0400)
Reported-by: Andi Kleen <andi@firstfloor.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/auth_gss/gss_rpc_xdr.c

index f0f78c5f1c7d9690bc017db01ddf697d3022a81a..1ec19f6f0c2b9fe71ee9a7110873873274b9ab62 100644 (file)
@@ -559,6 +559,8 @@ static int gssx_enc_cred(struct xdr_stream *xdr,
 
        /* cred->elements */
        err = dummy_enc_credel_array(xdr, &cred->elements);
+       if (err)
+               return err;
 
        /* cred->cred_handle_reference */
        err = gssx_enc_buffer(xdr, &cred->cred_handle_reference);
@@ -740,22 +742,20 @@ void gssx_enc_accept_sec_context(struct rpc_rqst *req,
                goto done;
 
        /* arg->context_handle */
-       if (arg->context_handle) {
+       if (arg->context_handle)
                err = gssx_enc_ctx(xdr, arg->context_handle);
-               if (err)
-                       goto done;
-       } else {
+       else
                err = gssx_enc_bool(xdr, 0);
-       }
+       if (err)
+               goto done;
 
        /* arg->cred_handle */
-       if (arg->cred_handle) {
+       if (arg->cred_handle)
                err = gssx_enc_cred(xdr, arg->cred_handle);
-               if (err)
-                       goto done;
-       } else {
+       else
                err = gssx_enc_bool(xdr, 0);
-       }
+       if (err)
+               goto done;
 
        /* arg->input_token */
        err = gssx_enc_in_token(xdr, &arg->input_token);
@@ -763,13 +763,12 @@ void gssx_enc_accept_sec_context(struct rpc_rqst *req,
                goto done;
 
        /* arg->input_cb */
-       if (arg->input_cb) {
+       if (arg->input_cb)
                err = gssx_enc_cb(xdr, arg->input_cb);
-               if (err)
-                       goto done;
-       } else {
+       else
                err = gssx_enc_bool(xdr, 0);
-       }
+       if (err)
+               goto done;
 
        err = gssx_enc_bool(xdr, arg->ret_deleg_cred);
        if (err)