Commit 601e3ed2 authored by Varun Wadekar's avatar Varun Wadekar Committed by Manish Pandey
Browse files

lib: cpus: sanity check pointers before use



The cpu_ops structure contains a lot of function pointers. It
is a good idea to verify that the function pointer is not NULL
before executing it.

This patch sanity checks each pointer before use to prevent any
unforeseen crashes. These checks have been enabled for debug
builds only.

Change-Id: Ib208331c20e60f0c7c582a20eb3d8cc40fb99d21
Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
parent 64b2a237
...@@ -78,6 +78,10 @@ func prepare_cpu_pwr_dwn ...@@ -78,6 +78,10 @@ func prepare_cpu_pwr_dwn
mov x1, #CPU_PWR_DWN_OPS mov x1, #CPU_PWR_DWN_OPS
add x1, x1, x2, lsl #3 add x1, x1, x2, lsl #3
ldr x1, [x0, x1] ldr x1, [x0, x1]
#if ENABLE_ASSERTIONS
cmp x1, #0
ASM_ASSERT(ne)
#endif
br x1 br x1
endfunc prepare_cpu_pwr_dwn endfunc prepare_cpu_pwr_dwn
...@@ -171,6 +175,10 @@ func get_cpu_ops_ptr ...@@ -171,6 +175,10 @@ func get_cpu_ops_ptr
/* Subtract the increment and offset to get the cpu-ops pointer */ /* Subtract the increment and offset to get the cpu-ops pointer */
sub x0, x4, #(CPU_OPS_SIZE + CPU_MIDR) sub x0, x4, #(CPU_OPS_SIZE + CPU_MIDR)
#if ENABLE_ASSERTIONS
cmp x0, #0
ASM_ASSERT(ne)
#endif
error_exit: error_exit:
ret ret
endfunc get_cpu_ops_ptr endfunc get_cpu_ops_ptr
...@@ -276,7 +284,15 @@ func print_errata_status ...@@ -276,7 +284,15 @@ func print_errata_status
* turn. * turn.
*/ */
mrs x0, tpidr_el3 mrs x0, tpidr_el3
#if ENABLE_ASSERTIONS
cmp x0, #0
ASM_ASSERT(ne)
#endif
ldr x1, [x0, #CPU_DATA_CPU_OPS_PTR] ldr x1, [x0, #CPU_DATA_CPU_OPS_PTR]
#if ENABLE_ASSERTIONS
cmp x1, #0
ASM_ASSERT(ne)
#endif
ldr x0, [x1, #CPU_ERRATA_FUNC] ldr x0, [x1, #CPU_ERRATA_FUNC]
cbz x0, .Lnoprint cbz x0, .Lnoprint
...@@ -326,6 +342,10 @@ func check_wa_cve_2017_5715 ...@@ -326,6 +342,10 @@ func check_wa_cve_2017_5715
ASM_ASSERT(ne) ASM_ASSERT(ne)
#endif #endif
ldr x0, [x0, #CPU_DATA_CPU_OPS_PTR] ldr x0, [x0, #CPU_DATA_CPU_OPS_PTR]
#if ENABLE_ASSERTIONS
cmp x0, #0
ASM_ASSERT(ne)
#endif
ldr x0, [x0, #CPU_EXTRA1_FUNC] ldr x0, [x0, #CPU_EXTRA1_FUNC]
/* /*
* If the reserved function pointer is NULL, this CPU * If the reserved function pointer is NULL, this CPU
...@@ -359,6 +379,10 @@ func wa_cve_2018_3639_get_disable_ptr ...@@ -359,6 +379,10 @@ func wa_cve_2018_3639_get_disable_ptr
ASM_ASSERT(ne) ASM_ASSERT(ne)
#endif #endif
ldr x0, [x0, #CPU_DATA_CPU_OPS_PTR] ldr x0, [x0, #CPU_DATA_CPU_OPS_PTR]
#if ENABLE_ASSERTIONS
cmp x0, #0
ASM_ASSERT(ne)
#endif
ldr x0, [x0, #CPU_EXTRA2_FUNC] ldr x0, [x0, #CPU_EXTRA2_FUNC]
ret ret
endfunc wa_cve_2018_3639_get_disable_ptr endfunc wa_cve_2018_3639_get_disable_ptr
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment