summaryrefslogtreecommitdiff
path: root/Feature-support-EBS-sign-for-IMA-digest-list.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Feature-support-EBS-sign-for-IMA-digest-list.patch')
-rw-r--r--Feature-support-EBS-sign-for-IMA-digest-list.patch326
1 files changed, 0 insertions, 326 deletions
diff --git a/Feature-support-EBS-sign-for-IMA-digest-list.patch b/Feature-support-EBS-sign-for-IMA-digest-list.patch
deleted file mode 100644
index bd0fed0..0000000
--- a/Feature-support-EBS-sign-for-IMA-digest-list.patch
+++ /dev/null
@@ -1,326 +0,0 @@
-From 0449160c84daff8c557dee47a970e4f4837ff81d Mon Sep 17 00:00:00 2001
-From: Huaxin Lu <luhuaxin1@huawei.com>
-Date: Mon, 12 Dec 2022 00:16:01 +0800
-Subject: [PATCH] support EBS sign for IMA digest list
-
-Signed-off-by: Huaxin Lu <luhuaxin1@huawei.com>
-Signed-off-by: zhangguangzhi <zhangguangzhi3@huawei.com>
-
----
- brp-digest-list | 46 +++++-----
- brp-ebs-sign | 238 ++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 262 insertions(+), 22 deletions(-)
- create mode 100644 brp-ebs-sign
-
-diff --git a/brp-digest-list b/brp-digest-list
-index e698b7a..d1e2600 100644
---- a/brp-digest-list
-+++ b/brp-digest-list
-@@ -26,7 +26,6 @@ fi
- DIGEST_LIST_DIR=$RPM_BUILD_ROOT/$2/etc/ima/digest_lists
- mkdir -p $DIGEST_LIST_DIR
- mkdir -p $DIGEST_LIST_DIR.tlv
--mkdir -p $DIGEST_LIST_DIR.sig
-
- # Generate digest list for the kernel
- gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR -i l:policy \
-@@ -70,28 +69,31 @@ DIGEST_LIST_TLV_PATH="$DIGEST_LIST_DIR.tlv/0-metadata_list-compact_tlv-$(basenam
- chmod 644 $DIGEST_LIST_TLV_PATH
- echo $DIGEST_LIST_TLV_PATH
-
--if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
-- ! $(basename $BIN_PKG_FILES) =~ "debug" ]]; then
-- # Generate digest list for the user space parsers
-- LD_LIBRARY_PATH=$RPM_BUILD_ROOT/usr/lib64 \
-- $RPM_BUILD_ROOT/usr/bin/gen_digest_lists \
-- -d $DIGEST_LIST_DIR -t parser -f compact -m immutable \
-- -i I:$RPM_BUILD_ROOT/usr/libexec -o add -p -1 -i i:
--
-- f="$DIGEST_LIST_DIR/0-parser_list-compact-libexec"
-- [ -f $f ] || exit 0
--
-- chmod 644 $f
-- echo $f
-+#if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
-+# ! $(basename $BIN_PKG_FILES) =~ "debug" ]]; then
-+# Generate digest list for the user space parsers
-+
-+# do EBS sign
-+export PUBLISHER_HOST=$(grep PUBLISHER_HOST /lkp/scheduled/job.yaml | awk '{print $2}')
-+export PUBLISHER_PORT=$(grep PUBLISHER_PORT /lkp/scheduled/job.yaml | awk '{print $2}')
-+if [[ -n "$PUBLISHER_HOST" && -n "$PUBLISHER_PORT" ]]; then
-+ [ -f /usr/lib/rpm/brp-ebs-sign ] || exit 0
-+ sh /usr/lib/rpm/brp-ebs-sign --ima-digestlist $DIGEST_LIST_PATH 1>&2
-+ [ -f $DIGEST_LIST_PATH.sig ] || exit 0
-+ chmod 644 $DIGEST_LIST_PATH.sig
-+ mv $DIGEST_LIST_PATH.sig $DIGEST_LIST_PATH
-+ exit 0
-+fi
-
-- [ -f /usr/lib/rpm/brp-suse.d/brp-99-pesign ] || exit 0
-+# do OBS sign
-+[ -f /usr/lib/rpm/brp-suse.d/brp-99-pesign ] || exit 0
-
-- export BRP_PESIGN_FILES="$2/etc/ima/digest_lists/*"
-- export RPM_BUILD_ROOT
-- export RPM_PACKAGE_NAME="digest-list-tools"
-- export RPM_SOURCE_DIR="$(rpm --eval %_topdir)/SOURCES"
-+export BRP_PESIGN_FILES="$2/etc/ima/digest_lists/*"
-+export RPM_BUILD_ROOT
-+export RPM_PACKAGE_NAME="digest-list-tools"
-+export RPM_SOURCE_DIR="$(rpm --eval %_topdir)/SOURCES"
-
-- if [ -f "/usr/lib/rpm/brp-suse.d/brp-99-pesign" ]; then
-- /usr/lib/rpm/brp-suse.d/brp-99-pesign &> /dev/null
-- fi
-+if [ -f "/usr/lib/rpm/brp-suse.d/brp-99-pesign" ]; then
-+ /usr/lib/rpm/brp-suse.d/brp-99-pesign &> /dev/null
- fi
-+#fi
-diff --git a/brp-ebs-sign b/brp-ebs-sign
-new file mode 100644
-index 0000000..a7a83e5
---- /dev/null
-+++ b/brp-ebs-sign
-@@ -0,0 +1,238 @@
-+#!/bin/bash
-+
-+INPUT_TYPE=$1
-+INPUT_FILE=$2
-+SIGN_FILE=$INPUT_FILE
-+PROJECT_CONF="/lkp/scheduled/job.yaml"
-+POST_ADDR=""
-+POST_FILE_SHA256=""
-+POST_KEY_NAME=""
-+POST_KEY_TYPE=""
-+POST_FILE_TYPE=""
-+POST_SIGN_TYPE=""
-+POST_JOB_ID=""
-+POST_OS_ORIJECT=""
-+CONFIG_RETEST_COUNT=5
-+SIGN_RESULT=0
-+FAILED_SIGN_PERMISSION_DENIED=2
-+
-+# Tool functions for JSON
-+get_json_value(){
-+ echo "$1" | \
-+ awk -F "[{,:}]" '{for(i=1;i<NF;i++){if($i~"'$2'"){print $(i+1)}}}' | \
-+ sed 's/\"//g'
-+}
-+
-+get_post_json() {
-+ printf '{'
-+ printf '"file_sha256":"%s",' $POST_FILE_SHA256
-+ printf '"key_name":"%s",' $POST_KEY_NAME
-+ printf '"key_type":"%s",' $POST_KEY_TYPE
-+ printf '"file_type":"%s",' $POST_FILE_TYPE
-+ printf '"sign_type":"%s",' $POST_SIGN_TYPE
-+ printf '"job_id":"%s",' $POST_JOB_ID
-+ printf '"os_project":"%s"' $POST_OS_ORIJECT
-+ printf '}'
-+}
-+
-+# Prepare sign functions for each sign type
-+module_sign_pre() {
-+ if [[ "$INPUT_FILE" != *.ko ]]; then
-+ echo "The module file must has the .ko extension"
-+ return 1
-+ fi
-+
-+ SIGN_FILE="$INPUT_FILE"
-+ POST_KEY_NAME="openeuler-kernel-module-ee"
-+ POST_KEY_TYPE="x509ee"
-+ POST_FILE_TYPE="kernel-module"
-+ POST_SIGN_TYPE="cms"
-+}
-+
-+ima_digestlist_sign_pre() {
-+ cp -f $INPUT_FILE $INPUT_FILE.ko
-+ SIGN_FILE="$INPUT_FILE.ko"
-+ POST_KEY_NAME="openeuler-ima-ee"
-+ POST_KEY_TYPE="x509ee"
-+ POST_FILE_TYPE="kernel-module"
-+ POST_SIGN_TYPE="cms"
-+}
-+
-+efi_sign_pre() {
-+ SIGN_FILE="$INPUT_FILE"
-+ POST_KEY_NAME="default-x509ee"
-+ POST_KEY_TYPE="x509ee"
-+ POST_FILE_TYPE="efi-image"
-+ POST_SIGN_TYPE="authenticode"
-+}
-+
-+kernel_sign_pre() {
-+ SIGN_FILE="$INPUT_FILE"
-+ POST_KEY_NAME="default-x509ee"
-+ POST_KEY_TYPE="x509ee"
-+ POST_FILE_TYPE="efi-image"
-+ POST_SIGN_TYPE="authenticode"
-+}
-+
-+# Post sign functions for each sign type
-+module_sign_post() {
-+ :
-+}
-+
-+ima_digestlist_sign_post() {
-+ rm -f $INPUT_FILE.ko
-+}
-+
-+efi_sign_post() {
-+ :
-+}
-+
-+kernel_sign_post() {
-+ :
-+}
-+
-+# Global configuration
-+sign_config() {
-+ if [ -z "$INPUT_TYPE" ] || [ -z "$INPUT_FILE" ]; then
-+ echo "Please input the sign type and file"
-+ exit 1
-+ fi
-+
-+ if [ ! -f "$INPUT_FILE" ]; then
-+ echo "The input file is invalid"
-+ exit 1
-+ fi
-+
-+ POST_FILE_SHA256=$(sha256sum "$INPUT_FILE" | awk '{ print $1 }')
-+ if [ $? -ne 0 ]; then
-+ echo "Failed to calculate file hash"
-+ fi
-+
-+ PUBLISHER_HOST=$(grep PUBLISHER_HOST $PROJECT_CONF | awk '{print $2}')
-+ PUBLISHER_PORT=$(grep PUBLISHER_PORT $PROJECT_CONF | awk '{print $2}')
-+ if [ -z "$PUBLISHER_HOST" ] || [ -z "$PUBLISHER_PORT" ]; then
-+ echo "Please set PUBLISHER_HOST and PUBLISHER_PORT"
-+ exit 1
-+ fi
-+
-+ POST_ADDR="http://${PUBLISHER_HOST}:${PUBLISHER_PORT}/code-sign"
-+
-+ POST_JOB_ID="$(grep -rwn 'id\:' $PROJECT_CONF | awk '{print $2}')"
-+ POST_OS_ORIJECT="$(grep -rwn 'os_project\:' $PROJECT_CONF | awk '{print $2}')"
-+ if [ -z "$POST_JOB_ID" ] || [ -z "$POST_OS_ORIJECT" ]; then
-+ echo "Failed to get POST_JOB_ID and POST_OS_ORIJECT"
-+ exit 1
-+ fi
-+}
-+
-+sign_pre() {
-+ sign_config
-+
-+ case $INPUT_TYPE in
-+ --efi)
-+ efi_sign_pre
-+ ;;
-+ --module)
-+ module_sign_pre
-+ ;;
-+ --ima-digestlist)
-+ ima_digestlist_sign_pre
-+ ;;
-+ --kernel)
-+ kernel_sign_pre
-+ ;;
-+ *)
-+ echo "Unsupported sign type: $INPUT_TYPE"
-+ exit 1
-+ ;;
-+ esac
-+}
-+
-+sign() {
-+ # 1. send the request to the sign service
-+ # echo "curl "$POST_ADDR" \
-+ # -F "file=@$SIGN_FILE" \
-+ # -F "data=$(get_post_json);type=application/json""
-+ req="$(curl "$POST_ADDR" \
-+ -F "file=@$SIGN_FILE" \
-+ -F "data=$(get_post_json);type=application/json")"
-+ if [ $? -ne 0 ]; then
-+ echo "Failed to post the sign service"
-+ return 1
-+ fi
-+
-+ req_err_msg=$(get_json_value "$req" "err_msg")
-+ if [ -n "$req_err_msg" ]; then
-+ echo "Failed, err_msg: [$req_err_msg]"
-+ if [ "$req_err_msg" == "SIGN_PERMISSION_DENIED" ]; then
-+ return $FAILED_SIGN_PERMISSION_DENIED
-+ fi
-+ return 1
-+ fi
-+
-+ # 2. write the file content
-+ encoded_file_content=$(get_json_value "$req" "encoded_file_content")
-+ if [ $? -ne 0 ]; then
-+ echo "Failed to get encoded file content"
-+ return 1
-+ fi
-+
-+ echo -ne "$encoded_file_content" | base64 -d > $INPUT_FILE.sig
-+ if [ $? -ne 0 ]; then
-+ echo "Failed to write the signed file"
-+ return 1
-+ fi
-+
-+ # for test
-+ # cp -f $INPUT_FILE $INPUT_FILE.sig
-+ # req="{file_sha256:41c68fca7b3870cc9ef13a828a74af933bd8e4ff345fcfa316}"
-+
-+ # 3. check the hash
-+ sha256_cal=$(sha256sum $INPUT_FILE.sig | awk '{print $1}')
-+ sha256_get=$(get_json_value "$req" "file_sha256" | tr '[:upper:]' '[:lower:]')
-+ if [ "$sha256_cal" != "$sha256_get" ]; then
-+ echo "Failed to verify the hash value"
-+ return 1
-+ fi
-+}
-+
-+sign_post() {
-+ case $INPUT_TYPE in
-+ --efi)
-+ efi_sign_post
-+ ;;
-+ --module)
-+ module_sign_post
-+ ;;
-+ --ima-digestlist)
-+ ima_digestlist_sign_post
-+ ;;
-+ --kernel)
-+ kernel_sign_post
-+ ;;
-+ esac
-+}
-+
-+# Main function
-+sign_pre
-+
-+for ((i=1; i<=$CONFIG_RETEST_COUNT; i++)); do
-+ sign
-+ ret_sign=$?
-+ if [ $ret_sign -eq 0 ]; then
-+ echo "Succeed to sign file"
-+ break;
-+ elif [ $ret_sign -eq $FAILED_SIGN_PERMISSION_DENIED ]; then
-+ echo "Failed to sign file, permission denied"
-+ SIGN_RESULT=$FAILED_SIGN_PERMISSION_DENIED
-+ break;
-+ elif [ $i -ne $CONFIG_RETEST_COUNT ]; then
-+ echo "Failed to sign file, try again"
-+ elif [ $i -eq $CONFIG_RETEST_COUNT ]; then
-+ echo "Failed to sign file"
-+ SIGN_RESULT=1
-+ fi
-+done
-+
-+sign_post
-+exit $SIGN_RESULT
---
-2.33.0
-