feature/tpm: check IsZero in clone instead of just nil (#17884)

The key.NewEmptyHardwareAttestationKey hook returns a non-nil empty
attestationKey, which means that the nil check in Clone doesn't trigger
and proceeds to try and clone an empty key. Check IsZero instead to
reduce log spam from Clone.

As a drive-by, make tpmAvailable check a sync.Once because the result
won't change.

Updates #17882

Signed-off-by: Andrew Lytvynov <awly@tailscale.com>
pull/17563/head
Andrew Lytvynov 3 weeks ago committed by GitHub
parent 888a5d4812
commit c5919b4ed1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -274,7 +274,7 @@ func (ak *attestationKey) Close() error {
} }
func (ak *attestationKey) Clone() key.HardwareAttestationKey { func (ak *attestationKey) Clone() key.HardwareAttestationKey {
if ak == nil { if ak.IsZero() {
return nil return nil
} }

@ -35,12 +35,15 @@ import (
"tailscale.com/util/testenv" "tailscale.com/util/testenv"
) )
var infoOnce = sync.OnceValue(info) var (
infoOnce = sync.OnceValue(info)
tpmSupportedOnce = sync.OnceValue(tpmSupported)
)
func init() { func init() {
feature.Register("tpm") feature.Register("tpm")
feature.HookTPMAvailable.Set(tpmSupported) feature.HookTPMAvailable.Set(tpmSupportedOnce)
feature.HookHardwareAttestationAvailable.Set(tpmSupported) feature.HookHardwareAttestationAvailable.Set(tpmSupportedOnce)
hostinfo.RegisterHostinfoNewHook(func(hi *tailcfg.Hostinfo) { hostinfo.RegisterHostinfoNewHook(func(hi *tailcfg.Hostinfo) {
hi.TPM = infoOnce() hi.TPM = infoOnce()

Loading…
Cancel
Save