Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@chrisfenner
Copy link
Member

I observed that the both the following will fail:

tpm2StartAuthSession{
  SessionType: tpm2.TPMSETrial,
  AuthHash:    tpm2.TPMAlgSHA256,
  NonceCaller: tpm2.TPM2BNonce{
	  Buffer: make([]byte, 16),
  },
}.Execute(tpm)
tpm2.CreateLoaded{
  InPublic: someTemplate,
}.Execute(tpm)

with a message like

'handle'-tagged member of 'tpm2.StartAuthSession' was of type 'tpm2.handle', which does not satisfy handle

because their handle tagged values of type tpm2.handle, while marked nullable, were failing type assertions to handle during the reflection based marshalling.

Investigating this led me to learn that type assertions on nil-valued interface-typed variables (such as handle-typed TPM command struct fields) will fail due to the design of the language.

To improve the usability of go-tpm and allow callers to leave out handles in commands when NULL is desired, this change adds logic to treat any nil-valued interface-typed command variable (when annotated with gotpm:handle) as TPM_RH_NULL. This allows us to remove the nullable annotation from those fields, which makes sense. It's an interface, the user can always (try to) pass nil, and this should always mean TPM_RH_NULL.

@chrisfenner chrisfenner requested review from a team, alexmwu and jkl73 as code owners September 13, 2023 21:11
@chrisfenner chrisfenner merged commit f397c27 into google:main Sep 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants