Re: [PATCH 2/4] scripts: add "scan" mode to process-advisories.sh to find more backports

Siddhesh Poyarekar <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
On 2026-08-21 01:40, Rolf Eike Beer wrote:
> This will look through the stable branches to find additional backports of
> the fix for the given advisory.

That's neat, thank you for contributing this.  Just some suggested 
changes below.

> 
> Signed-off-by: Rolf Eike Beer <[email protected]>
> ---
>   scripts/process-advisories.sh | 34 ++++++++++++++++++++++++++++++++--
>   1 file changed, 32 insertions(+), 2 deletions(-)
> 
> diff --git a/scripts/process-advisories.sh b/scripts/process-advisories.sh
> index a520fab5e6..00a8cd9416 100755
> --- a/scripts/process-advisories.sh
> +++ b/scripts/process-advisories.sh
> @@ -25,7 +25,7 @@ command=$1
>   
>   usage () {
>       cat >&2 <<EOF
> -usage: $0 {update|news}
> +usage: $0 {update|news|scan}

Maybe give it a more precise name, e.g. update-backports ?

>   EOF
>       exit 1
>   }
> @@ -33,7 +33,7 @@ EOF
>   command="$1"
>   
>   case "$command" in
> -    update|news)
> +    update|news|scan)
>       ;;
>       *)
>           usage
> @@ -69,6 +69,36 @@ advisories_update() {
>       done
>   }
>   
> +advisories_scan() {
> +  advisory=$1
> +
> +  if [ -z $1 ]; then
> +    echo "Usage: $0 update GLIBC-SA-YYYY-NNNN"
> +    exit 1
> +  fi
> +
> +  advisory_file=advisories/$advisory
> +
> +  FIX=$(sed -nr '/^Fix-Commit: /s/Fix-Commit: *([0-9a-fA-F]+) *\(2\.[0-9]+\).*/\1/p' $advisory_file)
> +
> +  if [ -z "${FIX}" ]; then
> +    echo "No Fix-Commit found in $advisory_file"
> +    exit 1
> +  fi

There could be multiple Fix-Commit entries on the same branch, which 
means you likely want to search for all of those commits on older branches.

Also, since backports also show up as `Fix-Commit:` with a different 
branch name, you might want to restrict the commits to those that exist 
on the master branch.

> +  for n in $(seq 20 44); do
> +    BACKPORT=($(git log ..origin/release/2.${n}/master --grep "cherry picked from commit ${FIX}"   --format=%H))
> +    if [ ${#BACKPORT[@]} -eq 0 ]; then
> +      continue
> +    fi
> +    if [ ${#BACKPORT[@]} -ne 1 ]; then
> +      echo "Multiple matches for backport of ${FIX} found in branch 2.${n}"
> +      continue

This sounds like a repo inconsistency; one shouldn't have multiple 
matches for a cherry pick of the same commit in a branch.  Maybe flag an 
error here?

> +    fi
> +    grep -q "^Fix-Commit: ${BACKPORT[0]} " $advisory_file || echo "Fix-Commit: ${BACKPORT[0]} ($(get_rel ${BACKPORT[0]}))" >> $advisory_file

Hmm, if the process errors out in between for some reason, you may end 
up with a partially updated advisory file.  That won't be a problem 
though, since the partially updated advisory file is still consistent 
and a subsequent run should be able to continue with it, as long as you 
have the check for existence of the commit on the master branch, as I 
suggested above.

> +  done
> +}
> +
>   advisories_news() {
>     rel=$(get_rel "HEAD")
>     for f in $(grep -l "^Fix-Commit: .* ($rel)$" advisories/*); do

Also, I wonder if looking for the CVE id would be a better way of 
looking for the backports, especially if there are custom fixes on older 
branches.  It's probably not a common problem though.

Thanks,
Sid
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.