共用方式為


PaddingByteInformationDisclosure (Windows 驅動程式 CodeQL 查詢)

概觀

新配置的結構或類別,如果成員包含填補位元組,則初始化成員 by-member 可能會洩漏資訊。

建議

請確定結構或類別中的所有填補位元組都已初始化。

可能的話,請使用 memset 初始化整個結構/類別。

範例

下列範例顯示未初始化第一個和第二個元素之間的邊框間距的案例:

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

若要修正此問題,我們將使用 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;
}

其他詳細資料

您可以在 Microsoft GitHub CodeQL 存放庫中找到此查詢。 如需 Windows 驅動程式開發人員如何下載和執行 CodeQL 的詳細資訊,請參閱 CodeQL 和靜態工具標誌測試 頁面。