コード例 #1
0
ファイル: tee_mmu.c プロジェクト: enavro/optee_os
uint32_t tee_mmu_user_get_cache_attr(struct tee_ta_ctx *ctx, void *va)
{
	TEE_Result res;
	paddr_t pa;
	uint32_t attr;

	res = tee_mmu_user_va2pa_attr(ctx, va, &pa, &attr);
	assert(res == TEE_SUCCESS);

	return mattr_to_teesmc_cache_attr(attr);
}
コード例 #2
0
ファイル: tee_mmu.c プロジェクト: Machiry/optee_os
uint32_t tee_mmu_user_get_cache_attr(struct user_ta_ctx *utc, void *va)
{
	TEE_Result res;
	paddr_t pa;
	uint32_t attr;

	res = tee_mmu_user_va2pa_attr(utc, va, &pa, &attr);
	assert(res == TEE_SUCCESS);

	return (attr >> TEE_MATTR_CACHE_SHIFT) & TEE_MATTR_CACHE_MASK;
}
コード例 #3
0
ファイル: tee_mmu.c プロジェクト: enavro/optee_os
TEE_Result tee_mmu_check_access_rights(const struct tee_ta_ctx *ctx,
				       uint32_t flags, tee_uaddr_t uaddr,
				       size_t len)
{
	tee_uaddr_t a;
	size_t addr_incr = MIN(CORE_MMU_USER_CODE_SIZE,
			       CORE_MMU_USER_PARAM_SIZE);

	/* Address wrap */
	if ((uaddr + len) < uaddr)
		return TEE_ERROR_ACCESS_DENIED;

	for (a = uaddr; a < (uaddr + len); a += addr_incr) {
		paddr_t pa;
		uint32_t attr;
		TEE_Result res;

		res = tee_mmu_user_va2pa_attr(ctx, (void *)a, &pa, &attr);
		if (res != TEE_SUCCESS)
			return res;

		if (!(flags & TEE_MEMORY_ACCESS_ANY_OWNER)) {
			/*
			 * Strict check that no one else (wich equal or
			 * less trust) may can access this memory.
			 *
			 * Parameters are shared with normal world if they
			 * aren't in secure DDR.
			 *
			 * If the parameters are in secure DDR it's because one
			 * TA is invoking another TA and in that case there's
			 * new memory allocated privately for the paramters to
			 * this TA.
			 *
			 * If we do this check for an address on TA
			 * internal memory it's harmless as it will always
			 * be in secure DDR.
			 */
			if (!tee_mm_addr_is_within_range(&tee_mm_sec_ddr, pa))
				return TEE_ERROR_ACCESS_DENIED;

		}

		if ((flags & TEE_MEMORY_ACCESS_WRITE) && !(attr & TEE_MATTR_UW))
			return TEE_ERROR_ACCESS_DENIED;
		if ((flags & TEE_MEMORY_ACCESS_READ) && !(attr & TEE_MATTR_UR))
			return TEE_ERROR_ACCESS_DENIED;
	}

	return TEE_SUCCESS;
}
コード例 #4
0
ファイル: tee_mmu.c プロジェクト: enavro/optee_os
TEE_Result tee_mmu_user_va2pa_helper(const struct tee_ta_ctx *ctx, void *ua,
				     paddr_t *pa)
{
	return tee_mmu_user_va2pa_attr(ctx, ua, pa, NULL);
}