core: print rwx flags for each MMU region when a user TA aborts
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/core/arch/arm/kernel/user_ta.c b/core/arch/arm/kernel/user_ta.c
index 2e4cbbc..03b87b6 100644
--- a/core/arch/arm/kernel/user_ta.c
+++ b/core/arch/arm/kernel/user_ta.c
@@ -501,6 +501,7 @@
static void user_ta_dump_state(struct tee_ta_ctx *ctx)
{
struct user_ta_ctx *utc __maybe_unused = to_user_ta_ctx(ctx);
+ char flags[4] = { '\0', };
size_t n;
EMSG_RAW(" arch: %s load address: 0x%x ctx-idr: %d",
@@ -515,10 +516,12 @@
mobj_get_pa(utc->mmu->regions[n].mobj,
utc->mmu->regions[n].offset, 0, &pa);
+ mattr_uflags_to_str(flags, sizeof(flags),
+ utc->mmu->regions[n].attr);
EMSG_RAW(" region %zu: va %#" PRIxVA " pa %#" PRIxPA
- " size %#zx",
+ " size %#zx flags %s",
n, utc->mmu->regions[n].va, pa,
- utc->mmu->regions[n].size);
+ utc->mmu->regions[n].size, flags);
}
}
KEEP_PAGER(user_ta_dump_state);
diff --git a/core/include/mm/tee_mmu_types.h b/core/include/mm/tee_mmu_types.h
index 891f254..855136b 100644
--- a/core/include/mm/tee_mmu_types.h
+++ b/core/include/mm/tee_mmu_types.h
@@ -89,4 +89,15 @@
vaddr_t ta_private_vmem_end;
};
+static inline void mattr_uflags_to_str(char *str, size_t size, uint32_t attr)
+{
+ if (size < 4)
+ return;
+
+ str[0] = (attr & TEE_MATTR_UR) ? 'r' : '-';
+ str[1] = (attr & TEE_MATTR_UW) ? 'w' : '-';
+ str[2] = (attr & TEE_MATTR_UX) ? 'x' : '-';
+ str[3] = '\0';
+}
+
#endif