@@ -707,35 +707,48 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
707
707
invalidate_ticket (ac , CEPH_ENTITY_TYPE_AUTH );
708
708
}
709
709
710
- static int calcu_signature (struct ceph_x_authorizer * au ,
711
- struct ceph_msg * msg , __le64 * sig )
710
+ static int calc_signature (struct ceph_x_authorizer * au , struct ceph_msg * msg ,
711
+ __le64 * psig )
712
712
{
713
- int ret ;
714
713
char tmp_enc [40 ];
715
- __le32 tmp [5 ] = {
716
- cpu_to_le32 (16 ), msg -> hdr .crc , msg -> footer .front_crc ,
717
- msg -> footer .middle_crc , msg -> footer .data_crc ,
718
- };
719
- ret = ceph_x_encrypt (& au -> session_key , & tmp , sizeof (tmp ),
714
+ struct {
715
+ __le32 len ;
716
+ __le32 header_crc ;
717
+ __le32 front_crc ;
718
+ __le32 middle_crc ;
719
+ __le32 data_crc ;
720
+ } __packed sigblock ;
721
+ int ret ;
722
+
723
+ sigblock .len = cpu_to_le32 (4 * sizeof (u32 ));
724
+ sigblock .header_crc = msg -> hdr .crc ;
725
+ sigblock .front_crc = msg -> footer .front_crc ;
726
+ sigblock .middle_crc = msg -> footer .middle_crc ;
727
+ sigblock .data_crc = msg -> footer .data_crc ;
728
+ ret = ceph_x_encrypt (& au -> session_key , & sigblock , sizeof (sigblock ),
720
729
tmp_enc , sizeof (tmp_enc ));
721
730
if (ret < 0 )
722
731
return ret ;
723
- * sig = * (__le64 * )(tmp_enc + 4 );
732
+
733
+ * psig = * (__le64 * )(tmp_enc + sizeof (u32 ));
724
734
return 0 ;
725
735
}
726
736
727
737
static int ceph_x_sign_message (struct ceph_auth_handshake * auth ,
728
738
struct ceph_msg * msg )
729
739
{
740
+ __le64 sig ;
730
741
int ret ;
731
742
732
743
if (ceph_test_opt (from_msgr (msg -> con -> msgr ), NOMSGSIGN ))
733
744
return 0 ;
734
745
735
- ret = calcu_signature ((struct ceph_x_authorizer * )auth -> authorizer ,
736
- msg , & msg -> footer . sig );
737
- if (ret < 0 )
746
+ ret = calc_signature ((struct ceph_x_authorizer * )auth -> authorizer ,
747
+ msg , & sig );
748
+ if (ret )
738
749
return ret ;
750
+
751
+ msg -> footer .sig = sig ;
739
752
msg -> footer .flags |= CEPH_MSG_FOOTER_SIGNED ;
740
753
return 0 ;
741
754
}
@@ -749,9 +762,9 @@ static int ceph_x_check_message_signature(struct ceph_auth_handshake *auth,
749
762
if (ceph_test_opt (from_msgr (msg -> con -> msgr ), NOMSGSIGN ))
750
763
return 0 ;
751
764
752
- ret = calcu_signature ((struct ceph_x_authorizer * )auth -> authorizer ,
753
- msg , & sig_check );
754
- if (ret < 0 )
765
+ ret = calc_signature ((struct ceph_x_authorizer * )auth -> authorizer ,
766
+ msg , & sig_check );
767
+ if (ret )
755
768
return ret ;
756
769
if (sig_check == msg -> footer .sig )
757
770
return 0 ;
0 commit comments