Commit 3a26a28c authored by Sandrine Bailleux's avatar Sandrine Bailleux
Browse files

Make runtime_svc_init() function more robust

 - Added some debug assertions checking that the runtime services
   indexes computed by get_unique_oen() are sane.

 - Do not print the name of the service when its descriptor is
   invalid. If the descriptor is corrupted then its name field
   could be corrupted as well and we would end up reading an
   arbitrary amount of invalid memory.

Change-Id: I16f61065277d01fe1555d5a9cf743f7b52ccaa60
parent 9d24d353
...@@ -107,8 +107,8 @@ void runtime_svc_init(void) ...@@ -107,8 +107,8 @@ void runtime_svc_init(void)
*/ */
rc = validate_rt_svc_desc(service); rc = validate_rt_svc_desc(service);
if (rc) { if (rc) {
ERROR("Invalid runtime service descriptor %p (%s)\n", ERROR("Invalid runtime service descriptor %p\n",
(void *) service, service->name); (void *) service);
panic(); panic();
} }
...@@ -136,8 +136,10 @@ void runtime_svc_init(void) ...@@ -136,8 +136,10 @@ void runtime_svc_init(void)
*/ */
start_idx = get_unique_oen(rt_svc_descs[index].start_oen, start_idx = get_unique_oen(rt_svc_descs[index].start_oen,
service->call_type); service->call_type);
assert(start_idx < MAX_RT_SVCS);
end_idx = get_unique_oen(rt_svc_descs[index].end_oen, end_idx = get_unique_oen(rt_svc_descs[index].end_oen,
service->call_type); service->call_type);
assert(end_idx < MAX_RT_SVCS);
for (; start_idx <= end_idx; start_idx++) for (; start_idx <= end_idx; start_idx++)
rt_svc_descs_indices[start_idx] = index; rt_svc_descs_indices[start_idx] = index;
} }
......
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