On Thu, 1 Oct 2020 11:47:58 +0200 Jens Wiklander jens.wiklander@linaro.org wrote:
On Wed, Sep 30, 2020 at 07:56:52PM +0300, Elvira Khabirova wrote:
+#if defined(CONFIG_TEE_APPID_PATH) || defined(CONFIG_TEE_APPID_SECURITY) +static void free_app_id(void *data) +{
- kfree(data);
+} +#endif /* CONFIG_TEE_APPID_PATH || CONFIG_TEE_APPID_SECURITY */
I don't think we need this function, we could just as well use kfree() directly instead.
Ah, I supposed "use the pattern you're already using" meant to keep the freeing function too. My bad.
Thanks, Jens
/**
- uuid_v5() - Calculate UUIDv5
- @uuid: Resulting UUID
@@ -208,6 +277,8 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method, gid_t ns_grp = (gid_t)-1; kgid_t grp = INVALID_GID; char *name = NULL;
- void *app_id_data = NULL;
- const char *app_id = NULL; int name_len; int rc;
@@ -228,6 +299,14 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method, * For TEEC_LOGIN_GROUP: * gid=<gid> *
* For TEEC_LOGIN_APPLICATION:
* app=<application id>
*
* For TEEC_LOGIN_USER_APPLICATION:
* uid=<uid>:app=<application id>
*
* For TEEC_LOGIN_GROUP_APPLICATION:
*/* gid=<gid>:app=<application id>
name = kzalloc(TEE_UUID_NS_NAME_SIZE, GFP_KERNEL); @@ -238,10 +317,6 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method, case TEE_IOCTL_LOGIN_USER: name_len = snprintf(name, TEE_UUID_NS_NAME_SIZE, "uid=%x", current_euid().val);
if (name_len >= TEE_UUID_NS_NAME_SIZE) {
rc = -E2BIG;
goto out_free_name;
break;}
case TEE_IOCTL_LOGIN_GROUP: @@ -254,10 +329,49 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method, name_len = snprintf(name, TEE_UUID_NS_NAME_SIZE, "gid=%x", grp.val);
if (name_len >= TEE_UUID_NS_NAME_SIZE) {
rc = -E2BIG;
break;
- case TEE_IOCTL_LOGIN_APPLICATION:
app_id = get_app_id(&app_id_data);
if (IS_ERR(app_id)) {
rc = PTR_ERR(app_id);
goto out_free_name;
}
name_len = snprintf(name, TEE_UUID_NS_NAME_SIZE, "app=%s",
app_id);
free_app_id(app_id_data);
break;
- case TEE_IOCTL_LOGIN_USER_APPLICATION:
app_id = get_app_id(&app_id_data);
if (IS_ERR(app_id)) {
rc = PTR_ERR(app_id);
goto out_free_name;
}
name_len = snprintf(name, TEE_UUID_NS_NAME_SIZE, "uid=%x:app=%s",
current_euid().val, app_id);
free_app_id(app_id_data);
break;
- case TEE_IOCTL_LOGIN_GROUP_APPLICATION:
memcpy(&ns_grp, connection_data, sizeof(gid_t));
grp = make_kgid(current_user_ns(), ns_grp);
if (!gid_valid(grp) || !in_egroup_p(grp)) {
rc = -EPERM;
goto out_free_name;
}
app_id = get_app_id(&app_id_data);
if (IS_ERR(app_id)) {
}rc = PTR_ERR(app_id); goto out_free_name;
name_len = snprintf(name, TEE_UUID_NS_NAME_SIZE, "gid=%x:app=%s",
grp.val, app_id);
break;free_app_id(app_id_data);
default: @@ -265,7 +379,10 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method, goto out_free_name; }
- rc = uuid_v5(uuid, &tee_client_uuid_ns, name, name_len);
- if (name_len < TEE_UUID_NS_NAME_SIZE)
rc = uuid_v5(uuid, &tee_client_uuid_ns, name, name_len);
- else
rc = -E2BIG;
out_free_name: kfree(name); -- 2.17.1