selftests/bpf: Fix vmtest.sh -h to not require root
authorDaniel Xu <dxu@dxuuu.xyz>
Tue, 9 Aug 2022 17:11:09 +0000 (11:11 -0600)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 9 Aug 2022 20:28:48 +0000 (22:28 +0200)
Set the exit trap only after argument parsing is done. This way argument
parse failure or `-h` will not require sudo.

Reasoning is that it's confusing that a help message would require root
access.

Signed-off-by: Daniel Xu <dxu@dxuuu.xyz>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Daniel Müller <deso@posteo.net>
Link: https://lore.kernel.org/bpf/6a802aa37758e5a7e6aa5de294634f5518005e2b.1660064925.git.dxu@dxuuu.xyz
tools/testing/selftests/bpf/vmtest.sh

index b86ae4a..976ef75 100755 (executable)
@@ -307,6 +307,20 @@ update_kconfig()
        fi
 }
 
+catch()
+{
+       local exit_code=$1
+       local exit_status_file="${OUTPUT_DIR}/${EXIT_STATUS_FILE}"
+       # This is just a cleanup and the directory may
+       # have already been unmounted. So, don't let this
+       # clobber the error code we intend to return.
+       unmount_image || true
+       if [[ -f "${exit_status_file}" ]]; then
+               exit_code="$(cat ${exit_status_file})"
+       fi
+       exit ${exit_code}
+}
+
 main()
 {
        local script_dir="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
@@ -353,6 +367,8 @@ main()
        done
        shift $((OPTIND -1))
 
+       trap 'catch "$?"' EXIT
+
        if [[ $# -eq 0  && "${debug_shell}" == "no" ]]; then
                echo "No command specified, will run ${DEFAULT_COMMAND} in the vm"
        else
@@ -409,20 +425,4 @@ main()
        fi
 }
 
-catch()
-{
-       local exit_code=$1
-       local exit_status_file="${OUTPUT_DIR}/${EXIT_STATUS_FILE}"
-       # This is just a cleanup and the directory may
-       # have already been unmounted. So, don't let this
-       # clobber the error code we intend to return.
-       unmount_image || true
-       if [[ -f "${exit_status_file}" ]]; then
-               exit_code="$(cat ${exit_status_file})"
-       fi
-       exit ${exit_code}
-}
-
-trap 'catch "$?"' EXIT
-
 main "$@"