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