From 5be3c2fe3bc97d64b862d6f065e2368b2dc3422c Mon Sep 17 00:00:00 2001 From: andrewwhitecdw Date: Wed, 12 Aug 2026 18:52:04 -0500 Subject: [PATCH] fix: handle yum failures when resolving kernel version Signed-off-by: andrewwhitecdw --- rhel8/nvidia-driver | 8 +++- ...test_resolve_kernel_version_yum_failure.sh | 37 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100755 tests/test_resolve_kernel_version_yum_failure.sh diff --git a/rhel8/nvidia-driver b/rhel8/nvidia-driver index 2724c5468..7dedfc14b 100755 --- a/rhel8/nvidia-driver +++ b/rhel8/nvidia-driver @@ -81,8 +81,12 @@ _resolve_rhel_version() { # Resolve the kernel version to the form major.minor.patch-revision. _resolve_kernel_version() { echo "Resolving Linux kernel version..." - local version=$(yum -q list available --showduplicates kernel-headers | - awk -v arch=$(uname -m) 'NR>1 {print $2"."arch}' | tac | grep -E -m1 "^${KERNEL_VERSION/latest/.*}") + local version + if ! version=$(yum -q list available --showduplicates kernel-headers | + awk -v arch=$(uname -m) 'NR>1 {print $2"."arch}' | tac | grep -E -m1 "^${KERNEL_VERSION/latest/.*}"); then + echo "Could not resolve Linux kernel version" >&2 + return 1 + fi if [ -z "${version}" ]; then echo "Could not resolve Linux kernel version" >&2 diff --git a/tests/test_resolve_kernel_version_yum_failure.sh b/tests/test_resolve_kernel_version_yum_failure.sh new file mode 100755 index 000000000..69edb4a82 --- /dev/null +++ b/tests/test_resolve_kernel_version_yum_failure.sh @@ -0,0 +1,37 @@ +#!/bin/bash +set -euo pipefail + +cd "$(dirname "$0")/.." + +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT + +cp rhel8/nvidia-driver "$tmp/lib.sh" +sed -i '/^usage() {/,$d' "$tmp/lib.sh" +: > "$tmp/common.sh" + +export DRIVER_VERSION="550.54.15" +export TARGETARCH="amd64" +export KERNEL_VERSION="4.18.0-513.el8_9.x86_64" +export DRIVER_BRANCH=550 + +set +e +output=$( + cd "$tmp" + . ./lib.sh >/dev/null 2>&1 + yum() { return 1; } + if ! _resolve_kernel_version 2>&1; then + echo "HANDLED" + fi + echo "MARKER" +) +status=$? +set -e + +if [[ $status -ne 0 ]]; then + echo "FAIL: _resolve_kernel_version caused an early exit (status=$status)" + exit 1 +fi +if [[ "$output" == *"Could not resolve Linux kernel version"* && "$output" == *"HANDLED"* && "$output" == *"MARKER"* ]]; then + echo "PASS: _resolve_kernel_version handles yum failure" +else