1 // Copyright (C) 2013 Jann Horn <jann@thejh.net>
2 // This file is licensed under the GNU GPL v2 (see
8 #include <linux/ioctl.h>
11 #include <sys/ioctl.h>
13 #define KSYM_NAME_LEN 128
15 struct fetch_fops_args {
20 #define MOCTEL_FETCH_FOPS _IOR('m', 1, struct fetch_fops_args)
22 int main(int argc, char **argv) {
23 if (argc != 2) fputs("Usage: show_ioctl <device>\n", stderr), exit(1);
25 char *devname = argv[1];
26 int devfd = open(devname, O_RDONLY);
27 if (devfd == -1) fprintf(stderr, "Can't open %s: %m\n", devname), exit(1);
29 int ioctlfd = open("/dev/ioctl_info", O_RDONLY);
30 if (ioctlfd == -1) fprintf(stderr, "Can't open /dev/ioctl_info: %m\n"), exit(1);
32 char resbuf[KSYM_NAME_LEN];
33 struct fetch_fops_args ioctl_args = {
35 .retp = (uint64_t)resbuf
37 int ret = ioctl(ioctlfd, MOCTEL_FETCH_FOPS, &ioctl_args);
38 if (ret) fprintf(stderr, "can't perform MOCTEL_FETCH_FOPS: %m\n"), exit(1);
43 printf("%s\n", resbuf);