git: d556719e15d6 - main - syslogd: Keep console and tty descriptors open
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 16 Oct 2023 13:12:27 UTC
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=d556719e15d643ba9619bbbeab550eed87614525 commit d556719e15d643ba9619bbbeab550eed87614525 Author: Jake Freeland <jfree@FreeBSD.org> AuthorDate: 2023-10-15 20:34:06 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2023-10-16 13:11:58 +0000 syslogd: Keep console and tty descriptors open Console and tty descriptors are initially opened in parse_action() to determine whether they are valid using isatty(). That descriptor is then closed because it is never accessed by syslogd again; ttymsg() will reopen the tty/console under a new descriptor when needed. If the user attempts to log to a tty that is inactive outside of syslogd, then syslogd must keep that descriptor open so the tty remains accessible. For example, logging to `/dev/ttyvb` requires the initial `/dev/ttyvb` descriptor to stay open so the user can view its buffer at any time via CTRL+ALT+F12. As a result, console and tty descriptors must remain open until a potential configuration reload or a system shutdown. The given descriptor will be closed in close_filed() in such circumstances. PR: 274454 Fixes: c3175a6e1c5a ("syslogd: Do not open console descriptor") Reported by: Trond Endrestøl <Trond.Endrestol@ximalas.info> Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D42215 --- usr.sbin/syslogd/syslogd.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 7db5bab11008..11d1033651a8 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -3053,9 +3053,6 @@ parse_action(const char *p, struct filed *f) f->f_type = F_TTY; (void)strlcpy(f->fu_fname, p + sizeof(_PATH_DEV) - 1, sizeof(f->fu_fname)); - /* This will be reopened by ttymsg(). */ - close(f->f_file); - f->f_file = -1; } else { (void)strlcpy(f->fu_fname, p, sizeof(f->fu_fname)); f->f_type = F_FILE;