All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kernel-fitimage: Don't use unit addresses on FIT
@ 2021-02-21 19:22 Klaus Heinrich Kiwi
  2021-02-22  8:24 ` [OE-core] " Richard Purdie
  0 siblings, 1 reply; 7+ messages in thread
From: Klaus Heinrich Kiwi @ 2021-02-21 19:22 UTC (permalink / raw)
  To: openembedded-core; +Cc: Klaus Heinrich Kiwi

Das U-Boot 2021.4-rc1 has the following commit:

    commit 3f04db891a353f4b127ed57279279f851c6b4917
    Author: Simon Glass <sjg@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 <klaus@linux.vnet.ibm.com>
---
 meta/classes/kernel-fitimage.bbclass | 40 ++++++++++++++--------------
 1 file changed, 20 insertions(+), 20 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}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [OE-core] [PATCH] kernel-fitimage: Don't use unit addresses on FIT
  2021-02-21 19:22 [PATCH] kernel-fitimage: Don't use unit addresses on FIT Klaus Heinrich Kiwi
@ 2021-02-22  8:24 ` Richard Purdie
  2021-02-22 18:38   ` [PATCH v2] " Klaus Heinrich Kiwi
  2021-02-22 18:42   ` [OE-core] [PATCH] " Klaus Heinrich Kiwi
  0 siblings, 2 replies; 7+ messages in thread
From: Richard Purdie @ 2021-02-22  8:24 UTC (permalink / raw)
  To: Klaus Heinrich Kiwi, openembedded-core

On Sun, 2021-02-21 at 16:22 -0300, Klaus Heinrich Kiwi wrote:
> Das U-Boot 2021.4-rc1 has the following commit:
> 
>     commit 3f04db891a353f4b127ed57279279f851c6b4917
>     Author: Simon Glass <sjg@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 <klaus@linux.vnet.ibm.com>
> ---
>  meta/classes/kernel-fitimage.bbclass | 40 ++++++++++++++--------------
>  1 file changed, 20 insertions(+), 20 deletions(-)

This caused some tests to fail:

https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/1855/steps/15/logs/stdio

Do we need to update the tests as well?

Cheers,

Richard


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] kernel-fitimage: Don't use unit addresses on FIT
  2021-02-22  8:24 ` [OE-core] " Richard Purdie
@ 2021-02-22 18:38   ` Klaus Heinrich Kiwi
  2021-05-31 14:59     ` [OE-core] " Frieder Schrempf
  2021-02-22 18:42   ` [OE-core] [PATCH] " Klaus Heinrich Kiwi
  1 sibling, 1 reply; 7+ messages in thread
From: Klaus Heinrich Kiwi @ 2021-02-22 18:38 UTC (permalink / raw)
  To: openembedded-core; +Cc: Klaus Heinrich Kiwi

Das U-Boot 2021.4-rc1 has the following commit:

    commit 3f04db891a353f4b127ed57279279f851c6b4917
    Author: Simon Glass <sjg@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 <klaus@linux.vnet.ibm.com>
---

Notes:
    V2 Notes:
      - Adjusted testcases
        (reported by Richard Purdie <richard.purdie@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', 'fdt@am335x-boneblack.dtb'],
-            ['/', 'images', 'fdt@am335x-boneblack.dtb', 'signature@1'],
-            ['/', 'configurations', 'conf@am335x-boneblack.dtb'],
-            ['/', 'configurations', 'conf@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('fdt@am335x-boneblack.dtb', signed_sections)
-        self.assertIn('conf@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:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [OE-core] [PATCH] kernel-fitimage: Don't use unit addresses on FIT
  2021-02-22  8:24 ` [OE-core] " Richard Purdie
  2021-02-22 18:38   ` [PATCH v2] " Klaus Heinrich Kiwi
@ 2021-02-22 18:42   ` Klaus Heinrich Kiwi
  1 sibling, 0 replies; 7+ messages in thread
From: Klaus Heinrich Kiwi @ 2021-02-22 18:42 UTC (permalink / raw)
  To: Richard Purdie, openembedded-core


> 
> This caused some tests to fail:
> 
> https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/1855/steps/15/logs/stdio
> 
> Do we need to update the tests as well?

Thanks, I missed that completely. Adjusted the testcases for V2 and, even if locally I'm
seeing a strange FAIL on the sign test with UBOOT_MKIMAGE_SIGN_ARGS not showing-up, I think
it is unrelated and perhaps something of my environment (tested on another environment
that succeeded).

Sent a V2.
  
  -Klaus

-- 
Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [OE-core] [PATCH v2] kernel-fitimage: Don't use unit addresses on FIT
  2021-02-22 18:38   ` [PATCH v2] " Klaus Heinrich Kiwi
@ 2021-05-31 14:59     ` Frieder Schrempf
  2021-05-31 15:59       ` Steve Sakoman
  0 siblings, 1 reply; 7+ messages in thread
From: Frieder Schrempf @ 2021-05-31 14:59 UTC (permalink / raw)
  To: Steve Sakoman; +Cc: klaus, openembedded-core

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 <sjg@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 <klaus@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.purdie@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', 'fdt@am335x-boneblack.dtb'],
> -            ['/', 'images', 'fdt@am335x-boneblack.dtb', 'signature@1'],
> -            ['/', 'configurations', 'conf@am335x-boneblack.dtb'],
> -            ['/', 'configurations', 'conf@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('fdt@am335x-boneblack.dtb', signed_sections)
> -        self.assertIn('conf@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:
> 
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [OE-core] [PATCH v2] kernel-fitimage: Don't use unit addresses on FIT
  2021-05-31 14:59     ` [OE-core] " Frieder Schrempf
@ 2021-05-31 15:59       ` Steve Sakoman
  2021-06-01  9:15         ` Frieder Schrempf
  0 siblings, 1 reply; 7+ messages in thread
From: Steve Sakoman @ 2021-05-31 15:59 UTC (permalink / raw)
  To: Frieder Schrempf; +Cc: klaus, Patches and discussions about the oe-core layer

On Mon, May 31, 2021 at 4:59 AM Frieder Schrempf
<frieder.schrempf@kontron.de> wrote:
>
> 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 <sjg@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 <klaus@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?

I can't do a clean cherry-pick of this patch.  If you'd like to submit
dunfell versions of these two patches I will add them to my testing
queue.

Steve

>
> Thanks
> Frieder
>
> > ---
> >
> > Notes:
> >     V2 Notes:
> >       - Adjusted testcases
> >         (reported by Richard Purdie <richard.purdie@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', 'fdt@am335x-boneblack.dtb'],
> > -            ['/', 'images', 'fdt@am335x-boneblack.dtb', 'signature@1'],
> > -            ['/', 'configurations', 'conf@am335x-boneblack.dtb'],
> > -            ['/', 'configurations', 'conf@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('fdt@am335x-boneblack.dtb', signed_sections)
> > -        self.assertIn('conf@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:
> >
> >
> >
> >
> >
>
> 
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [OE-core] [PATCH v2] kernel-fitimage: Don't use unit addresses on FIT
  2021-05-31 15:59       ` Steve Sakoman
@ 2021-06-01  9:15         ` Frieder Schrempf
  0 siblings, 0 replies; 7+ messages in thread
From: Frieder Schrempf @ 2021-06-01  9:15 UTC (permalink / raw)
  To: Steve Sakoman; +Cc: klaus, Patches and discussions about the oe-core layer

On 31.05.21 17:59, Steve Sakoman wrote:
> On Mon, May 31, 2021 at 4:59 AM Frieder Schrempf
> <frieder.schrempf@kontron.de> wrote:
>>
>> 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 <sjg@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 <klaus@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?
> 
> I can't do a clean cherry-pick of this patch.  If you'd like to submit
> dunfell versions of these two patches I will add them to my testing
> queue.

Sorry, I should have looked at this more closely. I just sent a backport patch for dunfell. The second patch covers code that is not available in dunfell, so it's not needed anyway.

> 
> Steve
> 
>>
>> Thanks
>> Frieder
>>
>>> ---
>>>
>>> Notes:
>>>     V2 Notes:
>>>       - Adjusted testcases
>>>         (reported by Richard Purdie <richard.purdie@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', 'fdt@am335x-boneblack.dtb'],
>>> -            ['/', 'images', 'fdt@am335x-boneblack.dtb', 'signature@1'],
>>> -            ['/', 'configurations', 'conf@am335x-boneblack.dtb'],
>>> -            ['/', 'configurations', 'conf@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('fdt@am335x-boneblack.dtb', signed_sections)
>>> -        self.assertIn('conf@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:
>>>
>>>
>>>
>>>
>>>
>>
>> 
>>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-06-01  9:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-21 19:22 [PATCH] kernel-fitimage: Don't use unit addresses on FIT Klaus Heinrich Kiwi
2021-02-22  8:24 ` [OE-core] " Richard Purdie
2021-02-22 18:38   ` [PATCH v2] " Klaus Heinrich Kiwi
2021-05-31 14:59     ` [OE-core] " Frieder Schrempf
2021-05-31 15:59       ` Steve Sakoman
2021-06-01  9:15         ` Frieder Schrempf
2021-02-22 18:42   ` [OE-core] [PATCH] " Klaus Heinrich Kiwi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.