SPM: Implement version check for stateless service
Encode the service version and stateless indicator into
stateless handle, validate the stateless handle indicator,
version and index before using.
Change-Id: Id5f388f938a758803863958dfbb0c0011c2e1f04
Signed-off-by: Mingyang Sun <mingyang.sun@arm.com>
diff --git a/tools/tfm_parse_manifest_list.py b/tools/tfm_parse_manifest_list.py
index d4a0d80..cfc6bfc 100644
--- a/tools/tfm_parse_manifest_list.py
+++ b/tools/tfm_parse_manifest_list.py
@@ -231,12 +231,23 @@
# Auto-allocate stateless handle
for i in range(0, static_handle_max_num):
- if reordered_stateless_list[i] == None:
+ if reordered_stateless_list[i] == None and len(stateless_services) > 0:
service = stateless_services.pop(0)
service['stateless_handle'] = i + 1
reordered_stateless_list[i] = service
- if len(stateless_services) == 0:
- break
+ """
+ Encode stateless flag and version into stateless handle
+ bit 30: stateless handle indicator
+ bit 15-8: stateless service version
+ bit 7-0: stateless handle index
+ """
+ if reordered_stateless_list[i] != None:
+ stateless_handle_value = reordered_stateless_list[i]['stateless_handle']
+ stateless_flag = 1 << 30
+ stateless_handle_value |= stateless_flag
+ stateless_version = (reordered_stateless_list[i]['version'] & 0xFF) << 8
+ stateless_handle_value |= stateless_version
+ reordered_stateless_list[i]['stateless_handle'] = '0x%08x' % stateless_handle_value
return reordered_stateless_list