Freigeben über


PaddingByteInformationDisclosure (CodeQL-Abfrage für Windows-Treiber)

Überblick

Eine neu zugeordnete Struktur oder Klasse, die durch ein Mitglied initialisiert wird, kann Informationen enthalten, wenn sie Abstandsbytes enthält.

Empfehlung

Stellen Sie sicher, dass alle Abstandsbytes in der Struktur oder Klasse initialisiert werden.

Verwenden Sie memset , wenn möglich, um die gesamte Struktur/Klasse zu initialisieren.

Beispiel

Das folgende Beispiel zeigt ein Szenario, in dem der Abstand zwischen den ersten und zweiten Elementen nicht initialisiert wird:

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;
}

Um dies zu korrigieren, initialisieren wir alle Bytes mit 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;
}

Zusätzliche Details

Diese Abfrage finden Sie im Microsoft GitHub CodeQL-Repository. Details dazu, wie Windows-Treiberentwickler CodeQL herunterladen und ausführen können, finden Sie auf der Seite " CodeQL" und auf der Seite "Logotest für statische Tools ".