On 01.02.24 23:21, Jarkko Sakkinen wrote: > > On Wed Jan 31, 2024 at 7:08 PM EET, Daniel P. Smith wrote: >> Commit 933bfc5ad213 introduced the use of a locality counter to control when a >> locality request is allowed to be sent to the TPM. In the commit, the counter >> is indiscriminately decremented. Thus creating a situation for an integer >> underflow of the counter. > > What is the sequence of events that leads to this triggering the > underflow? This information should be represent in the commit message. > AFAIU this is: 1. We start with a locality_counter of 0 and then we call tpm_tis_request_locality() for the first time, but since a locality is (unexpectedly) already active check_locality() and consequently __tpm_tis_request_locality() return "true". This prevents the locality_counter from being increased to 1, see ret = __tpm_tis_request_locality(chip, l); if (!ret) /* Counter not increased since ret == 1 */ priv->locality_count++; in tpm_tis_request_locality(). If now the locality is released the counter is decreased to below zero (resulting in an underflow since "locality_counter" is an unsigned int.