BadOverflowGuard (CodeQL-fråga för Windows-drivrutin)

Översikt

Det går inte att söka efter spill av ett tillägg genom att jämföra med något av argumenten i tillägget om storleken på alla argumenttyper är mindre än 4 byte. Detta beror på att resultatet av tillägget höjs till en int på 4 byte.

Rekommendation

Kontrollera överflödet genom att jämföra additionen med ett värde som är minst 4 byte.

Exempel

I det här exemplet resulterar jämförelsen i ett heltalsöverflöd.

unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
    if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
    {
        // ... do something
    }
    return v + b;
}

Åtgärda felet genom att genomföra en kontroll av överflödet genom att jämföra tillägget mot ett värde som är åtminstone 4 byte:

unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
    if (v + b > 0x00FFFF)
    {
        // ... do something
    }
    return v + b;
}

Ytterligare information

Den här frågan finns på Microsoft GitHub CodeQL-lagringsplatsen. Mer information om hur Windows Driver-utvecklare kan ladda ner och köra CodeQL finns på sidan CodeQL och testsidan för logotyper av statiska verktyg.