Commit 9bdec01
committed
fix(permutation): wrap secret locals in Zeroizing for unwind safety
Follow-up to the constant-time fix. The explicit `kv.zeroize()` and
`input.zeroize()` calls only run on the success path; if any operation
between secret extraction and the wipe ever unwinds, the secret bytes
would be left on the stack. None of the current operations between the
bookends can panic, but encoding unwind-safety in the type system is
strictly better than relying on that invariant holding forever.
Wrap `input`, `kv`, `selected`, and `src` in `Zeroizing<_>` so the wipe
is performed by `Drop`, guaranteed on every exit including panic. The
explicit `.zeroize()` calls become redundant and are removed.
Verified with the trailofbits zeroize-audit skill: volatile-zero stores
in the LLVM IR are intact at O3 (10) and not reduced from O0 (8). The
ct_analyzer still PASSES on arm64. Permutation correctness tests pass.1 parent 39a9445 commit 9bdec01
1 file changed
Lines changed: 16 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
47 | 49 | | |
48 | 50 | | |
49 | | - | |
50 | | - | |
| 51 | + | |
| 52 | + | |
51 | 53 | | |
52 | | - | |
| 54 | + | |
53 | 55 | | |
54 | 56 | | |
55 | | - | |
56 | | - | |
| 57 | + | |
57 | 58 | | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | 59 | | |
62 | 60 | | |
63 | 61 | | |
64 | 62 | | |
65 | | - | |
| 63 | + | |
66 | 64 | | |
67 | 65 | | |
68 | 66 | | |
69 | 67 | | |
70 | 68 | | |
71 | 69 | | |
| 70 | + | |
| 71 | + | |
72 | 72 | | |
73 | 73 | | |
74 | | - | |
75 | | - | |
| 74 | + | |
| 75 | + | |
76 | 76 | | |
77 | | - | |
78 | | - | |
| 77 | + | |
| 78 | + | |
79 | 79 | | |
80 | | - | |
81 | 80 | | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | 81 | | |
86 | 82 | | |
87 | 83 | | |
| |||
0 commit comments