diff options
author | Peng Fan <peng.fan@nxp.com> | 2018-01-15 04:27:35 -0500 |
---|---|---|
committer | Jens Wiklander <jens.wiklander@linaro.org> | 2018-03-06 05:03:55 -0500 |
commit | 7dd003aec2016e90d33f25f90ad4cebb12224a8a (patch) | |
tree | 7792a4ca10be36ad1b288d4568e4e7ec9063b855 | |
parent | 661e50bc853209e41a5c14a290ca4decc43cbfd1 (diff) |
tee: correct max value for id allocation
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.fan@nxp.com>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
-rw-r--r-- | drivers/tee/tee_core.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/tee/tee_core.c b/drivers/tee/tee_core.c index 6c4b200a4560..0124a91c8d71 100644 --- a/drivers/tee/tee_core.c +++ b/drivers/tee/tee_core.c | |||
@@ -693,7 +693,7 @@ struct tee_device *tee_device_alloc(const struct tee_desc *teedesc, | |||
693 | { | 693 | { |
694 | struct tee_device *teedev; | 694 | struct tee_device *teedev; |
695 | void *ret; | 695 | void *ret; |
696 | int rc; | 696 | int rc, max_id; |
697 | int offs = 0; | 697 | int offs = 0; |
698 | 698 | ||
699 | if (!teedesc || !teedesc->name || !teedesc->ops || | 699 | if (!teedesc || !teedesc->name || !teedesc->ops || |
@@ -707,16 +707,20 @@ struct tee_device *tee_device_alloc(const struct tee_desc *teedesc, | |||
707 | goto err; | 707 | goto err; |
708 | } | 708 | } |
709 | 709 | ||
710 | if (teedesc->flags & TEE_DESC_PRIVILEGED) | 710 | max_id = TEE_NUM_DEVICES / 2; |
711 | |||
712 | if (teedesc->flags & TEE_DESC_PRIVILEGED) { | ||
711 | offs = TEE_NUM_DEVICES / 2; | 713 | offs = TEE_NUM_DEVICES / 2; |
714 | max_id = TEE_NUM_DEVICES; | ||
715 | } | ||
712 | 716 | ||
713 | spin_lock(&driver_lock); | 717 | spin_lock(&driver_lock); |
714 | teedev->id = find_next_zero_bit(dev_mask, TEE_NUM_DEVICES, offs); | 718 | teedev->id = find_next_zero_bit(dev_mask, max_id, offs); |
715 | if (teedev->id < TEE_NUM_DEVICES) | 719 | if (teedev->id < max_id) |
716 | set_bit(teedev->id, dev_mask); | 720 | set_bit(teedev->id, dev_mask); |
717 | spin_unlock(&driver_lock); | 721 | spin_unlock(&driver_lock); |
718 | 722 | ||
719 | if (teedev->id >= TEE_NUM_DEVICES) { | 723 | if (teedev->id >= max_id) { |
720 | ret = ERR_PTR(-ENOMEM); | 724 | ret = ERR_PTR(-ENOMEM); |
721 | goto err; | 725 | goto err; |
722 | } | 726 | } |