diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2018-06-14 11:11:59 +0200 |
---|---|---|
committer | Jérôme Forissier <jerome.forissier@linaro.org> | 2018-06-18 10:01:13 +0200 |
commit | b8d0b26e700584b85819b33306d93811deb48800 (patch) | |
tree | 99ea9fdc26b448cad350f09b9ac1a00e0d13f3b2 | |
parent | 4d06c2f8e270af214c1979efaff8bd32fcfdd66b (diff) |
core: split tee_pager_init()
Splits tee_pager_init() into tee_pager_set_alias_area() and
tee_pager_generate_authenc_key(). The former function is called where
tee_pager_init() used to be called and the latter function is called
after the crypto API and RNG has been initialized.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
-rw-r--r-- | core/arch/arm/include/mm/tee_pager.h | 17 | ||||
-rw-r--r-- | core/arch/arm/kernel/generic_boot.c | 2 | ||||
-rw-r--r-- | core/arch/arm/mm/tee_pager.c | 10 | ||||
-rw-r--r-- | core/arch/arm/tee/init.c | 7 |
4 files changed, 25 insertions, 11 deletions
diff --git a/core/arch/arm/include/mm/tee_pager.h b/core/arch/arm/include/mm/tee_pager.h index 9b38617b..0d877168 100644 --- a/core/arch/arm/include/mm/tee_pager.h +++ b/core/arch/arm/include/mm/tee_pager.h @@ -44,13 +44,26 @@ bool tee_pager_get_table_info(vaddr_t va, struct core_mmu_table_info *ti); void *tee_pager_phys_to_virt(paddr_t pa); /* - * tee_pager_init() - Initialized the pager + * tee_pager_set_alias_area() - Initialize pager alias area * @mm_alias: The alias area where all physical pages managed by the * pager are aliased * * Panics if called twice or some other error occurs. */ -void tee_pager_init(tee_mm_entry_t *mm_alias); +void tee_pager_set_alias_area(tee_mm_entry_t *mm_alias); + +/* + * tee_pager_generate_authenc_key() - Generates authenc key for r/w paging + * + * Needs to draw random from RNG, panics if some error occurs. + */ +#ifdef CFG_WITH_PAGER +void tee_pager_generate_authenc_key(void); +#else +static inline void tee_pager_generate_authenc_key(void) +{ +} +#endif /* * tee_pager_add_core_area() - Adds a pageable core area diff --git a/core/arch/arm/kernel/generic_boot.c b/core/arch/arm/kernel/generic_boot.c index e2fb97d0..b46489e1 100644 --- a/core/arch/arm/kernel/generic_boot.c +++ b/core/arch/arm/kernel/generic_boot.c @@ -407,7 +407,7 @@ static void init_runtime(unsigned long pageable_part) mm = tee_mm_alloc2(&tee_mm_vcore, (vaddr_t)tee_mm_vcore.hi - TZSRAM_SIZE, TZSRAM_SIZE); assert(mm); - tee_pager_init(mm); + tee_pager_set_alias_area(mm); /* * Claim virtual memory which isn't paged. diff --git a/core/arch/arm/mm/tee_pager.c b/core/arch/arm/mm/tee_pager.c index 370c2bf6..d1caa139 100644 --- a/core/arch/arm/mm/tee_pager.c +++ b/core/arch/arm/mm/tee_pager.c @@ -332,7 +332,7 @@ static struct pgt *find_core_pgt(vaddr_t va) return &find_pager_table(va)->pgt; } -static void set_alias_area(tee_mm_entry_t *mm) +void tee_pager_set_alias_area(tee_mm_entry_t *mm) { struct pager_table *pt; unsigned idx; @@ -367,7 +367,7 @@ out: tlbi_mva_range(smem, nbytes, SMALL_PAGE_SIZE); } -static void generate_ae_key(void) +void tee_pager_generate_authenc_key(void) { uint8_t key[PAGER_AE_KEY_BITS / 8]; @@ -443,12 +443,6 @@ void tee_pager_early_init(void) } } -void tee_pager_init(tee_mm_entry_t *mm_alias) -{ - set_alias_area(mm_alias); - generate_ae_key(); -} - static void *pager_add_alias_page(paddr_t pa) { unsigned idx; diff --git a/core/arch/arm/tee/init.c b/core/arch/arm/tee/init.c index be3ed129..20aba013 100644 --- a/core/arch/arm/tee/init.c +++ b/core/arch/arm/tee/init.c @@ -10,6 +10,7 @@ #include <malloc.h> /* required for inits */ #include <mm/core_memprot.h> #include <mm/tee_mmu.h> +#include <mm/tee_pager.h> #include <sm/tee_mon.h> #include <tee/tee_fs.h> #include <tee/tee_svc.h> @@ -60,6 +61,12 @@ TEE_Result __weak init_teecore(void) /* call pre-define initcall routines */ call_initcalls(); + /* + * Now that RNG is initialized generate the key needed for r/w + * paging. + */ + tee_pager_generate_authenc_key(); + IMSG("Initialized"); return TEE_SUCCESS; } |