Fail on unrealistically large PACS

This commit is contained in:
Eric Betts committed 2023-06-29 17:20:21 -07:00
1 parent e0b22911bd
commit 677dcea5d0
1 file changed
+8 -3
+8 -3
View File
@@ -338,7 +338,7 @@ void sendCardDetected(SeaderUartBridge* seader_uart, CardDetails_t* cardDetails)
ASN_STRUCT_FREE(asn_DEF_Payload, payload);
}
bool unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_t size) {
bool unpack_pacs(SeaderWorker* seader_worker, SeaderCredential* seader_credential, uint8_t* buf, size_t size) {
PAC_t* pac = 0;
pac = calloc(1, sizeof *pac);
assert(pac);
@@ -354,14 +354,19 @@ bool unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_t size)
}
if(pac->size <= sizeof(seader_credential->credential)) {
// TODO: make credential into a 12 byte array
seader_credential->bit_length = pac->size * 8 - pac->bits_unused;
memcpy(&seader_credential->credential, pac->buf, pac->size);
seader_credential->credential = __builtin_bswap64(seader_credential->credential);
seader_credential->credential = seader_credential->credential >>
(64 - seader_credential->bit_length);
rtn = true;
} else {
// PACS too big (probably bad data)
if(seader_worker->callback) {
seader_worker->callback(SeaderWorkerEventFail, seader_worker->context);
}
}
// TODO: make credential into a 12 byte array
}
ASN_STRUCT_FREE(asn_DEF_PAC, pac);
@@ -383,7 +388,7 @@ bool parseSamResponse(SeaderWorker* seader_worker, SamResponse_t* samResponse) {
seader_worker->callback(SeaderWorkerEventFail, seader_worker->context);
}
}
} else if(unpack_pacs(credential, samResponse->buf, samResponse->size)) {
} else if(unpack_pacs(seader_worker, credential, samResponse->buf, samResponse->size)) {
if(seader_worker->callback) {
seader_worker->callback(SeaderWorkerEventSuccess, seader_worker->context);
}