From patchwork Wed Sep 6 21:24:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Magali Lemes X-Patchwork-Id: 1830558 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=aXr5QPD3; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=185.125.189.65; helo=lists.ubuntu.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=patchwork.ozlabs.org) Received: from lists.ubuntu.com (lists.ubuntu.com [185.125.189.65]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RgwQ11xGDz1ynb for ; Thu, 7 Sep 2023 07:25:12 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=lists.ubuntu.com) by lists.ubuntu.com with esmtp (Exim 4.86_2) (envelope-from ) id 1qe01B-0006gX-95; Wed, 06 Sep 2023 21:24:57 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by lists.ubuntu.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1qe018-0006fe-Ru for kernel-team@lists.ubuntu.com; Wed, 06 Sep 2023 21:24:55 +0000 Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 97A2F3F42A for ; Wed, 6 Sep 2023 21:24:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1694035494; bh=sIqsP7Vqh+qah9Cz3acnqv0kkR8FTtzTM9u+hcYB5e8=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aXr5QPD36XEj2SnzjPD3SHJnvLZD0ZQE28+4M/arpbyKt51FyuoiHE0SCd0BhdOq+ FuVQbt6w4Wt6SHz9Vbt/Se/34gfEBkXVpOcbxLWpZ+ACDF4GouFJUUvcvQT0pzm9IL IgkalOROxfLXj+GsqM1ZK68plp8PEt+2XYK4r8PC9jUKdoBogxrhv9rTktYwDvo8p0 YSIwBwO5GI9gPjTvpeZoakWaQLaPeNK75FQAkF9hsIWZiz3mdIj4X3zCxuESb8q5Sb LN9dLhKnQBLwCb5LwJZCHX1ZgwsW7GYuOumHsdUFfi33xuQgxJ4gcDe0qw8tSsuGUT Mt8jpKKvKvS/w== Received: by mail-ot1-f70.google.com with SMTP id 46e09a7af769-6bb31a92b44so356033a34.0 for ; Wed, 06 Sep 2023 14:24:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694035493; x=1694640293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sIqsP7Vqh+qah9Cz3acnqv0kkR8FTtzTM9u+hcYB5e8=; b=MM8NIIIVOEWTU3BQPYA1qo6pfGzZ94SUp3IuohN6vRtDFvBH9/0RaCCgFSnC9W8Hmr quBWS+9OgN/XIAFmo/p+nqER7NW9ovex7yMhosNOo5WA2kfpvTjHE9THaWr+hltmZGBC AzBzQIU7cB/D1nYbw1dEmunQDqL2D5qoIjbkMxHw1/zRqcFCUuroLlWXp5GcVRQebkTH zSePK0ROz4fB6Zx7tISbqJ6s+53SiPdhiMfukAHn4R2t/akMMEFTqf+k6DYAnWg7quu/ +L0UZYgzkp8pAXKZ7vnq/7cl9DZg1YxLOiI+mdkggC64enkMpsG8AaeNjFDaxiKr+WdP b0XA== X-Gm-Message-State: AOJu0YyqFop3KlrHb8HlncwXUvPsRJqTTEpWIqJkq9yf4j8npaklogCg 2MohzKFi01TkfYMTGlWqF6Ua0QaQXkQs8vMFTE6vu/VxISfZb4BeYPFv/29aaLPCMshwrtVQw4p 5jg7SbIDhPEMJC0HC/7uwrJXJTydzQ7fn26pvjWTAeAGAKjs9cA== X-Received: by 2002:a05:6871:e02:b0:1d5:fe0:1a8f with SMTP id vj2-20020a0568710e0200b001d50fe01a8fmr5324183oab.30.1694035493067; Wed, 06 Sep 2023 14:24:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHDR9HtAfvD0D81jhd7PmZLD7udNNLAGvEaJJDniTJrHkjJ82g0NbFGZwqiWMG2vd4jx5NCTA== X-Received: by 2002:a05:6871:e02:b0:1d5:fe0:1a8f with SMTP id vj2-20020a0568710e0200b001d50fe01a8fmr5324176oab.30.1694035492731; Wed, 06 Sep 2023 14:24:52 -0700 (PDT) Received: from magali.. ([2804:7f0:b442:2bf8:e49e:1edc:fe69:251]) by smtp.gmail.com with ESMTPSA id eb49-20020a056870a8b100b001c4d922b4fasm8155453oab.8.2023.09.06.14.24.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 14:24:52 -0700 (PDT) From: Magali Lemes To: kernel-team@lists.ubuntu.com Subject: [SRU][J][PATCH v2 1/1] UBUNTU: [Packaging] Add a new fips-checks script Date: Wed, 6 Sep 2023 18:24:45 -0300 Message-Id: <20230906212446.318466-2-magali.lemes@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230906212446.318466-1-magali.lemes@canonical.com> References: <20230906212446.318466-1-magali.lemes@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Marcelo Henrique Cerri BugLink: https://bugs.launchpad.net/bugs/1945989 Add a new script responsible for checking if any FIPS relevant commit was added since the last version. If a new change is found, a corresponding entry should exist in the justifications file otherwise the check will fail. The justifications file is located at "${DEBIAN}/fips.justifications" and should follow the following format for each commit justification: Signed-off-by: Marcelo Henrique Cerri Acked-by: Tim Gardner Acked-by: Stefan Bader Signed-off-by: Kelsey Skunberg (ported from commit 68d02506ae6b236d7df155cdcaa64456e9153d5e focal) [magalilemes: added arch/arm64/crypto and lib/{sha1,crypto/aes}.c to crypto_files; changed the way tag_prefix is set] Signed-off-by: Magali Lemes --- debian/scripts/misc/fips-checks | 139 ++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100755 debian/scripts/misc/fips-checks diff --git a/debian/scripts/misc/fips-checks b/debian/scripts/misc/fips-checks new file mode 100755 index 000000000000..df15b9603cf0 --- /dev/null +++ b/debian/scripts/misc/fips-checks @@ -0,0 +1,139 @@ +#!/bin/bash -eu +export LC_ALL=C.UTF-8 + +usage() { + cat << EOF +Usage: ${P:-$(basename "$0")} [-h|--help] + +Check if there are any FIPS relevant changes since the last +release. Any change that is identified should have a justification in +the justifications file or the check will fail. + +Optional arguments: + -h, --help Show this help message and exit. + -p, --previous Version to use as the previous base version. + -c, --current Version to use as the current base version. + +EOF +} + +prev_base_version= +curr_base_version= +crypto_files=( crypto arch/x86/crypto drivers/char/random.c arch/s390/crypto arch/arm64/crypto lib/sha1.c lib/crypto/aes.c ) + +c_red='\033[0;31m' +c_green='\033[0;32m' +c_off='\033[0m' + +# Parse arguments +while [ "$#" -gt 0 ]; do + case "$1" in + -h|--help) + usage + exit 0 + ;; + -p|--previous) + shift + prev_base_version="$1" + ;; + -c|--current) + shift + curr_base_version="$1" + ;; + *) + usage + exit 1 + ;; + esac + shift +done + +DEBIAN= +# shellcheck disable=SC1091 +. debian/debian.env + +# Check if the "$DEBIAN" directory exists. +if [ ! -d "$DEBIAN" ]; then + echo "You must run this script from the top directory of this repository." + exit 1 +fi + +CONF="$DEBIAN/etc/update.conf" +if [ ! -f "$CONF" ]; then + echo "Missing file: $CONF" + exit 1 +fi +# shellcheck disable=SC1090 +. "$CONF" + +if [ "$DEBIAN_MASTER" = "" ]; then + echo "DEBIAN_MASTER should be defined either in $DEBIAN/etc/update.conf or the environment" + exit 1 +fi + +# Find the base kernel version used by the previous version +if [ -z "$prev_base_version" ]; then + offset=1 + # Loop through each entry of the current changelog, searching for an + # entry that refers to the master version used as base (ie a line + # containing "[ Ubuntu: 4.15.0-39.42 ]"): + while true; do + changes=$(dpkg-parsechangelog -l"$DEBIAN/changelog" -SChanges -c1 -o"$offset") + if ! [ "$changes" ]; then + echo "Failed to retrieve base master version from changelog file: $DEBIAN/changelog" + exit 1 + fi + prev_base_version=$(echo "$changes" | sed -n -r -e '/^\s.*\[ Ubuntu: ([~0-9.-]*) \]$/{s//\1/p;q}') + [ "$prev_base_version" ] && break + offset=$(( offset + 1 )) + done + if [ -z "${prev_base_version}" ]; then + echo "Failed to retrieve base version from previous version from changelog: $DEBIAN/changelog" + exit 1 + fi +fi + +# Find the current base kernel version +if [ -z "$curr_base_version" ]; then + curr_base_version=$(dpkg-parsechangelog -l"${DEBIAN_MASTER}/changelog" -SVersion) + if ! [ "$curr_base_version" ]; then + echo "Failed to retrieve current master version from changelog: $DEBIAN_MASTER/changelog" + exit 1 + fi +fi + +# Check base kernel tags +package=$(dpkg-parsechangelog -l"${DEBIAN_MASTER}/changelog" -SSource) +tag_prefix="Ubuntu${package#linux}-" +prev_tag="${tag_prefix}${prev_base_version}" +curr_tag="${tag_prefix}${curr_base_version}" +for tag in "$prev_tag" "$curr_tag"; do + if ! git rev-parse --verify "$tag" &> /dev/null; then + echo "Missing tag \"$tag\". Please fetch tags from base kernel." + exit 1 + fi +done + +# Check all the changes +fails=0 +justifications_file="$DEBIAN/fips.justifications" +justifications=$(grep -P '^[^#\s]' "$justifications_file" 2> /dev/null || true) +while read -r id; do + short_msg=$(git log --format=%s --max-count=1 "$id") + if echo "$justifications" | grep -q -x -F "$short_msg"; then + echo -e "${c_green}OK${c_off} | ${id::12} ${short_msg}" + continue + fi + echo -e "${c_red}FAIL${c_off} | ${id::12} ${short_msg}" + fails=$(( fails + 1 )) +done < <(git rev-list "${prev_tag}..${curr_tag}" -- "${crypto_files[@]}") + +echo +if [ "$fails" -gt 0 ]; then + echo "FIPS relevant changes were found without justification: ${fails} change(s)." + echo "Please, check the commits above and update the file \"${justifications_file}\"." + exit 1 +fi + +echo "Check completed without errors." +exit 0