On Fri, 2016-12-30 at 10:53 -0500, Ken Goldman wrote:
> It appears that an open() to the TPM doesn't block if another process
> has /dev/tpm0 open. It returns -1, an error.
>
> Questions:
>
> Is this expected behavior?
It's enforced in drivers/char/tpm/tpm-dev.c by this check
/* It's assured that the chip will be opened just once,
* by the check of is_open variable, which is protected
* by driver_lock. */
if (test_and_set_bit(0, &chip->is_open)) {
dev_dbg(&chip->dev, "Another process owns this TPM\n");
return -EBUSY;
}
so yes, it looks to be expected.
> Was this also true for 1.2?
In tpm 1.2 there was a single access broker daemon (tcsd) which opened
the device, so you could have multiple applications using the TPM but
only one device open.
> Is there any way to change it. I didn't set O_NOBLOCK. Is there
> perhaps an ioctl()?
> Is this something that should be added?
I think for the 2.0 model of every application getting direct access,
we should make it so that every open gets a separate read/write stream
to the tpm which we send in via the locked version of tpm_transmit()
and just let the chip->tpm_mutex sort out the accesses.
I can code up a patch if no-one's already done it.
James
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
tpmdd-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel