diff options
-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 | } |