[LTP] [PATCH v1] Avoid messing with system tty in ioctl01.c

Marius Kittler mkittler@suse.de
Mon Sep 11 14:04:08 CEST 2023


* Use `openpty()` to create a new tty
* Remove `-D` option
* Remove requirement to run as root

Signed-off-by: Marius Kittler <mkittler@suse.de>
---
 runtest/syscalls                           |  2 +-
 testcases/kernel/syscalls/ioctl/ioctl01.c  | 25 ++++++++++------------
 testcases/kernel/syscalls/ioctl/test_ioctl | 23 --------------------
 3 files changed, 12 insertions(+), 38 deletions(-)

diff --git a/runtest/syscalls b/runtest/syscalls
index b1125dd75..f999bd74f 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -557,10 +557,10 @@ init_module01 init_module01
 init_module02 init_module02
 
 #Needs tty device.
-#ioctl01 ioctl01 -D /dev/tty0
 #ioctl02 ioctl02 -D /dev/tty0
 
 # Introducing ioctl tests for all /dev/tty* devices
+ioctl01      ioctl01
 ioctl01_02   test_ioctl
 ioctl03      ioctl03
 ioctl04      ioctl04
diff --git a/testcases/kernel/syscalls/ioctl/ioctl01.c b/testcases/kernel/syscalls/ioctl/ioctl01.c
index 3ca8a9a3b..fe6a5591d 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl01.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl01.c
@@ -23,11 +23,13 @@
 #include <fcntl.h>
 #include <stdio.h>
 #include <termios.h>
+#include <pty.h>
 #include "tst_test.h"
 #include "lapi/ioctl.h"
 
 #define	INVAL_IOCTL	9999999
 
+static int amaster, aslave;
 static int fd, fd_file;
 static int bfd = -1;
 
@@ -59,8 +61,6 @@ static struct tcase {
 	{&fd, TCGETS, NULL, EFAULT}
 };
 
-static char *device;
-
 static void verify_ioctl(unsigned int i)
 {
 	TST_EXP_FAIL(ioctl(*(tcases[i].fd), tcases[i].request, tcases[i].s_tio),
@@ -69,31 +69,28 @@ static void verify_ioctl(unsigned int i)
 
 static void setup(void)
 {
-	if (!device)
-		tst_brk(TBROK, "You must specify a tty device with -D option");
+	if (openpty(&amaster, &aslave, NULL, &termios, NULL) < 0) {
+		tst_brk(TBROK | TERRNO, "unable to open pty");
+	}
 
-	fd = SAFE_OPEN(device, O_RDWR, 0777);
+	fd = amaster;
 	fd_file = SAFE_OPEN("x", O_CREAT, 0777);
 }
 
 static void cleanup(void)
 {
-	if (fd > 0)
-		SAFE_CLOSE(fd);
-
+	if (amaster > 0)
+		SAFE_CLOSE(amaster);
+	if (aslave > 0)
+		SAFE_CLOSE(aslave);
 	if (fd_file > 0)
 		SAFE_CLOSE(fd_file);
 }
 
 static struct tst_test test = {
-	.needs_root = 1,
 	.needs_tmpdir = 1,
 	.setup = setup,
 	.cleanup = cleanup,
 	.test = verify_ioctl,
-	.tcnt = ARRAY_SIZE(tcases),
-	.options = (struct tst_option[]) {
-		{"D:", &device, "Tty device. For example, /dev/tty[0-9]"},
-		{}
-	}
+	.tcnt = ARRAY_SIZE(tcases)
 };
diff --git a/testcases/kernel/syscalls/ioctl/test_ioctl b/testcases/kernel/syscalls/ioctl/test_ioctl
index 923275433..43836a229 100755
--- a/testcases/kernel/syscalls/ioctl/test_ioctl
+++ b/testcases/kernel/syscalls/ioctl/test_ioctl
@@ -34,29 +34,6 @@ has_tty()
     return 1
 }
 
-for tttype in `ls /dev/tty*`
-do
-device_no=${tttype#/dev/tty}
-case "$device_no" in
-[0-9]|[0-9][0-9])
-    has_tty $tttype
-    if [ $? -eq 0 ]; then
-        tst_resm TINFO "Skipping ioctl01 with $tttype"
-        continue
-    fi
-    tst_resm TINFO "Testing ioctl01 with $tttype"
-    ioctl01 -D $tttype
-    RC=$?
-    if  [ $RC -eq 0 ]
-    then
-     tst_resm TPASS "ioctl01 Passed with $tttype"
-    else
-     tst_resm TFAIL "ioctl01 Failed with $tttype"
-    fi
-echo;;
-esac
-done
-
 for tttype in `ls /dev/tty*`
 do
 device_no=${tttype#/dev/tty}
-- 
2.42.0



More information about the ltp mailing list