blob: 8a3bd71d3b6f036e56204ce0504b84ed5cdf8a3f [file] [log] [blame]
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2024 - Greg Kroah-Hartman <gregkh@linuxfoundation.org>
# Copyright 2024 Google LLC
#
# Usage
# cvelistV5_check filename
#
# Takes a file containing an upstream SHA in the first column and searches in
# the cvelistV5 git tree to try to determine if the git id already has a CVE
# assigned to it. Not the most through check, as MANY CVE entries in the past
# never actually referenced the git commit that fixed the problem {cough Red
# Hat cough} but it's a good test so that we don't create duplicate entries for
# things already assigned a CVE in the past.
#
# This is primarily used when assigning "old" CVEs for commits that happened
# before March 2024, when the kernel.org group took over being the Linux Kernel
# CNA.
# set -x # Uncomment to enable debugging
# don't use unset variables
set -o nounset
# Colors are good!
if [[ -t 1 ]]; then
txtred=$(tput setaf 1) # Red
txtgrn=$(tput setaf 2) # Green
txtblu=$(tput setaf 4) # Blue
txtcyn=$(tput setaf 6) # Cyan
txtrst=$(tput sgr0) # Text reset
else
txtred=""
txtgrn=""
txtblu=""
txtcyn=""
txtrst=""
fi
FILE=${1}
if [ ! -s "${FILE}" ]; then
echo "The only argument should be the file to parse"
exit 1
fi
KERNEL_TREE=${CVEKERNELTREE}
if [ ! -d ${KERNEL_TREE} ]; then
echo "CVEKERNELTREE needs setting to the stable repo directory"
echo "Either manually export it or add it to your .bashrc/.zshrc et al."
echo "See HOWTO in the root of this repo"
exit 1
fi
# set where the tool was run from and the name of our script
DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
SCRIPT=${0##*/}
CVELISTV5="${DIR}/../cve/cvelistV5/"
SHAS=""
while read line; do
# Skip annotations
if echo ${line} | grep -q "^\s*-"; then
continue
fi
SHAS+=($(echo ${line} | grep -oE "^\s*[a-f0-9]{7,}"))
done < ${FILE}
pushd ${CVELISTV5}> /dev/null
for s in ${SHAS[@]}; do
echo -n "${txtblu}Checking id: ${txtcyn}${s}${txtrst}... "
result=$(git grep "${s}")
if [[ "${result}" != "" ]] ; then
echo "${txtred}Warning${txtrst}: id ${txtcyn}${s}${txtrst} was found in cvelistV5:"
echo " ${result}"
else
echo "${txtgrn}all good.${txtrst}"
fi
done
popd > /dev/null # ${CVELISTV5}