From dc70e04f29c5dd94cf0a446e6341c67ed96cc81d Mon Sep 17 00:00:00 2001 From: jidong Date: Tue, 16 Jul 2024 21:42:04 +0800 Subject: [PATCH] fix the read lock problem of the access_tokenid_get_permission Signed-off-by: jidong Change-Id: I176437cad8531928db4ec2c5b096e108304464aa --- drivers/accesstokenid/access_tokenid.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/accesstokenid/access_tokenid.c b/drivers/accesstokenid/access_tokenid.c index a9340d471f6c..f82703cd2f39 100644 --- a/drivers/accesstokenid/access_tokenid.c +++ b/drivers/accesstokenid/access_tokenid.c @@ -304,12 +304,15 @@ int access_tokenid_get_permission(struct file *file, void __user *uarg) struct token_perm_node *parent_node = NULL; read_lock(&token_rwlock); find_node_by_token(g_token_perm_root, get_perm_data.token, &target_node, &parent_node); - read_unlock(&token_rwlock); - if (target_node == NULL) + if (target_node == NULL) { + read_unlock(&token_rwlock); return -ENODATA; + } uint32_t bit_idx = get_perm_data.op_code % UINT32_T_BITS; - return (target_node->perm_data.perm[idx] & ((uint32_t)0x01 << bit_idx)) >> bit_idx; + int ret = (target_node->perm_data.perm[idx] & ((uint32_t)0x01 << bit_idx)) >> bit_idx; + read_unlock(&token_rwlock); + return ret; } typedef int (*access_token_id_func)(struct file *file, void __user *arg); -- Gitee