sunrpc: Fix unaligned access on sparc64
authorJames Ettle <james@ettle.org.uk>
Sun, 28 Jan 2018 20:34:16 +0000 (20:34 +0000)
committerJ. Bruce Fields <bfields@redhat.com>
Mon, 19 Mar 2018 20:38:12 +0000 (16:38 -0400)
Fix unaligned access in gss_{get,verify}_mic_v2() on sparc64

Signed-off-by: James Ettle <james@ettle.org.uk>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/auth_gss/gss_krb5_seal.c
net/sunrpc/auth_gss/gss_krb5_unseal.c

index 1d74d653e6c058cfbf3669cf9258e14b6002d6b0..94a2b3f082a85794ee0c8d64ae265f6d60427fab 100644 (file)
@@ -177,6 +177,7 @@ gss_get_mic_v2(struct krb5_ctx *ctx, struct xdr_buf *text,
        u64 seq_send;
        u8 *cksumkey;
        unsigned int cksum_usage;
+       __be64 seq_send_be64;
 
        dprintk("RPC:       %s\n", __func__);
 
@@ -187,7 +188,9 @@ gss_get_mic_v2(struct krb5_ctx *ctx, struct xdr_buf *text,
        spin_lock(&krb5_seq_lock);
        seq_send = ctx->seq_send64++;
        spin_unlock(&krb5_seq_lock);
-       *((__be64 *)(krb5_hdr + 8)) = cpu_to_be64(seq_send);
+
+       seq_send_be64 = cpu_to_be64(seq_send);
+       memcpy(krb5_hdr + 8, (char *) &seq_send_be64, 8);
 
        if (ctx->initiate) {
                cksumkey = ctx->initiator_sign;
index dcf9515d9aef2885ed7aadca352d97f0965e3d1e..b601a73cc9db6ee28086001b2140af9ef3b6cbae 100644 (file)
@@ -155,10 +155,12 @@ gss_verify_mic_v2(struct krb5_ctx *ctx,
        u8 flags;
        int i;
        unsigned int cksum_usage;
+       __be16 be16_ptr;
 
        dprintk("RPC:       %s\n", __func__);
 
-       if (be16_to_cpu(*((__be16 *)ptr)) != KG2_TOK_MIC)
+       memcpy(&be16_ptr, (char *) ptr, 2);
+       if (be16_to_cpu(be16_ptr) != KG2_TOK_MIC)
                return GSS_S_DEFECTIVE_TOKEN;
 
        flags = ptr[2];