From f0e15ddca303322764e17524396cb2da2c1c5ccc Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Mon, 2 Dec 2024 17:29:06 +0000 Subject: [PATCH] fix(tlc): relax entry addition from YAML files Relax entry addition from YAML files to allow the addition of entries not known to the tool. It is not possible to keep track of every possible TE, and a user might want to add an entry that hasn't yet been specified. Change-Id: Ib5d227bc41cd3dd8b530699c1bab3165a3114a3c Signed-off-by: Harrison Mutai --- tools/tlc/tlc/tl.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tools/tlc/tlc/tl.py b/tools/tlc/tlc/tl.py index 30e6d9ece..dfbea9fc5 100644 --- a/tools/tlc/tlc/tl.py +++ b/tools/tlc/tlc/tl.py @@ -331,8 +331,6 @@ class TransferList: tag_id = entry["tag_id"] if tag_id in tag_name_to_tag_id: tag_id = tag_name_to_tag_id[tag_id] - te_format = transfer_entry_formats[tag_id] - tag_name = te_format["tag_name"] align = entry.get("alignment", None) @@ -340,23 +338,27 @@ class TransferList: return self.add_transfer_entry_from_file( tag_id, entry["blob_file_path"], data_align=align ) - elif tag_name == "tpm_event_log_table": - with open(entry["event_log"], "rb") as f: - event_log_data = f.read() - - flags_bytes = entry["flags"].to_bytes(4, "little") - data = flags_bytes + event_log_data - - return self.add_transfer_entry(tag_id, data, data_align=align) - elif tag_name == "exec_ep_info": - return self.add_entry_point_info_transfer_entry(entry) - elif "format" in te_format and "fields" in te_format: - fields = [entry[field] for field in te_format["fields"]] - return self.add_transfer_entry_from_struct_format( - tag_id, te_format["format"], *fields - ) else: - raise ValueError(f"Invalid transfer entry {entry}.") + te_format = transfer_entry_formats[tag_id] + tag_name = te_format["tag_name"] + + if tag_name == "tpm_event_log_table": + with open(entry["event_log"], "rb") as f: + event_log_data = f.read() + + flags_bytes = entry["flags"].to_bytes(4, "little") + data = flags_bytes + event_log_data + + return self.add_transfer_entry(tag_id, data, data_align=align) + elif tag_name == "exec_ep_info": + return self.add_entry_point_info_transfer_entry(entry) + elif "format" in te_format and "fields" in te_format: + fields = [entry[field] for field in te_format["fields"]] + return self.add_transfer_entry_from_struct_format( + tag_id, te_format["format"], *fields + ) + else: + raise ValueError(f"Invalid transfer entry {entry}.") def add_transfer_entry_from_file( self, tag_id: int, path: Path, data_align: int = 0