Prevent STR Blinding #859

Merged
meggert merged 35 commits from prevent-str-blinding into main 2024-02-27 13:48:20 +01:00
2 changed files with 12 additions and 4 deletions
Showing only changes of commit d467953c18 - Show all commits

View File

@ -18,6 +18,8 @@ will consitute of a breaking change warranting a new major release:
## Fixed ## Fixed
- PLOC SUPV sets: Added missing `PoolReadGuard` instantiations when reading boot status report
and latchup status report.
- PLOC SUPV latchup report could not be handled previously. - PLOC SUPV latchup report could not be handled previously.
- Bugfix in PLOC SUPV latchup report parsing. - Bugfix in PLOC SUPV latchup report parsing.
- Bugfix in PLOC MPSoC HK set: Set and variables were not set valid. - Bugfix in PLOC MPSoC HK set: Set and variables were not set valid.

View File

@ -900,7 +900,7 @@ ReturnValue_t FreshSupvHandler::parseTmPackets() {
} }
break; break;
} }
case(Apid::LATCHUP_MON): { case (Apid::LATCHUP_MON): {
if (tmReader.getServiceId() == if (tmReader.getServiceId() ==
static_cast<uint8_t>(supv::tm::LatchupMonId::LATCHUP_STATUS_REPORT)) { static_cast<uint8_t>(supv::tm::LatchupMonId::LATCHUP_STATUS_REPORT)) {
handleLatchupStatusReport(receivedData); handleLatchupStatusReport(receivedData);
@ -1399,15 +1399,17 @@ ReturnValue_t FreshSupvHandler::verifyPacket(const uint8_t* start, size_t foundL
ReturnValue_t FreshSupvHandler::handleBootStatusReport(const uint8_t* data) { ReturnValue_t FreshSupvHandler::handleBootStatusReport(const uint8_t* data) {
ReturnValue_t result = returnvalue::OK; ReturnValue_t result = returnvalue::OK;
result = verifyPacket(data, tmReader.getFullPacketLen()); result = verifyPacket(data, tmReader.getFullPacketLen());
if (result == result::CRC_FAILURE) { if (result == result::CRC_FAILURE) {
sif::error << "PlocSupervisorHandler::handleBootStatusReport: Boot status report has invalid" sif::error << "PlocSupervisorHandler::handleBootStatusReport: Boot status report has invalid"
" crc" " crc"
<< std::endl; << std::endl;
return result; return result;
} }
PoolReadGuard pg(&bootStatusReport);
if (pg.getReadResult() != returnvalue::OK) {
return pg.getReadResult();
}
const uint8_t* payloadStart = tmReader.getPayloadStart(); const uint8_t* payloadStart = tmReader.getPayloadStart();
uint16_t offset = 0; uint16_t offset = 0;
@ -1471,13 +1473,17 @@ ReturnValue_t FreshSupvHandler::handleLatchupStatusReport(const uint8_t* data) {
ReturnValue_t result = returnvalue::OK; ReturnValue_t result = returnvalue::OK;
result = verifyPacket(data, tmReader.getFullPacketLen()); result = verifyPacket(data, tmReader.getFullPacketLen());
if (result == result::CRC_FAILURE) { if (result == result::CRC_FAILURE) {
sif::error << "PlocSupervisorHandler::handleLatchupStatusReport: Latchup status report has " sif::error << "PlocSupervisorHandler::handleLatchupStatusReport: Latchup status report has "
<< "invalid crc" << std::endl; << "invalid crc" << std::endl;
return result; return result;
} }
PoolReadGuard pg(&latchupStatusReport);
if (pg.getReadResult() != returnvalue::OK) {
return pg.getReadResult();
}
const uint8_t* payloadData = tmReader.getPayloadStart(); const uint8_t* payloadData = tmReader.getPayloadStart();
uint16_t offset = 0; uint16_t offset = 0;
latchupStatusReport.id = *(payloadData + offset); latchupStatusReport.id = *(payloadData + offset);