From 81e74c8676479811601b5894d72bb3d7e05f68dd Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Fri, 14 Mar 2025 16:08:12 -0400 Subject: add ptmx support to test-container Conflicts: support/Makefile (context, line numbers) support/test-container.c (line numbers) diff --git a/support/Makefile b/support/Makefile index dfe8e547f6..d41278eeab 100644 --- a/support/Makefile +++ b/support/Makefile @@ -324,6 +324,7 @@ tests = \ tst-support_format_dns_packet \ tst-support_fuse \ tst-support-open-dev-null-range \ + tst-support-openpty \ tst-support-process_state \ tst-support_quote_blob \ tst-support_quote_blob_wide \ @@ -340,6 +341,10 @@ tests = \ tst-xsigstack \ # tests +tests-container = \ + tst-support-openpty-c \ + # tests-container + ifeq ($(run-built-tests),yes) tests-special = \ $(objpfx)tst-support_record_failure-2.out diff --git a/support/test-container.c b/support/test-container.c index 79d3189e2f..a641250079 100644 --- a/support/test-container.c +++ b/support/test-container.c @@ -1149,6 +1149,9 @@ main (int argc, char **argv) devmount (new_root_path, "null"); devmount (new_root_path, "zero"); devmount (new_root_path, "urandom"); +#ifdef __linux__ + devmount (new_root_path, "ptmx"); +#endif /* We're done with the "old" root, switch to the new one. */ if (chroot (new_root_path) < 0) @@ -1214,6 +1217,14 @@ main (int argc, char **argv) maybe_xmkdir ("/tmp", 0755); +#ifdef __linux__ + maybe_xmkdir ("/dev/pts", 0777); + if (mount ("/dev/pts", "/dev/pts", "devpts", 0, "newinstance,ptmxmode=0666,mode=0666") < 0) + FAIL_EXIT1 ("can't mount /dev/pts: %m\n"); + if (mount ("/dev/pts/ptmx", "/dev/ptmx", "", MS_BIND | MS_REC, NULL) < 0) + FAIL_EXIT1 ("can't mount /dev/ptmx\n"); +#endif + if (require_pidns) { /* Now that we're pid 1 (effectively "root") we can mount /proc */ diff --git a/support/tst-support-openpty-c.c b/support/tst-support-openpty-c.c new file mode 100644 index 0000000000..0a6a428fc3 --- /dev/null +++ b/support/tst-support-openpty-c.c @@ -0,0 +1,2 @@ +/* Same test, but in a test-container. */ +#include "tst-support-openpty.c" diff --git a/support/tst-support-openpty.c b/support/tst-support-openpty.c new file mode 100644 index 0000000000..1222d7018f --- /dev/null +++ b/support/tst-support-openpty.c @@ -0,0 +1,49 @@ +/* Basic test for support_openpty support in test-container. + Copyright (C) 2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +#include +#include +#include + +/* Note: the purpose of this test isn't to test if ptys function + correctly, but only to verify that test-container's support for + them is correct. The many checks in support_openpty.c are + sufficient for this. */ + +int +do_test (void) +{ + int outer, inner; + char *name; + struct termios term; + struct winsize win; + + cfmakeraw (&term); + win.ws_row = 24; + win.ws_col = 80; + + support_openpty (&outer, &inner, &name, &term, &win); + + return 0; +} + +#include