From 18198a5f1d224aca711f3be617877f6e5f9d83ed Mon Sep 17 00:00:00 2001 From: Trumeet Date: Fri, 23 Dec 2022 20:28:02 -0800 Subject: Do not open before fork --- sd.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sd.c b/sd.c index c9e919b..88a4d9a 100644 --- a/sd.c +++ b/sd.c @@ -87,10 +87,16 @@ static int main_sak(void) { LOGFV("Cannot set session ID: %m.", errno); return errno; } - IOCTL(vt_fd, TIOCSCTTY, 0) + int fd; + if ((fd = open(vt_dev, O_RDWR)) == -1) { + LOGFV("Cannot open '%s': %m.", vt_dev, errno); + return errno; + } + LOGDV("Opened '%s': %d.", vt_dev, fd); + IOCTL(fd, TIOCSCTTY, 0) vt_switch(1); - dprintf(vt_fd, "\033[r\033[H\033[J" + dprintf(fd, "\033[r\033[H\033[J" "Press SysRq + K to continue.\n"); /* Wait for signal. */ while (1) { @@ -105,11 +111,6 @@ int sd_setup(void) { IOCTL(fd_con, VT_GETSTATE, &vts) IOCTL(fd_con, VT_OPENQRY, &vt_num) snprintf(vt_dev, PATH_MAX, "/dev/tty%d", vt_num); - if ((vt_fd = open(vt_dev, O_RDWR)) == -1) { - LOGFV("Cannot open '%s': %m.", vt_dev, errno); - return errno; - } - LOGDV("Opened '%s': %d.", vt_dev, vt_fd); if (!(chld = fork())) { exit(main_sak()); @@ -123,9 +124,6 @@ int sd_setup(void) { LOGFV("Cannot wait for child: %m.", errno); return errno; } - /* It seems like we need to open(2) again, or TIOCSCTTY will fail with EIO. */ - close(vt_fd); - vt_fd = -1; if (!WIFSIGNALED(chld_status)) { LOGF("Not killed by signal. Considered insecure."); -- cgit v1.2.3