| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright 2026 Google LLC |
| |
| BASE_DIR=`dirname $0` |
| MODULE="gpio-cdev-uaf" |
| |
| fail() { |
| echo "$*" >&2 |
| echo "GPIO $MODULE test FAIL" |
| exit 1 |
| } |
| |
| skip() { |
| echo "$*" >&2 |
| echo "GPIO $MODULE test SKIP" |
| exit 4 |
| } |
| |
| # Load the gpio-sim module. This will pull in configfs if needed too. |
| modprobe gpio-sim || skip "unable to load the gpio-sim module" |
| # Make sure configfs is mounted at /sys/kernel/config. Wait a bit if needed. |
| for _ in `seq 5`; do |
| mountpoint -q /sys/kernel/config && break |
| mount -t configfs none /sys/kernel/config |
| sleep 0.1 |
| done |
| mountpoint -q /sys/kernel/config || \ |
| skip "configfs not mounted at /sys/kernel/config" |
| |
| echo "1. GPIO" |
| |
| echo "1.1. poll" |
| $BASE_DIR/gpio-cdev-uaf chip poll || fail "failed to test chip poll" |
| echo "1.2. read" |
| $BASE_DIR/gpio-cdev-uaf chip read || fail "failed to test chip read" |
| echo "1.3. ioctl" |
| $BASE_DIR/gpio-cdev-uaf chip ioctl || fail "failed to test chip ioctl" |
| |
| echo "2. linehandle" |
| |
| echo "2.1. ioctl" |
| $BASE_DIR/gpio-cdev-uaf handle ioctl || fail "failed to test handle ioctl" |
| |
| echo "3. lineevent" |
| |
| echo "3.1. read" |
| $BASE_DIR/gpio-cdev-uaf event read || fail "failed to test event read" |
| echo "3.2. poll" |
| $BASE_DIR/gpio-cdev-uaf event poll || fail "failed to test event poll" |
| echo "3.3. ioctl" |
| $BASE_DIR/gpio-cdev-uaf event ioctl || fail "failed to test event ioctl" |
| |
| echo "4. linereq" |
| |
| echo "4.1. read" |
| $BASE_DIR/gpio-cdev-uaf req read || fail "failed to test req read" |
| echo "4.2. poll" |
| $BASE_DIR/gpio-cdev-uaf req poll || fail "failed to test req poll" |
| echo "4.3. ioctl" |
| $BASE_DIR/gpio-cdev-uaf req ioctl || fail "failed to test req ioctl" |
| |
| echo "GPIO $MODULE test PASS" |