The privileged dev id range is [TEE_NUM_DEVICES / 2, TEE_NUM_DEVICES).
The non-privileged dev id range is [0, TEE_NUM_DEVICES / 2).

So when finding a slot for them, need to use different max value.

Signed-off-by: Peng Fan <peng....@nxp.com>
Cc: Jens Wiklander <jens.wiklan...@linaro.org>
---
 drivers/tee/tee_core.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/tee/tee_core.c b/drivers/tee/tee_core.c
index 3d49ac2e3c84..d1f4ecdbc8cc 100644
--- a/drivers/tee/tee_core.c
+++ b/drivers/tee/tee_core.c
@@ -701,7 +701,7 @@ struct tee_device *tee_device_alloc(const struct tee_desc 
*teedesc,
 {
        struct tee_device *teedev;
        void *ret;
-       int rc;
+       int rc, max_id;
        int offs = 0;
 
        if (!teedesc || !teedesc->name || !teedesc->ops ||
@@ -715,16 +715,20 @@ struct tee_device *tee_device_alloc(const struct tee_desc 
*teedesc,
                goto err;
        }
 
-       if (teedesc->flags & TEE_DESC_PRIVILEGED)
+       max_id = TEE_NUM_DEVICES / 2;
+
+       if (teedesc->flags & TEE_DESC_PRIVILEGED) {
                offs = TEE_NUM_DEVICES / 2;
+               max_id = TEE_NUM_DEVICES;
+       }
 
        spin_lock(&driver_lock);
-       teedev->id = find_next_zero_bit(dev_mask, TEE_NUM_DEVICES, offs);
-       if (teedev->id < TEE_NUM_DEVICES)
+       teedev->id = find_next_zero_bit(dev_mask, max_id, offs);
+       if (teedev->id < max_id)
                set_bit(teedev->id, dev_mask);
        spin_unlock(&driver_lock);
 
-       if (teedev->id >= TEE_NUM_DEVICES) {
+       if (teedev->id >= max_id) {
                ret = ERR_PTR(-ENOMEM);
                goto err;
        }
-- 
2.14.1

Reply via email to