diff options
author | Arnd Bergmann <arnd@arndb.de> | 2023-12-06 16:15:25 +0100 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2023-12-06 16:15:26 +0100 |
commit | 9c7f01d5f438a3b3e3dc551df560ae420b4b741c (patch) | |
tree | 583b8c741eedd52bb5fc836d2abe78ea51a930fa /drivers/tee | |
parent | 2cc14f52aeb78ce3f29677c2de1f06c0e91471ab (diff) | |
parent | 7269cba53d906cf257c139d3b3a53ad272176bca (diff) | |
download | lwn-9c7f01d5f438a3b3e3dc551df560ae420b4b741c.tar.gz lwn-9c7f01d5f438a3b3e3dc551df560ae420b4b741c.zip |
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>
Diffstat (limited to 'drivers/tee')
-rw-r--r-- | drivers/tee/optee/device.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/tee/optee/device.c b/drivers/tee/optee/device.c index 64f0e047c23d..4b1092127694 100644 --- a/drivers/tee/optee/device.c +++ b/drivers/tee/optee/device.c @@ -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; } |