OP-TEE fix for supplicant based device enumeration

Adds a sysfs attribute for devices depending on supplicant services so
 that the user-space service can detect and detach those devices before
 closing the supplicant
 -----BEGIN PGP SIGNATURE-----
 
 iQJOBAABCgA4FiEEFV+gSSXZJY9ZyuB5LinzTIcAHJcFAmVTg+kaHGplbnMud2lr
 bGFuZGVyQGxpbmFyby5vcmcACgkQLinzTIcAHJdIexAAiMTpHHQvp0ac5N7w1fPk
 us7bW+HdZXyjDX+tXCPv2sFTRPCIWay1tCPE6BMPrZ2ADxPpHiXjp+gjAixtiaSL
 lym4CzUFfD+fgl1F61J8gAAP7TYcKRPaKx4Jt9rKuo2RsHiCrhY4T+2RH0VWisTB
 ppmrgIBnkzVYIJQ3lO4Ht4ONDMK3wrHZfiyRwBuIlGmq7mOffowJ6C74YcXCDVfg
 jEjnMOGsVdNEvUCjqzA4OltLXH4NnYY6EH9UwKfsIvBjaCMexX+ShZmZkqfu4l9f
 hud9yP7U5F1aBICRb0I8w929hIBTov6UNDTl74ic6YgxDFz6Y8OOZ21zytFBgQ99
 DOKQdZ8S5Hr5n1qCwZ//P2PBbLy2u/WivlO0GE1ymNjY+Vw1BfRK8hxpKD1gHaRi
 Zf0xG26CNh/yuR4WEUSDixTUHc//H5bh9/nPn2pqcqtOhGmCfTF8akeEMpDsOBYL
 L7fSmQ7eojePD88IOCCpW4bRCJyzOX4vftTFLpS0EOX05AyVUqglb/5FOU/vhy3y
 qIqHoNXm46tVjxiNUEBaQbG3cb/h0wdq/kr3RHnZwx7+8HPRR7zzQp6DxRVfSCua
 A1QLNxR2WbiPFYncmzwVOKCIo/klZlPFwuoi/3LLXQVh4GJqzo/ARAt0CCHpsDWN
 z6qRQuUrda8W/9MHj2uueKU=
 =O0av
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmVwkA4ACgkQYKtH/8kJ
 UidOExAAoHm6lwx12Qsc9ok0xNCbk0EmNDEuwkQki1cdrYrFyj5sMrOeRQAZ+9ig
 AszIaRWSnEE282pBUfed5tTfHYuumyZbZaqW5+4ZmWGewkkCgAW1mTGQyfuCDclc
 NqHSvDoYmLWThKqBn6SBG0z3NoavD2wP/sFmSPkyIa21krsCd54XsuAsZkM9PX8C
 K8Fjzx0H9wVYEYH+LjAV1c0cNRckhR+bbG42OYcoBxqKtU9WaCxxcW4YRJyL/wpe
 wxgYY8Obcs8nBC+tJzt5LtTYnXmRUNsbBqzeSgunjdC6kDw2JRHFvBWXnqz4GtvD
 2YBsA3zWNMnb7JZGfFPHxExi59JTDvtcMrTnxpWsytx8rmN7ZbcjI591KkiV6ZQ6
 y3Khj6sNqdocOrCKFlwpzJwR0DJRDcR4Vxe6qAztTuNEXEdDXXvAi7UtZ4IJqBD/
 Rblh02uorxeMQ3Y5sEcss2QNT6QvMuV2yimjTqAnHHkmbHeN80H/Npwk4auOnu49
 Ia7ZTUzIM8gfRwX1iVBo4+kMyP/RDcqkLySgJOJLv4t+e3dbaprpxbbfEsSNlJbG
 XZ6Vo8Zuc7md4pVB8soaXk+j0xrkzmVyZbzCRcoTIpJQB1sASmklnGmttJAZvQvk
 SOImuJ98QtOy5FitG7SqDv5czjFH539wcFCQ/DYflLBpiYgE78c=
 =dg7M
 -----END PGP SIGNATURE-----

Merge tag 'optee-supplicant-fix-for-v6.7' of git://git.linaro.org:/people/jens.wiklander/linux-tee into arm/fixes

OP-TEE fix for supplicant based device enumeration

Adds a sysfs attribute for devices depending on supplicant services so
that the user-space service can detect and detach those devices before
closing the supplicant

* tag 'optee-supplicant-fix-for-v6.7' of git://git.linaro.org:/people/jens.wiklander/linux-tee:
  tee: optee: Fix supplicant based device enumeration

Link: https://lore.kernel.org/r/20231114153113.GA1310615@rayden
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2023-12-06 16:15:25 +01:00
commit 9c7f01d5f4
2 changed files with 24 additions and 2 deletions

View file

@ -6,3 +6,12 @@ Description:
OP-TEE bus provides reference to registered drivers under this directory. The <uuid>
matches Trusted Application (TA) driver and corresponding TA in secure OS. Drivers
are free to create needed API under optee-ta-<uuid> directory.
What: /sys/bus/tee/devices/optee-ta-<uuid>/need_supplicant
Date: November 2023
KernelVersion: 6.7
Contact: op-tee@lists.trustedfirmware.org
Description:
Allows to distinguish whether an OP-TEE based TA/device requires user-space
tee-supplicant to function properly or not. This attribute will be present for
devices which depend on tee-supplicant to be running.

View file

@ -60,7 +60,16 @@ static void optee_release_device(struct device *dev)
kfree(optee_device);
}
static int optee_register_device(const uuid_t *device_uuid)
static ssize_t need_supplicant_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return 0;
}
static DEVICE_ATTR_RO(need_supplicant);
static int optee_register_device(const uuid_t *device_uuid, u32 func)
{
struct tee_client_device *optee_device = NULL;
int rc;
@ -83,6 +92,10 @@ static int optee_register_device(const uuid_t *device_uuid)
put_device(&optee_device->dev);
}
if (func == PTA_CMD_GET_DEVICES_SUPP)
device_create_file(&optee_device->dev,
&dev_attr_need_supplicant);
return rc;
}
@ -142,7 +155,7 @@ static int __optee_enumerate_devices(u32 func)
num_devices = shm_size / sizeof(uuid_t);
for (idx = 0; idx < num_devices; idx++) {
rc = optee_register_device(&device_uuid[idx]);
rc = optee_register_device(&device_uuid[idx], func);
if (rc)
goto out_shm;
}