BadOverflowGuard(Windows 드라이버 CodeQL 쿼리)
개요
모든 인수 형식의 크기가 4바이트보다 작은 경우 더하기 인수 중 하나와 비교하여 추가의 오버플로를 확인하는 데 실패합니다. 이는 추가의 결과가 4 바이트 int로 승격되기 때문입니다.
권장
추가를 4바이트 이상의 값과 비교하여 오버플로를 확인합니다.
예제
이 예제에서 비교 결과는 정수 오버플로를 생성합니다.
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;
}
버그를 해결하려면 추가를 4바이트 이상의 값과 비교하여 오버플로를 검사.
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
추가 정보
이 쿼리는 Microsoft GitHub CodeQL 리포지토리에서 찾을 수 있습니다. Windows 드라이버 개발자가 CodeQL을 다운로드하고 실행하는 방법에 대한 자세한 내용은 CodeQL 및 정적 도구 로고 테스트 페이지를 참조하세요.