Skip to content

Commit 3a81414

Browse files
mirskifapranav.goyal
authored andcommitted
Cleaner logic for setting finalizers during sensitive string writes
1 parent 8807567 commit 3a81414

File tree

1 file changed

+3
-10
lines changed

1 file changed

+3
-10
lines changed

internal/sensitive/sensitive.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,13 @@ func New(buf []byte) *Sensitive {
4545
func (s *Sensitive) Write(b []byte) error {
4646
newBuf := append(s.buf, b...)
4747
if &newBuf[0] != &s.buf[0] {
48+
// buffer starts at a new address - must have moved to a new memory block
4849
zeroMeta(s.meta)
4950
s.setMeta(newBuf)
5051
return nil
5152
}
52-
if &newBuf != &s.buf {
53-
cancelZeroMeta(s.meta)
54-
s.setMeta(newBuf)
55-
return nil
56-
}
53+
// buffer hasn't moved, don't zero out current buffer as it's still in use, but do update the buffer to capture new length etc.
54+
s.buf = newBuf
5755
return nil
5856
}
5957

@@ -89,11 +87,6 @@ func (s *Sensitive) setMeta(buf []byte) {
8987
runtime.SetFinalizer(m, zeroMeta)
9088
}
9189

92-
func cancelZeroMeta(m *meta) {
93-
m.pin.Unpin()
94-
runtime.SetFinalizer(m, nil)
95-
}
96-
9790
// zeroMeta zeroes the underlying buffer and removes all finalizers and memory pins
9891
func zeroMeta(m *meta) {
9992
for i := range len(m.buf) {

0 commit comments

Comments
 (0)