From: Quentin Schulz <quentin.sch...@cherry.de> mkimage doesn't fail if it cannot find the public key but it prints to stderr. Considering that btool.run() discards stderr, it means binman happily returns an unsigned FIT and doesn't tell you something went wrong.
Binman will actually find the file if there's a path in the key-name-hint property but the current logic expects key-name-hint to be a filename and thus returns the dirname of the found path for the key, but with the original key-name-hint appended. This means we can have the following: - key-name-hint = "keys/dev" - name = "/home/qschulz/work/upstream/u-boot/keys/" so we pass /home/qschulz/work/upstream/u-boot/keys/ to the -k option of mkimage but the FIT still contains "keys/dev" in key-name-hint which means mkimage will try to find the key at /home/qschulz/work/upstream/u-boot/keys/keys/, which doesn't exist. Let's assume paths are simply not supported (it is named key-name-hint and not key-path-hint after all) and raise an error if the property contains a path so that the build fails and not quietly. Fixes: 133c000ca334 ("binman: implement signing FIT images during image build") Signed-off-by: Quentin Schulz <quentin.sch...@cherry.de> --- tools/binman/etype/fit.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py index 803fb66ea838f1f02da7fa42c121057de31ec2ef..c1d964aecfd0f52e7db72fb5ab41f6482fbf1b93 100644 --- a/tools/binman/etype/fit.py +++ b/tools/binman/etype/fit.py @@ -557,6 +557,7 @@ class Entry_fit(Entry_section): Raises: ValueError: Filename 'rsa2048.key' not found in input path ValueError: Multiple key paths found + ValueError: 'dir/rsa2048.key' is a path not a filename """ def _find_keys_dir(node): for subnode in node.subnodes: @@ -565,6 +566,8 @@ class Entry_fit(Entry_section): if subnode.props.get('key-name-hint') is None: continue hint = subnode.props['key-name-hint'].value + if '/' in hint: + self.Raise(f"'{hint}' is a path not a filename") name = tools.get_input_filename( f"{hint}.key" if subnode.name.startswith('signature') else f"{hint}.bin") -- 2.49.0