]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
libceph: tweak calcu_signature() a little
authorIlya Dryomov <idryomov@gmail.com>
Fri, 2 Dec 2016 15:35:07 +0000 (16:35 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 12 Dec 2016 22:09:19 +0000 (23:09 +0100)
- replace an ad-hoc array with a struct
- rename to calc_signature() for consistency

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Sage Weil <sage@redhat.com>
net/ceph/auth_x.c

index ef1423294517122b0d1a48d26946dfe5cfe5f0fb..78c1675b0df7c1a41b85959cc2da210825945a69 100644 (file)
@@ -707,35 +707,48 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
        invalidate_ticket(ac, CEPH_ENTITY_TYPE_AUTH);
 }
 
-static int calcu_signature(struct ceph_x_authorizer *au,
-                          struct ceph_msg *msg, __le64 *sig)
+static int calc_signature(struct ceph_x_authorizer *au, struct ceph_msg *msg,
+                         __le64 *psig)
 {
-       int ret;
        char tmp_enc[40];
-       __le32 tmp[5] = {
-               cpu_to_le32(16), msg->hdr.crc, msg->footer.front_crc,
-               msg->footer.middle_crc, msg->footer.data_crc,
-       };
-       ret = ceph_x_encrypt(&au->session_key, &tmp, sizeof(tmp),
+       struct {
+               __le32 len;
+               __le32 header_crc;
+               __le32 front_crc;
+               __le32 middle_crc;
+               __le32 data_crc;
+       } __packed sigblock;
+       int ret;
+
+       sigblock.len = cpu_to_le32(4*sizeof(u32));
+       sigblock.header_crc = msg->hdr.crc;
+       sigblock.front_crc = msg->footer.front_crc;
+       sigblock.middle_crc = msg->footer.middle_crc;
+       sigblock.data_crc =  msg->footer.data_crc;
+       ret = ceph_x_encrypt(&au->session_key, &sigblock, sizeof(sigblock),
                             tmp_enc, sizeof(tmp_enc));
        if (ret < 0)
                return ret;
-       *sig = *(__le64*)(tmp_enc + 4);
+
+       *psig = *(__le64 *)(tmp_enc + sizeof(u32));
        return 0;
 }
 
 static int ceph_x_sign_message(struct ceph_auth_handshake *auth,
                               struct ceph_msg *msg)
 {
+       __le64 sig;
        int ret;
 
        if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN))
                return 0;
 
-       ret = calcu_signature((struct ceph_x_authorizer *)auth->authorizer,
-                             msg, &msg->footer.sig);
-       if (ret < 0)
+       ret = calc_signature((struct ceph_x_authorizer *)auth->authorizer,
+                            msg, &sig);
+       if (ret)
                return ret;
+
+       msg->footer.sig = sig;
        msg->footer.flags |= CEPH_MSG_FOOTER_SIGNED;
        return 0;
 }
@@ -749,9 +762,9 @@ static int ceph_x_check_message_signature(struct ceph_auth_handshake *auth,
        if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN))
                return 0;
 
-       ret = calcu_signature((struct ceph_x_authorizer *)auth->authorizer,
-                             msg, &sig_check);
-       if (ret < 0)
+       ret = calc_signature((struct ceph_x_authorizer *)auth->authorizer,
+                            msg, &sig_check);
+       if (ret)
                return ret;
        if (sig_check == msg->footer.sig)
                return 0;