Freigeben über


PaddingByteInformationDisclosure (CodeQL-Abfrage des Windows-Treibers)

Übersicht

Eine neu zugeordnete Struktur oder Klasse, die member-by-member initialisiert wird, kann Informationen zurückgeben, wenn sie Auffüllungsbytes enthält.

Empfehlung

Stellen Sie sicher, dass alle Auffüllungsbytes in der Struktur oder Klasse initialisiert sind.

Verwenden Sie nach Möglichkeit memset , um die gesamte Struktur/Klasse zu initialisieren.

Beispiel

Das folgende Beispiel zeigt ein Szenario, in dem der Abstand zwischen dem ersten und dem zweiten Element 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 mithilfe von 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. Weitere Informationen dazu, wie Entwickler von Windows-Treibern CodeQL herunterladen und ausführen können, finden Sie auf der Seite CodeQL und auf der Seite Logo-Test für statische Tools .