fix(secrets): Avoid count underflow by only counting initialized secrets #14991
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Currently, a secret-count underflow can occur if uninitialized secrets are destroyed. This can for example be triggered by the following config part
without actually referencing any secret. In this example, the
password
setting of the secret-store is not set and thus the struct's "secret" member is not initialized (init(...)
is not called). As a consequence we do not count the secret. However, when theInit()
function in the OS secret-store terminates it callsDestroy()
on thepassword
secret which unconditionally subtracts one from the secret count. Remember, thepassword
secret was not initialized and thus not counted in the first place! As a result, the count underflows.This PR only counts initialized secrets (as only those use locked memory) in both positive and negative direction. Furthermore, we provide a safety-net telling the user to report unusual (negative) values and clip the count to not confuse users.
Checklist
Related issues
superseeds #14986