From 4dec0752d4fbe034a00bc15943733eae74e9f701 Mon Sep 17 00:00:00 2001
From: Harald Pfeiffer <coding@lirion.de>
Date: Tue, 8 Jun 2021 16:41:36 +0200
Subject: Support both compressed and uncompressed modules

Since the NVIDIA drivers from rpmfusion switched to uncompressed modules
for Fedora's FC33, we will now support both .ko.xz and .ko files.
---
 signko | 42 +++++++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 17 deletions(-)

(limited to 'signko')

diff --git a/signko b/signko
index 939081d..ee02807 100755
--- a/signko
+++ b/signko
@@ -1,6 +1,8 @@
 #!/usr/bin/env bash
 
 export KVER="$(uname -r)"
+SKMDIR="$(mktemp -p /tmp -d skmod.XXXXXX)"||exit 1
+export SKMDIR
 
 function hayulp {
 	printf "USAGE: %b [ -k KVER ]\\n" "$(basename "$0")"
@@ -28,14 +30,14 @@ if [ ! -r private_key.priv ] || [ ! -r public_key.der ];then
 fi
 
 #printf "We will sign following kernel modules: %b.\n" "$(ls -amA /usr/lib/modules/"$(uname -r)"/extra/nvidia/nvidia{,-uvm}.ko)"
-printf "We will sign following kernel modules:\\n%b.\\n" "$(ls -amA /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko.xz 2>/dev/null)"
+printf "We will sign following kernel modules:\\n%b.\n" "$(ls -amA /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko.xz 2>/dev/null)"
 read -rp "Is this OK? [y/N] " PROEMT
 case "$PROEMT" in
 	"y"|"Y"|"j"|"J") ;;
 	*) exit 1 ;;
 esac
 # shellcheck disable=SC2207
-SGDMODS=( $(ls -aA /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko.xz) )
+SGDMODS=( $(ls -aA /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko.xz /usr/lib/modules/"$KVER"/extra/nvidia/nvidia*.ko 2>/dev/null) )
 MSGND=0
 MSKIP=0
 IBAS="/dev/null"
@@ -46,14 +48,18 @@ for i in "${SGDMODS[@]}";do
 	fi
 	MODSIG=0 MODGOODSIG=0
 	IBAS="$(basename "$i")"
-	printf "[....] Extracting module %b\\033[s..." "$IBAS"
-	if sudo xz -kd "$i" >/dev/null 2>&1;then
-		printf "\\033[666D[ \\033[32mOK\\033[0m ]\\033[u\\033[K.\\n"
-	else
-		printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K.\\n"
-		exit 4
-	fi
 	MMOD="$(printf "%b" "$i"|sed 's/\.xz$//')"
+	COMPR=0
+	if printf "%b" "$i"|grep -P '\.ko\.xz$' >/dev/null;then
+		COMPR=1
+		printf "[....] Extracting module %b\\033[s..." "$IBAS"
+		if sudo rm -f "$MMOD" >/dev/null 2>&1 && sudo xz -kd "$i" >/dev/null 2>&1;then
+			printf "\\033[666D[ \\033[32mOK\\033[0m ]\\033[u\\033[K.\\n"
+		else
+			printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K.\\n"
+			exit 4
+		fi
+	fi
 	printf "[....] Signing module %b\\033[s..." "$IBAS"
 	if sudo modinfo "$MMOD"|grep '^sig_id:'|grep 'PKCS#7$' >/dev/null; then MODSIG=1; fi
 	if sudo modinfo "$MMOD"|grep '^signer:'|grep "$SIGNER\$" > /dev/null; then MODGOODSIG=1; fi
@@ -73,16 +79,18 @@ for i in "${SGDMODS[@]}";do
 		MSKIP="$((MSKIP+1))"
 		printf "\\033[666D[\\033[1;30mSKIP\\033[0m]\\033[u\\033[K (already signed)\\n"
 	fi
-	if [ "$MODSIG" -ne 1 ] || [ "$MODGOODSIG" -ne 1 ];then
-		printf "[....] Compressing module %b\\033[s..." "$IBAS"
-		if sudo xz "$MMOD" >/dev/null 2>&1;then
-			printf "\\033[666D[ \\033[32mOK\\033[0m ]\\033[u\\033[K.\\n"
+	if [ "$COMPR" -eq 1 ];then
+		if [ "$MODSIG" -ne 1 ] || [ "$MODGOODSIG" -ne 1 ];then
+			printf "[....] Compressing module %b\\033[s..." "$IBAS"
+			if sudo rm -f "$i" >/dev/null 2>&1 && sudo xz "$MMOD" >/dev/null 2>&1;then
+				printf "\\033[666D[ \\033[32mOK\\033[0m ]\\033[u\\033[K.\\n"
+			else
+				printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K.\\n"
+				exit 5
+			fi
 		else
-			printf "\\033[666D[\\033[31mFAIL\\033[0m]\\033[u\\033[K.\\n"
-			exit 5
+			sudo rm -f "$MMOD"||exit 117
 		fi
-	else
-		sudo rm -f "$MMOD"||exit 117
 	fi
 done
 printf "Summary:\\n"
-- 
cgit v1.2.3