From patchwork Wed Sep 6 21:24:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Magali Lemes X-Patchwork-Id: 1830560 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=k6eb7dpT; 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 4RgwQ115vwz1yh8 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 1qe01C-0006gn-0X; Wed, 06 Sep 2023 21:24:58 +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 1qe01A-0006gC-DF for kernel-team@lists.ubuntu.com; Wed, 06 Sep 2023 21:24:56 +0000 Received: from mail-oa1-f71.google.com (mail-oa1-f71.google.com [209.85.160.71]) (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 47D733F42A for ; Wed, 6 Sep 2023 21:24:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1694035496; bh=sK776TdNoM1exgasSkIyRh1r59uTTtpI+LqbPfJXVdE=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=k6eb7dpT2JbiZ9fPQVTkYGnxV4c8qY2q/cTYjKGLE4DbN2GUM+RvHXTrW9ZxBh+Ni OpoxzjmDWVD2Cr7dWrVtijcihnOdyQ+n+3kf7ppd/Y/4rgEolZyzQdV+9wrUj8Qs1z TjZJrleht0iM2KNJIm1Ezj4TcDOxCT7NRcG5iXx7DGeGo47L9J49FqdOfTVrOR0ucj Yp+HwaPKlZKrthMMV/6NEaN/2b4b8rwGCWhYrIH6U/Pa83lyxkcLNRoqRDHUrEijsy 2q/YT7OyiMpjRdFrHgdRpv07ReGLG4Y1BxT77B7d1W6hvzply+M0ydYfFqoFkVquvi 275ILTk9hSxLQ== Received: by mail-oa1-f71.google.com with SMTP id 586e51a60fabf-1cc7407e507so315401fac.3 for ; Wed, 06 Sep 2023 14:24:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694035495; x=1694640295; 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=sK776TdNoM1exgasSkIyRh1r59uTTtpI+LqbPfJXVdE=; b=VZmIKSCDTWPX5JtfEvop56ldfhNDR/LAeA+qkltsIr8nM9sxaK1R+buF9HskiVIy24 +grcwYhddeOkAWyZUBu9rkOsMyDgx8yzbboyn15ONaVy41s0NPHtxTc0e4292WcZ/3ly qwbkPK8rRM4XxmM61Jbf0/+8M3gO3rQTHvTjpJ04r3sbu7fxt4d6mx8camMzc6HMpDkA gS+71Nf5x01Lm/hrTlNu2egWCE/+dnygfV0xpYFhkgtxf5C9faCJqV50OOa+s7bOGwhw m+u648qlpIKFnwbyYsGzby+SdBydT8rzFxqgM7CuGrmVI3JMlIbNPIz98GsCqU96+pq0 9hTQ== X-Gm-Message-State: AOJu0Yxvl/Zq5kum7JRbWWt69kJg/m9IoXnwy6bijoNFdtrCUCVvb6t8 BKwwTOpKzN16X1OpUnajMNwse8KZxM9Th5ENVv4FP5idkLVg54B7y55n73jSstKvWgU1bcIk3IL KQAPzfo3/8lTEj9AjWTl5UruKPKkTCmyBFgV75au56UrFqEltzQ== X-Received: by 2002:a05:6870:310b:b0:1bb:4c5f:6db0 with SMTP id v11-20020a056870310b00b001bb4c5f6db0mr23583147oaa.36.1694035494897; Wed, 06 Sep 2023 14:24:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE9t+GT5rLLYcjVlvWQv0wRISDgV6bXMCg2zDYdw5VcBaEjrOnZiDL/9kFKiVLNJXiJtWmKxA== X-Received: by 2002:a05:6870:310b:b0:1bb:4c5f:6db0 with SMTP id v11-20020a056870310b00b001bb4c5f6db0mr23583130oaa.36.1694035494482; Wed, 06 Sep 2023 14:24:54 -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.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Sep 2023 14:24:54 -0700 (PDT) From: Magali Lemes To: kernel-team@lists.ubuntu.com Subject: [SRU][M][PATCH v2 1/1] UBUNTU: [Packaging] Add a new fips-checks script Date: Wed, 6 Sep 2023 18:24:46 -0300 Message-Id: <20230906212446.318466-3-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/crypto/{sha1,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..6d5fb3847908 --- /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/crypto/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