diff options
| -rw-r--r-- | meta/classes-recipe/uboot-sign.bbclass | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/meta/classes-recipe/uboot-sign.bbclass b/meta/classes-recipe/uboot-sign.bbclass index 96c47ab016..5c579a9fb0 100644 --- a/meta/classes-recipe/uboot-sign.bbclass +++ b/meta/classes-recipe/uboot-sign.bbclass | |||
| @@ -101,27 +101,69 @@ concat_dtb() { | |||
| 101 | binary="$2" | 101 | binary="$2" |
| 102 | 102 | ||
| 103 | if [ -e "${UBOOT_DTB_BINARY}" ]; then | 103 | if [ -e "${UBOOT_DTB_BINARY}" ]; then |
| 104 | # Re-sign the kernel in order to add the keys to our dtb | ||
| 105 | UBOOT_MKIMAGE_MODE="auto-conf" | ||
| 106 | # Signing individual images is not recommended as that | 104 | # Signing individual images is not recommended as that |
| 107 | # makes fitImage susceptible to mix-and-match attack. | 105 | # makes fitImage susceptible to mix-and-match attack. |
| 106 | # | ||
| 107 | # OE FIT_SIGN_INDIVIDUAL is implemented in an unusual manner, | ||
| 108 | # where the resulting signed fitImage contains both signed | ||
| 109 | # images and signed configurations. This is redundant. In | ||
| 110 | # order to prevent mix-and-match attack, it is sufficient | ||
| 111 | # to sign configurations. The FIT_SIGN_INDIVIDUAL = "1" | ||
| 112 | # support is kept to avoid breakage of existing layers, but | ||
| 113 | # it is highly recommended to avoid FIT_SIGN_INDIVIDUAL = "1", | ||
| 114 | # i.e. set FIT_SIGN_INDIVIDUAL = "0" . | ||
| 108 | if [ "${FIT_SIGN_INDIVIDUAL}" = "1" ] ; then | 115 | if [ "${FIT_SIGN_INDIVIDUAL}" = "1" ] ; then |
| 109 | UBOOT_MKIMAGE_MODE="auto" | 116 | # Sign dummy image images in order to |
| 117 | # add the image signing keys to our dtb | ||
| 118 | ${UBOOT_MKIMAGE_SIGN} \ | ||
| 119 | ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ | ||
| 120 | -f auto \ | ||
| 121 | -k "${UBOOT_SIGN_KEYDIR}" \ | ||
| 122 | -o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \ | ||
| 123 | -g "${UBOOT_SIGN_IMG_KEYNAME}" \ | ||
| 124 | -K "${UBOOT_DTB_BINARY}" \ | ||
| 125 | -d /dev/null \ | ||
| 126 | -r ${B}/unused.itb \ | ||
| 127 | ${UBOOT_MKIMAGE_SIGN_ARGS} | ||
| 110 | fi | 128 | fi |
| 129 | |||
| 130 | # Sign dummy image configurations in order to | ||
| 131 | # add the configuration signing keys to our dtb | ||
| 111 | ${UBOOT_MKIMAGE_SIGN} \ | 132 | ${UBOOT_MKIMAGE_SIGN} \ |
| 112 | ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ | 133 | ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ |
| 113 | -f $UBOOT_MKIMAGE_MODE \ | 134 | -f auto-conf \ |
| 114 | -k "${UBOOT_SIGN_KEYDIR}" \ | 135 | -k "${UBOOT_SIGN_KEYDIR}" \ |
| 115 | -o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \ | 136 | -o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \ |
| 116 | -g "${UBOOT_SIGN_IMG_KEYNAME}" \ | 137 | -g "${UBOOT_SIGN_KEYNAME}" \ |
| 117 | -K "${UBOOT_DTB_BINARY}" \ | 138 | -K "${UBOOT_DTB_BINARY}" \ |
| 118 | -d /dev/null \ | 139 | -d /dev/null \ |
| 119 | -r ${B}/unused.itb \ | 140 | -r ${B}/unused.itb \ |
| 120 | ${UBOOT_MKIMAGE_SIGN_ARGS} | 141 | ${UBOOT_MKIMAGE_SIGN_ARGS} |
| 121 | # Verify the kernel image and u-boot dtb | 142 | |
| 122 | ${UBOOT_FIT_CHECK_SIGN} \ | 143 | # Verify the dummy fitImage signature against u-boot.dtb |
| 123 | -k "${UBOOT_DTB_BINARY}" \ | 144 | # augmented using public key material. |
| 124 | -f ${B}/unused.itb | 145 | # |
| 146 | # This only works for FIT_SIGN_INDIVIDUAL = "0", because | ||
| 147 | # mkimage -f auto-conf does not support -F to extend the | ||
| 148 | # existing unused.itb , and instead rewrites unused.itb | ||
| 149 | # from scratch. | ||
| 150 | # | ||
| 151 | # Using two separate unused.itb for mkimage -f auto and | ||
| 152 | # mkimage -f auto-conf invocation above would not help, as | ||
| 153 | # the signature verification process below checks whether | ||
| 154 | # all keys inserted into u-boot.dtb /signature node pass | ||
| 155 | # the verification. Separate unused.itb would each miss one | ||
| 156 | # of the signatures. | ||
| 157 | # | ||
| 158 | # The FIT_SIGN_INDIVIDUAL = "1" support is kept to avoid | ||
| 159 | # breakage of existing layers, but it is highly recommended | ||
| 160 | # to not use FIT_SIGN_INDIVIDUAL = "1", i.e. set | ||
| 161 | # FIT_SIGN_INDIVIDUAL = "0" . | ||
| 162 | if [ "${FIT_SIGN_INDIVIDUAL}" != "1" ] ; then | ||
| 163 | ${UBOOT_FIT_CHECK_SIGN} \ | ||
| 164 | -k "${UBOOT_DTB_BINARY}" \ | ||
| 165 | -f ${B}/unused.itb | ||
| 166 | fi | ||
| 125 | cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED} | 167 | cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED} |
| 126 | fi | 168 | fi |
| 127 | 169 | ||
