* Requirements: way to read log output on product as shipped
Kernel heap free checking
* Threat: kernel heap free corruption
* Mitigation: validate heap origin on free
* Test: allocate kernel heap, free it twice
@@ -935,6 +942,7 @@ Kernel heap free checking
* Requirements: way to read log output on product as shipped
Kernel stack memory zeroing
* Threat: uninitialized kernel stack memory controlled by attacker
* Mitigation: zero-initialize all kernel stack memory before use
* Test: sequentially call 2 functions that allocate the same amount of memory, fill the first with known values and return, and during second function call, read the stack contents back
@@ -943,6 +951,7 @@ Kernel stack memory zeroing
* Requirements: way to read log output on product as shipped
Kernel heap memory zeroing
* Threat: uninitialized kernel heap memory controlled by attacker
* Mitigation: zero-initialize all kernel heap memory before use
* Test: allocate heap memory, fill with a known value, free it, allocate it again in a deterministic way to get the same heap region, and read back the contents
@@ -951,6 +960,7 @@ Kernel heap memory zeroing
* Requirements: way to read log output on product as shipped
Kernel linked list protection
* Threat: kernel doubly linked list corruption
* Mitigation: linked list implementation checks prev/next pointers on add/del
* Test: add or delete an item to an uninitialized list
@@ -959,6 +969,7 @@ Kernel linked list protection
* Requirements: way to read log output on product as shipped
Prevent execution of non-kernel code memory
* Threat: Non-code executable kernel memory
* Mitigation: Only kernel code memory regions are executable
* Test: copy a trivial return-only function into every class of non-code memory in the kernel (e.g. stack, heap, read-only data), one to a thread, and attempt to execute each one
@@ -967,6 +978,7 @@ Prevent execution of non-kernel code memory
* Requirements: way to read log output on product as shipped
Prevent writes to kernel code and read-only data memory
* Threat: Writable kernel code or read-only memory
* Mitigation: All kernel code memory and non-writable data is read-only
* Test: from separate threads, write to each portion of kernel code
@@ -976,6 +988,7 @@ Prevent writes to kernel code and read-only data memory
* Requirements: way to read log output on product as shipped
Prevent unintentional kernel access to unprivileged memory
* Threat: Unexpected access to userspace memory from OS kernel
* Test: in separate kernel threads, read, write, and execute memory regions that are mapped to userspace without going through dedicated userspace memory access routines