xref: /linux/tools/testing/selftests/gpio/gpio-cdev-uaf.sh (revision 1334d2a3b3235d062e5e1f51aebe7a64ed57cf72)
1*c7f92042STzung-Bi Shih#!/bin/sh
2*c7f92042STzung-Bi Shih# SPDX-License-Identifier: GPL-2.0
3*c7f92042STzung-Bi Shih# Copyright 2026 Google LLC
4*c7f92042STzung-Bi Shih
5*c7f92042STzung-Bi ShihBASE_DIR=`dirname $0`
6*c7f92042STzung-Bi ShihMODULE="gpio-cdev-uaf"
7*c7f92042STzung-Bi Shih
8*c7f92042STzung-Bi Shihfail() {
9*c7f92042STzung-Bi Shih	echo "$*" >&2
10*c7f92042STzung-Bi Shih	echo "GPIO $MODULE test FAIL"
11*c7f92042STzung-Bi Shih	exit 1
12*c7f92042STzung-Bi Shih}
13*c7f92042STzung-Bi Shih
14*c7f92042STzung-Bi Shihskip() {
15*c7f92042STzung-Bi Shih	echo "$*" >&2
16*c7f92042STzung-Bi Shih	echo "GPIO $MODULE test SKIP"
17*c7f92042STzung-Bi Shih	exit 4
18*c7f92042STzung-Bi Shih}
19*c7f92042STzung-Bi Shih
20*c7f92042STzung-Bi Shih# Load the gpio-sim module. This will pull in configfs if needed too.
21*c7f92042STzung-Bi Shihmodprobe gpio-sim || skip "unable to load the gpio-sim module"
22*c7f92042STzung-Bi Shih# Make sure configfs is mounted at /sys/kernel/config. Wait a bit if needed.
23*c7f92042STzung-Bi Shihfor _ in `seq 5`; do
24*c7f92042STzung-Bi Shih	mountpoint -q /sys/kernel/config && break
25*c7f92042STzung-Bi Shih	mount -t configfs none /sys/kernel/config
26*c7f92042STzung-Bi Shih	sleep 0.1
27*c7f92042STzung-Bi Shihdone
28*c7f92042STzung-Bi Shihmountpoint -q /sys/kernel/config || \
29*c7f92042STzung-Bi Shih	skip "configfs not mounted at /sys/kernel/config"
30*c7f92042STzung-Bi Shih
31*c7f92042STzung-Bi Shihecho "1. GPIO"
32*c7f92042STzung-Bi Shih
33*c7f92042STzung-Bi Shihecho "1.1. poll"
34*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf chip poll || fail "failed to test chip poll"
35*c7f92042STzung-Bi Shihecho "1.2. read"
36*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf chip read || fail "failed to test chip read"
37*c7f92042STzung-Bi Shihecho "1.3. ioctl"
38*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf chip ioctl || fail "failed to test chip ioctl"
39*c7f92042STzung-Bi Shih
40*c7f92042STzung-Bi Shihecho "2. linehandle"
41*c7f92042STzung-Bi Shih
42*c7f92042STzung-Bi Shihecho "2.1. ioctl"
43*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf handle ioctl || fail "failed to test handle ioctl"
44*c7f92042STzung-Bi Shih
45*c7f92042STzung-Bi Shihecho "3. lineevent"
46*c7f92042STzung-Bi Shih
47*c7f92042STzung-Bi Shihecho "3.1. read"
48*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf event read || fail "failed to test event read"
49*c7f92042STzung-Bi Shihecho "3.2. poll"
50*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf event poll || fail "failed to test event poll"
51*c7f92042STzung-Bi Shihecho "3.3. ioctl"
52*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf event ioctl || fail "failed to test event ioctl"
53*c7f92042STzung-Bi Shih
54*c7f92042STzung-Bi Shihecho "4. linereq"
55*c7f92042STzung-Bi Shih
56*c7f92042STzung-Bi Shihecho "4.1. read"
57*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf req read || fail "failed to test req read"
58*c7f92042STzung-Bi Shihecho "4.2. poll"
59*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf req poll || fail "failed to test req poll"
60*c7f92042STzung-Bi Shihecho "4.3. ioctl"
61*c7f92042STzung-Bi Shih$BASE_DIR/gpio-cdev-uaf req ioctl || fail "failed to test req ioctl"
62*c7f92042STzung-Bi Shih
63*c7f92042STzung-Bi Shihecho "GPIO $MODULE test PASS"
64