Delen via


PaddingByteInformationDisclosure (Windows-besturingsstuurprogramma CodeQL-query)

Overzicht

Een nieuw toegewezen struct of klasse die per lid is geïnitialiseerd, kan informatie lekken als het padding bytes bevat.

Aanbeveling

Zorg ervoor dat alle opvullingsbytes in de struct of klasse zijn geïnitialiseerd.

Gebruik indien mogelijk memset om de hele structuur/klasse te initialiseren.

Voorbeeld

In het volgende voorbeeld ziet u een scenario waarin de padding tussen de eerste en tweede elementen niet is geïnitialiseerd:

typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn() 
{
	// BAD: Padding between the first and second elements not initialized.
	MyStruct myBadStackStruct = { Unknown };
	return myBadStackStruct;
}

Om dit te corrigeren, initialiseren we alle bytes met behulp van memset:

typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn()
{
	// GOOD: All padding bytes initialized
	MyStruct* myGoodHeapStruct = (struct MyStruct*)malloc(sizeof(struct MyStruct));
	memset(myGoodHeapStruct, 0, sizeof(struct MyStruct));
	return *myGoodHeapStruct;
}

Aanvullende details

Deze query vindt u in de Microsoft GitHub CodeQL-opslagplaats. Zie de pagina CodeQL en de pagina Logotest voor statische hulpprogramma's voor meer informatie over hoe ontwikkelaars van Windows-stuurprogramma's CodeQL kunnen downloaden en uitvoeren.