diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-12-23 20:28:02 -0800 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-12-23 20:28:02 -0800 |
commit | 18198a5f1d224aca711f3be617877f6e5f9d83ed (patch) | |
tree | 1dc2e3dd49bd4445a9f68751334de3f14fefc249 | |
parent | 22574b3ce2786c44e76fcf3bfb41370d3cf5ce97 (diff) | |
download | secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar.gz secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar.bz2 secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.zip |
Do not open before fork
-rw-r--r-- | sd.c | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -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."); |