Hi Steve, On 22.02.21 19:38, Klaus Heinrich Kiwi via lists.openembedded.org wrote: > Das U-Boot 2021.4-rc1 has the following commit: > > commit 3f04db891a353f4b127ed57279279f851c6b4917 > Author: Simon Glass <s...@chromium.org> > Date: Mon Feb 15 17:08:12 2021 -0700 > > image: Check for unit addresses in FITs > > Using unit addresses in a FIT is a security risk. Add a check for > this and disallow it. > > CVE-2021-27138 > > Adjust the kernel-fitimage.bbclass accordingly to not use unit > addresses. This changte is required before we can bump U-Boot to 2021.4. > > Signed-off-by: Klaus Heinrich Kiwi <kl...@linux.vnet.ibm.com>
Could you pick this and the follow-up patch 0ef3a5e2a6d4 ("kernel-fitimage.bbclass: drop unit addresses from bootscr sections") to the dunfell branch to fix FIT images on U-Boot 2021.01 or later with dunfell? Thanks Frieder > --- > > Notes: > V2 Notes: > - Adjusted testcases > (reported by Richard Purdie <richard.pur...@linuxfoundation.org>) > > meta/classes/kernel-fitimage.bbclass | 40 ++++++++++++------------ > meta/lib/oeqa/selftest/cases/fitimage.py | 36 ++++++++++----------- > 2 files changed, 38 insertions(+), 38 deletions(-) > > diff --git a/meta/classes/kernel-fitimage.bbclass > b/meta/classes/kernel-fitimage.bbclass > index 2414870817..f5082c93df 100644 > --- a/meta/classes/kernel-fitimage.bbclass > +++ b/meta/classes/kernel-fitimage.bbclass > @@ -161,7 +161,7 @@ fitimage_emit_section_kernel() { > fi > > cat << EOF >> ${1} > - kernel@${2} { > + kernel-${2} { > description = "Linux kernel"; > data = /incbin/("${3}"); > type = "kernel"; > @@ -170,7 +170,7 @@ fitimage_emit_section_kernel() { > compression = "${4}"; > load = <${UBOOT_LOADADDRESS}>; > entry = <${ENTRYPOINT}>; > - hash@1 { > + hash-1 { > algo = "${kernel_csum}"; > }; > }; > @@ -179,7 +179,7 @@ EOF > if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a > -n "${kernel_sign_keyname}" ] ; then > sed -i '$ d' ${1} > cat << EOF >> ${1} > - signature@1 { > + signature-1 { > algo = "${kernel_csum},${kernel_sign_algo}"; > key-name-hint = "${kernel_sign_keyname}"; > }; > @@ -210,14 +210,14 @@ fitimage_emit_section_dtb() { > dtb_loadline="load = <${UBOOT_DTB_LOADADDRESS}>;" > fi > cat << EOF >> ${1} > - fdt@${2} { > + fdt-${2} { > description = "Flattened Device Tree blob"; > data = /incbin/("${3}"); > type = "flat_dt"; > arch = "${UBOOT_ARCH}"; > compression = "none"; > ${dtb_loadline} > - hash@1 { > + hash-1 { > algo = "${dtb_csum}"; > }; > }; > @@ -226,7 +226,7 @@ EOF > if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a > -n "${dtb_sign_keyname}" ] ; then > sed -i '$ d' ${1} > cat << EOF >> ${1} > - signature@1 { > + signature-1 { > algo = "${dtb_csum},${dtb_sign_algo}"; > key-name-hint = "${dtb_sign_keyname}"; > }; > @@ -283,7 +283,7 @@ fitimage_emit_section_setup() { > setup_csum="${FIT_HASH_ALG}" > > cat << EOF >> ${1} > - setup@${2} { > + setup-${2} { > description = "Linux setup.bin"; > data = /incbin/("${3}"); > type = "x86_setup"; > @@ -292,7 +292,7 @@ fitimage_emit_section_setup() { > compression = "none"; > load = <0x00090000>; > entry = <0x00090000>; > - hash@1 { > + hash-1 { > algo = "${setup_csum}"; > }; > }; > @@ -321,7 +321,7 @@ fitimage_emit_section_ramdisk() { > fi > > cat << EOF >> ${1} > - ramdisk@${2} { > + ramdisk-${2} { > description = "${INITRAMFS_IMAGE}"; > data = /incbin/("${3}"); > type = "ramdisk"; > @@ -330,7 +330,7 @@ fitimage_emit_section_ramdisk() { > compression = "none"; > ${ramdisk_loadline} > ${ramdisk_entryline} > - hash@1 { > + hash-1 { > algo = "${ramdisk_csum}"; > }; > }; > @@ -339,7 +339,7 @@ EOF > if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a > -n "${ramdisk_sign_keyname}" ] ; then > sed -i '$ d' ${1} > cat << EOF >> ${1} > - signature@1 { > + signature-1 { > algo = > "${ramdisk_csum},${ramdisk_sign_algo}"; > key-name-hint = "${ramdisk_sign_keyname}"; > }; > @@ -377,7 +377,7 @@ fitimage_emit_section_config() { > # Test if we have any DTBs at all > sep="" > conf_desc="" > - conf_node="conf@" > + conf_node="conf-" > kernel_line="" > fdt_line="" > ramdisk_line="" > @@ -396,19 +396,19 @@ fitimage_emit_section_config() { > if [ -n "${kernel_id}" ]; then > conf_desc="Linux kernel" > sep=", " > - kernel_line="kernel = \"kernel@${kernel_id}\";" > + kernel_line="kernel = \"kernel-${kernel_id}\";" > fi > > if [ -n "${dtb_image}" ]; then > conf_desc="${conf_desc}${sep}FDT blob" > sep=", " > - fdt_line="fdt = \"fdt@${dtb_image}\";" > + fdt_line="fdt = \"fdt-${dtb_image}\";" > fi > > if [ -n "${ramdisk_id}" ]; then > conf_desc="${conf_desc}${sep}ramdisk" > sep=", " > - ramdisk_line="ramdisk = \"ramdisk@${ramdisk_id}\";" > + ramdisk_line="ramdisk = \"ramdisk-${ramdisk_id}\";" > fi > > if [ -n "${bootscr_id}" ]; then > @@ -419,16 +419,16 @@ fitimage_emit_section_config() { > > if [ -n "${config_id}" ]; then > conf_desc="${conf_desc}${sep}setup" > - setup_line="setup = \"setup@${config_id}\";" > + setup_line="setup = \"setup-${config_id}\";" > fi > > if [ "${default_flag}" = "1" ]; then > # default node is selected based on dtb ID if it is present, > # otherwise its selected based on kernel ID > if [ -n "${dtb_image}" ]; then > - default_line="default = \"conf@${dtb_image}\";" > + default_line="default = \"conf-${dtb_image}\";" > else > - default_line="default = \"conf@${kernel_id}\";" > + default_line="default = \"conf-${kernel_id}\";" > fi > fi > > @@ -441,7 +441,7 @@ fitimage_emit_section_config() { > ${ramdisk_line} > ${bootscr_line} > ${setup_line} > - hash@1 { > + hash-1 { > algo = "${conf_csum}"; > }; > EOF > @@ -478,7 +478,7 @@ EOF > sign_line="${sign_line};" > > cat << EOF >> ${its_file} > - signature@1 { > + signature-1 { > algo = "${conf_csum},${conf_sign_algo}"; > key-name-hint = "${conf_sign_keyname}"; > ${sign_line} > diff --git a/meta/lib/oeqa/selftest/cases/fitimage.py > b/meta/lib/oeqa/selftest/cases/fitimage.py > index 0958036a6f..02692de822 100644 > --- a/meta/lib/oeqa/selftest/cases/fitimage.py > +++ b/meta/lib/oeqa/selftest/cases/fitimage.py > @@ -69,9 +69,9 @@ FIT_DESC = "A model description" > 'type = "ramdisk";', > 'load = <0x88000000>;', > 'entry = <0x88000000>;', > - 'default = "conf@1";', > - 'kernel = "kernel@1";', > - 'ramdisk = "ramdisk@1";' > + 'default = "conf-1";', > + 'kernel = "kernel-1";', > + 'ramdisk = "ramdisk-1";' > ] > > with open(fitimage_its_path) as its_file: > @@ -137,12 +137,12 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" > "%s FIT image doesn't exist" % (fitimage_path)) > > req_itspaths = [ > - ['/', 'images', 'kernel@1'], > - ['/', 'images', 'kernel@1', 'signature@1'], > - ['/', 'images', 'f...@am335x-boneblack.dtb'], > - ['/', 'images', 'f...@am335x-boneblack.dtb', 'signature@1'], > - ['/', 'configurations', 'c...@am335x-boneblack.dtb'], > - ['/', 'configurations', 'c...@am335x-boneblack.dtb', > 'signature@1'], > + ['/', 'images', 'kernel-1'], > + ['/', 'images', 'kernel-1', 'signature-1'], > + ['/', 'images', 'fdt-am335x-boneblack.dtb'], > + ['/', 'images', 'fdt-am335x-boneblack.dtb', 'signature-1'], > + ['/', 'configurations', 'conf-am335x-boneblack.dtb'], > + ['/', 'configurations', 'conf-am335x-boneblack.dtb', > 'signature-1'], > ] > > itspath = [] > @@ -158,7 +158,7 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" > elif line.endswith('{'): > itspath.append(line[:-1].strip()) > itspaths.append(itspath[:]) > - elif itspath and itspath[-1] == 'signature@1': > + elif itspath and itspath[-1] == 'signature-1': > itsdotpath = '.'.join(itspath) > if not itsdotpath in sigs: > sigs[itsdotpath] = {} > @@ -182,7 +182,7 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" > } > > for itspath, values in sigs.items(): > - if 'conf@' in itspath: > + if 'conf-' in itspath: > reqsigvalues = reqsigvalues_config > else: > reqsigvalues = reqsigvalues_image > @@ -210,9 +210,9 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" > signed_sections[in_signed] = {} > key, value = line.split(':', 1) > signed_sections[in_signed][key.strip()] = value.strip() > - self.assertIn('kernel@1', signed_sections) > - self.assertIn('f...@am335x-boneblack.dtb', signed_sections) > - self.assertIn('c...@am335x-boneblack.dtb', signed_sections) > + self.assertIn('kernel-1', signed_sections) > + self.assertIn('fdt-am335x-boneblack.dtb', signed_sections) > + self.assertIn('conf-am335x-boneblack.dtb', signed_sections) > for signed_section, values in signed_sections.items(): > value = values.get('Sign algo', None) > self.assertEqual(value, 'sha256,rsa2048:oe-selftest', 'Signature > algorithm for %s not expected value' % signed_section) > @@ -298,7 +298,7 @@ FIT_HASH_ALG = "sha256" > its_lines = [line.strip() for line in its_file.readlines()] > > exp_node_lines = [ > - 'kernel@1 {', > + 'kernel-1 {', > 'description = "Linux kernel";', > 'data = /incbin/("' + initramfs_bundle + '");', > 'type = "kernel";', > @@ -307,7 +307,7 @@ FIT_HASH_ALG = "sha256" > 'compression = "none";', > 'load = <' + kernel_load + '>;', > 'entry = <' + kernel_entry + '>;', > - 'hash@1 {', > + 'hash-1 {', > 'algo = "' + fit_hash_alg +'";', > '};', > '};' > @@ -327,7 +327,7 @@ FIT_HASH_ALG = "sha256" > else: > self.assertTrue(test_passed == True,"kernel node does not > match expectation") > > - rx_configs = re.compile("^conf@.*") > + rx_configs = re.compile("^conf-.*") > its_configs = list(filter(rx_configs.match, its_lines)) > > for cfg_str in its_configs: > @@ -348,7 +348,7 @@ FIT_HASH_ALG = "sha256" > else: > print("kernel keyword found in the description line") > > - if 'kernel = "kernel@1";' not in node: > + if 'kernel = "kernel-1";' not in node: > self.assertTrue(test_passed == True,"kernel line not found") > break > else: > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#152472): https://lists.openembedded.org/g/openembedded-core/message/152472 Mute This Topic: https://lists.openembedded.org/mt/80833295/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-