aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-12-23 20:28:02 -0800
committerTrumeet <yuuta@yuuta.moe>2022-12-23 20:28:02 -0800
commit18198a5f1d224aca711f3be617877f6e5f9d83ed (patch)
tree1dc2e3dd49bd4445a9f68751334de3f14fefc249
parent22574b3ce2786c44e76fcf3bfb41370d3cf5ce97 (diff)
downloadsecdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar
secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar.gz
secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.tar.bz2
secdesk-18198a5f1d224aca711f3be617877f6e5f9d83ed.zip
Do not open before fork
-rw-r--r--sd.c18
1 files 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.");