Uninitialized Memory Disclosure

Uninitialized memory copied into user-visible output

Description

Information can leak when uninitialized stack or pool buffers are copied to user-visible output, from kernel to user space, or to files.

Potential impact

  • Previous stack or heap contents may be exposed.
  • Leaked addresses, tokens, or key fragments may assist other attacks.

Remediation

  1. Initialize the entire output buffer before use.
  2. If only some structure fields or array elements are filled, also clear padding and unused areas.
  3. In kernel code, use memset, zero-allocation APIs, or another method that initializes every byte being copied before sending data to user space.

Examples

Before

c
void run(char *user) {
    char kernel_buffer[64];
    copy_to_user(user, kernel_buffer, sizeof(kernel_buffer));
}

After

c
void run(char *user) {
    char kernel_buffer[64];
    memset(kernel_buffer, 0, sizeof(kernel_buffer));
    copy_to_user(user, kernel_buffer, sizeof(kernel_buffer));
}

Explanation:

  • Before: kernel_buffer is copied to user space without initialization.
  • After: The entire buffer is zeroed before copying.

References