Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix PIV connection leak #48414

Merged
merged 1 commit into from
Nov 6, 2024
Merged

Conversation

Joerger
Copy link
Contributor

@Joerger Joerger commented Nov 5, 2024

The changes in #47091 introduced a delayed closure of the PIV connection to reduce the likelihood of closing a connection that's going to be opened moments later. However, this delayed closure is not bounded by the program execution, so if the delay goes past the end of program execution it would not be closed. This causes the PIV connection to go into a zombie state where the PIN remains cached indefinitely, until the yubikey is unplugged or another program claims and closes the zombie connection.

This PR removes the delayed closure as it isn't strictly necessary to fix #46372 and was meant as a small performance improvement. If we need this performance gain, we should look into different ways to handle the PIV connection other than a package level global. Probably, we would need to open and close the YubiKey connection in/near main().

Copy link

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-48414.d3pp5qlev8mo18.amplifyapp.com

@Joerger Joerger added the no-changelog Indicates that a PR does not require a changelog entry label Nov 5, 2024
@Joerger Joerger requested review from zmb3 and gzdunek November 5, 2024 00:29
@Joerger Joerger added this pull request to the merge queue Nov 6, 2024
Merged via the queue into master with commit b7c0e79 Nov 6, 2024
43 of 44 checks passed
@Joerger Joerger deleted the joerger/fix-yubikey-connection-leak branch November 6, 2024 20:29
@public-teleport-github-review-bot

@Joerger See the table below for backport results.

Branch Result
branch/v15 Failed
branch/v16 Failed
branch/v17 Create PR

@Joerger
Copy link
Contributor Author

Joerger commented Nov 6, 2024

Waiting on #47952 and #47953 for v16/15 backports

gzdunek pushed a commit that referenced this pull request Nov 8, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
@gzdunek
Copy link
Contributor

gzdunek commented Nov 14, 2024

FYI @Joerger, I cherry-picked this PR in #47952, #47953 and #47954, so no need to backport it separately.

github-merge-queue bot pushed a commit that referenced this pull request Nov 21, 2024
…7953)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <[email protected]>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request Nov 21, 2024
…7952)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <[email protected]>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request Nov 21, 2024
…7954)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <[email protected]>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Yubikey race condition using tsh
4 participants