fault-injection: enhance failcmd to exit on non-hex address input
authorBreno Leitao <leitao@debian.org>
Mon, 29 Jul 2024 08:45:08 +0000 (01:45 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 2 Sep 2024 03:43:31 +0000 (20:43 -0700)
The failcmd.sh script in the fault-injection toolkit does not currently
validate whether the provided address is in hexadecimal format.  This can
lead to silent failures if the address is sourced from places like
`/proc/kallsyms`, which omits the '0x' prefix, potentially causing users
to operate under incorrect assumptions.

Introduce a new function, `exit_if_not_hex`, which checks the format of
the provided address and exits with an error message if the address is not
a valid hexadecimal number.

This enhancement prevents users from running the command with improperly
formatted addresses, thus improving the robustness and usability of the
failcmd tool.

Link: https://lkml.kernel.org/r/20240729084512.3349928-1-leitao@debian.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
tools/testing/fault-injection/failcmd.sh

index 78dac34264be9b9079223360a8a9b859c2ce72fa..c4f2432750f44d0229f7bb90396d9962c1c7671a 100644 (file)
@@ -64,6 +64,14 @@ ENVIRONMENT
 EOF
 }
 
+exit_if_not_hex() {
+    local value="$1"
+    if ! [[ $value =~ ^0x[0-9a-fA-F]+$ ]]; then
+        echo "Error: The provided value '$value' is not a valid hexadecimal number." >&2
+        exit 1
+    fi
+}
+
 if [ $UID != 0 ]; then
        echo must be run as root >&2
        exit 1
@@ -160,18 +168,22 @@ while true; do
                shift 2
                ;;
        --require-start)
+               exit_if_not_hex "$2"
                echo $2 > $FAULTATTR/require-start
                shift 2
                ;;
        --require-end)
+               exit_if_not_hex "$2"
                echo $2 > $FAULTATTR/require-end
                shift 2
                ;;
        --reject-start)
+               exit_if_not_hex "$2"
                echo $2 > $FAULTATTR/reject-start
                shift 2
                ;;
        --reject-end)
+               exit_if_not_hex "$2"
                echo $2 > $FAULTATTR/reject-end
                shift 2
                ;;