@@ -118,9 +118,30 @@ libspdm_return_t libspdm_process_encap_response_certificate(
118
118
request_offset + spdm_response -> portion_length + spdm_response -> remainder_length ) {
119
119
return LIBSPDM_STATUS_INVALID_MSG_FIELD ;
120
120
}
121
- if (spdm_response -> header .param1 != spdm_context -> encap_context .req_slot_id ) {
121
+ slot_id = spdm_context -> encap_context .req_slot_id ;
122
+ if ((spdm_response -> header .param1 & SPDM_CERTIFICATE_RESPONSE_SLOT_ID_MASK ) != slot_id ) {
122
123
return LIBSPDM_STATUS_INVALID_MSG_FIELD ;
123
124
}
125
+ if (spdm_response -> header .spdm_version >= SPDM_MESSAGE_VERSION_13 ) {
126
+ LIBSPDM_DEBUG ((LIBSPDM_DEBUG_INFO , "cert_info - 0x%02x\n" ,
127
+ spdm_response -> header .param2 ));
128
+ if ((spdm_response -> header .param2 &
129
+ SPDM_CERTIFICATE_RESPONSE_ATTRIBUTES_CERTIFICATE_INFO_MASK ) ==
130
+ SPDM_CERTIFICATE_INFO_CERT_MODEL_NONE ) {
131
+ return LIBSPDM_STATUS_INVALID_MSG_FIELD ;
132
+ }
133
+ if (spdm_context -> connection_info .peer_cert_info [slot_id ] ==
134
+ SPDM_CERTIFICATE_INFO_CERT_MODEL_NONE ) {
135
+ spdm_context -> connection_info .peer_cert_info [slot_id ] =
136
+ (spdm_response -> header .param2 &
137
+ SPDM_CERTIFICATE_RESPONSE_ATTRIBUTES_CERTIFICATE_INFO_MASK );
138
+ } else if (spdm_context -> connection_info .peer_cert_info [slot_id ] !=
139
+ (spdm_response -> header .param2 &
140
+ SPDM_CERTIFICATE_RESPONSE_ATTRIBUTES_CERTIFICATE_INFO_MASK )) {
141
+ return LIBSPDM_STATUS_INVALID_MSG_FIELD ;
142
+ }
143
+ }
144
+
124
145
if (spdm_response_size < sizeof (spdm_certificate_response_t ) + spdm_response -> portion_length ) {
125
146
return LIBSPDM_STATUS_INVALID_MSG_SIZE ;
126
147
}
0 commit comments