From patchwork Thu Aug 31 16:05:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Magali Lemes X-Patchwork-Id: 1828652 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=cRFEXuP1; 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 4RcSB452SRz1yh7 for ; Fri, 1 Sep 2023 16:02:51 +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 1qbxEq-00042B-Fd; Fri, 01 Sep 2023 06:02:36 +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 1qbkBF-0004O2-6l for kernel-team@lists.ubuntu.com; Thu, 31 Aug 2023 16:06:02 +0000 Received: from mail-oa1-f72.google.com (mail-oa1-f72.google.com [209.85.160.72]) (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 0EBFD42416 for ; Thu, 31 Aug 2023 16:06:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1693497961; bh=5ibUKFqyUsaFMqevJNgRc4fH6dE6xoJc0Z2sAzxKFu4=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cRFEXuP1tffdD8USB34CZae22gIstoFk39jxelDWIJQwkklZBWjQhfNVtiLo4ZOkr ajqH27XX3jD5h5AoxJ5QZFQwdX3tWBYNFEdNaEVQ3v7j00G2KO+ZPU7Y5M+hjKFI+3 zZHuJtoYt83il0BlFVWgx+6xJP+k49IlP6gnobaNkRZd6idLuWKryDzaEA9z3Fgbg3 hdlQz6TyHw9Z8xP8Pmx8U6MtqysiQrzbsTHFWlZ6b4AtRrKyNaKO2VkNx53GsmfThh yaAlnwoAb6JtNbpXWkohAR0OvxzhDQV/oAdi412An9eXnoIe6cYBQ/IUfFHSLshFil b64ZsYTaRLOZg== Received: by mail-oa1-f72.google.com with SMTP id 586e51a60fabf-1bf00f8cf77so1073107fac.0 for ; Thu, 31 Aug 2023 09:06:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693497959; x=1694102759; 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=5ibUKFqyUsaFMqevJNgRc4fH6dE6xoJc0Z2sAzxKFu4=; b=ejVvFq2/eQVFJvnAC3AZZCx++gJ7UF2U+6FgJo4iq7VD81l8kOULvs9cJxsqLjCizT nOH9EeZUGdabwKMR1IU68AYfdjTRvSLdng58oC4LTux0OLB3s8SCE5DsRKUTR7dSDKp/ gpB/d2yaFQFkN6tDGyl8NeIK6M9X1Ui3LLIC8rURn6TZ/bNt4ffrnUfdl5BTTwDnKLbH GnorpBMs7KIAw1lMCTtOs2xaitwbggnsBpjSwrAnIWzUb5kHgVMiXK/26LWVCBpI3pr4 WR+LEAo2N93npw+sxx3qg/VNhhk10oqGQC4ah0+Krb3vnzcqNmPBLN0kF4GJek/71DZx uX6Q== X-Gm-Message-State: AOJu0Yz+8gY53dOKR84W0k7GiXsnc1fDDq2NEhY011GFZe8ALI6HBlOF l3uDUD9r+bpSJT787HVDvo67wjfueArKbxZLJbLIotRaYEEaJHar9BXvx7QAs9F8XZWozFYa/GZ WWvy+5YGsmqGfMagxnKezWhIA2i8ESoWSMTnVDg2JmxPQcYiC8Q== X-Received: by 2002:a05:6870:7386:b0:1b4:6d3b:3e15 with SMTP id z6-20020a056870738600b001b46d3b3e15mr6026228oam.3.1693497959600; Thu, 31 Aug 2023 09:05:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFrmfGPdm/gePPSY00Ix7V6s86MOdjz81QFabDH1YVuTubrhV2w5ncUjORBDh0OnzuhJzNCvg== X-Received: by 2002:a05:6870:7386:b0:1b4:6d3b:3e15 with SMTP id z6-20020a056870738600b001b46d3b3e15mr6026195oam.3.1693497959144; Thu, 31 Aug 2023 09:05:59 -0700 (PDT) Received: from localhost.localdomain ([2804:7f0:b441:ef12:18f8:5cad:a1c5:a2f1]) by smtp.gmail.com with ESMTPSA id c19-20020a9d4813000000b006b8af3a2599sm823827otf.73.2023.08.31.09.05.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Aug 2023 09:05:58 -0700 (PDT) From: Magali Lemes To: kernel-team@lists.ubuntu.com Subject: [SRU][J][PATCH 1/1] UBUNTU: [Packaging] Add a new fips-checks script Date: Thu, 31 Aug 2023 13:05:10 -0300 Message-Id: <20230831160511.495067-2-magali.lemes@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230831160511.495067-1-magali.lemes@canonical.com> References: <20230831160511.495067-1-magali.lemes@canonical.com> MIME-Version: 1.0 X-Mailman-Approved-At: Fri, 01 Sep 2023 06:02:32 +0000 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] Signed-off-by: Magali Lemes --- debian/scripts/misc/fips-checks | 138 ++++++++++++++++++++++++++++++++ 1 file changed, 138 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..5e60de333925 --- /dev/null +++ b/debian/scripts/misc/fips-checks @@ -0,0 +1,138 @@ +#!/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 +tag_prefix="Ubuntu-${DEBIAN_MASTER#debian.}-" +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