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 和靜態工具標誌測試 頁面。