Check checksum signature before reading the data

This commit is contained in:
EnderIce2 2024-02-10 04:32:59 +02:00
parent 96530ad165
commit 7e60b1af9b
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -770,6 +770,23 @@ public:
return;
}
if (IdentifyData->Signature != 0xA5)
Log("Port %d has no validity signature.", PortNumber);
else
{
uint8_t *ptr = (uint8_t *)IdentifyData;
uint8_t sum = 0;
for (size_t i = 0; i < sizeof(ATA_IDENTIFY); i++)
sum += ptr[i];
if (sum != 0)
{
Log("Port %d has invalid checksum.", PortNumber);
return;
}
else
Log("Port %d has valid checksum.", PortNumber);
}
auto swap = [](uint16_t *data, size_t size)
{
for (size_t i = 0; i < size; i++)
@ -790,21 +807,6 @@ public:
Log("Port %d is %s (%d rotation rate)", PortNumber,
IdentifyData->NominalMediaRotationRate == 1 ? "SSD" : "HDD",
IdentifyData->NominalMediaRotationRate);
if (IdentifyData->Signature != 0xA5)
{
Log("Port %d has no validity signature.", PortNumber);
return;
}
uint8_t *ptr = (uint8_t *)IdentifyData;
uint8_t sum = 0;
for (size_t i = 0; i < 512; i++)
sum += ptr[i];
if (sum != 0)
Log("Port %d has invalid checksum.", PortNumber);
else
Log("Port %d has valid checksum.", PortNumber);
}
};