pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
51 lines (39 loc) • 1.28 kB
YAML
# S5798: memset should not be used to delete sensitive data
# memset can be optimized away by compilers; use explicit_bzero or SecureZeroMemory
id: memset-sensitive-data
name: memset Should Not Be Used to Delete Sensitive Data
severity: error
category: security
defect_class: secrets
inline_tier: blocking
language: c
message: "memset should not be used to erase sensitive data — use explicit_bzero, SecureZeroMemory, or memset_s"
description: |
Compilers may optimize away memset() calls on variables that are never
read afterward. Use platform-specific secure zeroing functions instead.
✅ FIX: Use explicit_bzero (BSD), SecureZeroMemory (Windows), or memset_s (C11)
```c
explicit_bzero(password, sizeof(password)); // GOOD
SecureZeroMemory(password, sizeof(password)); // GOOD (Windows)
```
query: |
(call_expression
function: (identifier) @FN (#eq? @FN "memset")) @CALL
metavars:
- FN
- CALL
post_filter: c_memset_sensitive_arg
tags:
- security
- c
- cert
- secrets
- compiler-optimization
examples:
bad: |
char password[32];
memset(password, 0, sizeof(password)); // BAD - may be optimized away
good: |
explicit_bzero(password, sizeof(password)); // GOOD
has_fix: true
fix_action: replace_with_explicit_bzero