[PATCH] binman: Skip processing "hash" subnodes of FIT subsections
Simon Glass
sjg at chromium.org
Wed Feb 9 02:08:30 CET 2022
Hi Alper,
On Tue, 8 Feb 2022 at 16:07, Alper Nebi Yasak <alpernebiyasak at gmail.com> wrote:
>
> Binman's FIT entry type can have image subentries with "hash" subnodes
> intended to be processed by mkimage, but not binman. However, the Entry
> class and any subclass that reuses its implementation tries to process
> these unconditionally. This can lead to an error when boards specify
> hash algorithms that binman doesn't support, but mkimage supports.
>
> Let entries skip processing these "hash" subnodes based on an instance
> variable, and set this instance variable for FIT subsections. Also
> re-enable processing of calculated and missing properties of FIT entries
> which was disabled to mitigate this issue.
>
> Signed-off-by: Alper Nebi Yasak <alpernebiyasak at gmail.com>
> ---
> This applies on top of u-boot-dm/master, and does not resend my
> "binman: Update image positions of FIT subentries" patch [1] which
> should be applied on top of this.
>
> [1] https://patchwork.ozlabs.org/project/uboot/patch/20220207220809.4497-6-alpernebiyasak@gmail.com/
Perfect, thanks
>
> tools/binman/entry.py | 15 +++++++++++----
> tools/binman/etype/fit.py | 12 ++----------
> 2 files changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/tools/binman/entry.py b/tools/binman/entry.py
> index dc26f8f167b0..6f98353c8569 100644
> --- a/tools/binman/entry.py
> +++ b/tools/binman/entry.py
> @@ -78,6 +78,8 @@ class Entry(object):
> external: True if this entry contains an external binary blob
> bintools: Bintools used by this entry (only populated for Image)
> missing_bintools: List of missing bintools for this entry
> + update_hash: True if this entry's "hash" subnode should be
> + updated with a hash of the entry contents
> """
> def __init__(self, section, etype, node, name_prefix=''):
> # Put this here to allow entry-docs and help to work without libfdt
> @@ -111,6 +113,7 @@ def __init__(self, section, etype, node, name_prefix=''):
> self.allow_fake = False
> self.bintools = {}
> self.missing_bintools = []
> + self.update_hash = True
>
> @staticmethod
> def FindEntryClass(etype, expanded):
> @@ -315,9 +318,11 @@ def AddMissingProperties(self, have_image_pos):
>
> if self.compress != 'none':
> state.AddZeroProp(self._node, 'uncomp-size')
> - err = state.CheckAddHashProp(self._node)
> - if err:
> - self.Raise(err)
> +
> + if self.update_hash:
> + err = state.CheckAddHashProp(self._node)
> + if err:
> + self.Raise(err)
>
> def SetCalculatedProperties(self):
> """Set the value of device-tree properties calculated by binman"""
> @@ -333,7 +338,9 @@ def SetCalculatedProperties(self):
> state.SetInt(self._node, 'orig-size', self.orig_size, True)
> if self.uncomp_size is not None:
> state.SetInt(self._node, 'uncomp-size', self.uncomp_size)
> - state.CheckSetHashValue(self._node, self.GetData)
> +
> + if self.update_hash:
> + state.CheckSetHashValue(self._node, self.GetData)
>
> def ProcessFdt(self, fdt):
> """Allow entries to adjust the device tree
> diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
> index a56b0564f9a1..a979d0f1a613 100644
> --- a/tools/binman/etype/fit.py
> +++ b/tools/binman/etype/fit.py
> @@ -186,6 +186,8 @@ def _AddNode(base_node, depth, node):
> # 'data' property later.
> entry = Entry.Create(self.section, node, etype='section')
> entry.ReadNode()
> + # The hash subnodes here are for mkimage, not binman.
> + entry.update_hash = False
I know it is less Pythonic but I would like to have this be a function
in Entry, like SetUpdateHash(bool), so that it feels more like that
class has control over things.
> self._entries[rel_path] = entry
>
Also can you please add a test that uses a FIT containing hash{} nodes?
> for subnode in node.subnodes:
> @@ -294,13 +296,3 @@ def _BuildInput(self, fdt):
> def AddBintools(self, tools):
> super().AddBintools(tools)
> self.mkimage = self.AddBintool(tools, 'mkimage')
> -
> - def AddMissingProperties(self, have_image_pos):
> - # We don't want to interfere with any hash properties in the FIT, so
> - # disable this for now.
> - pass
> -
> - def SetCalculatedProperties(self):
> - # We don't want to interfere with any hash properties in the FIT, so
> - # disable this for now.
> - pass
> --
> 2.34.1
>
Regards,
Simon
More information about the U-Boot
mailing list