blob: 8e0913343abda5686e5d9059f8ee0d32c718e6df [file] [log] [blame]
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2024 - Greg Kroah-Hartman <gregkh@linuxfoundation.org>
#
# cve_update - Update all existing CVE entries based on the latest information
# pulled from the git tree(s).
#
# Will look through the list of all published cve ids and run 'bippy' on them
# to update the mbox and json files. It is recommended that after this
# happens, submit the json files to CVE again, if version numbers have changed.
#
# This is good to do after older stable kernels have been released as often
# CVEs are included in older stable kernels AFTER they show up in newer ones,
# and this keeps the database at CVE more up to date and friendly for others to
# rely on. The mbox files generally shouldn't be resent, as that's just noise
# that no one wants to see.
#
# Usage:
# cve_update
#
# Requires:
# bippy
# 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
# Colors are good!
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
# set where the tool was run from,
# the name of our script,
# and the git version of it
DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
SCRIPT=${0##*/}
help() {
echo "${SCRIPT}"
echo " Note, CVE_USER must be set to your CVE_USER email address"
exit 1
}
if [[ "${TMPDIR}" == "" ]]; then
echo "TMPDIR environment variable must be set, exiting ${SCRIPT}"
exit 1
fi
YEAR=$1
# don't use unset variables
set -o nounset
cd "${DIR}"/../ || exit 1
cve_to_week() {
local c=$1
cve=${c%.sha1}
sha=$(git log --oneline ${cve} | tail -n 1 | cut -f 1 -d ' ')
date=$(git show --pretty=format:%ai -s "${sha}" | cut -f 1 -d ' ')
week=$(scripts/to_week.pl "${date}")
#echo "sha=${sha} date=${date} week=${week}"
echo "${week}"
}
cve_year() {
local year=$1
local threads=$(nproc)
# get a count of ids for this year
count=$(ls cve/published/${year}/*.sha1 | wc -l)
echo "Counting ${txtcyn}${count}${txtrst} CVE ids for ${txtgrn}${year}${txtrst} with ${txtcyn}${threads}${txtrst} processes..."
for cve in cve/published/${year}/*.sha1 ; do
while :
do
if [[ $(jobs -p | wc -l) -lt ${threads} ]]; then
#echo "cve=${cve}"
cve_to_week "${cve}" &
# cve_to_week "${cve}" &
break
else
sleep 1
fi
done
done
wait
}
if [[ "${YEAR}" == "" ]]; then
echo "Must provide a year"
exit 1
fi
cve_year ${YEAR}
exit 0