aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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.");