lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1831764.TLkxdtWsSY@nerdopolis2>
Date: Sun, 28 Jul 2024 13:56:43 -0400
From: nerdopolis <bluescreen_avenger@...izon.net>
To: Greg KH <gregkh@...uxfoundation.org>
Cc: jirislaby@...nel.org, linux-kernel@...r.kernel.org,
 linux-serial@...r.kernel.org
Subject: Re: When /dev/console is a disconnected /dev/ttyS0,
 TCGETS on /dev/console results in EIO (Even if TIOCCONS is called on a PTY)

On Wednesday, July 24, 2024 11:17:54 PM EDT nerdopolis wrote:
> On Thursday, July 18, 2024 7:52:15 AM EDT nerdopolis wrote:
> > On Friday, July 12, 2024 8:59:58 AM EDT Greg KH wrote:
> > > On Fri, Jul 12, 2024 at 08:52:15AM -0400, nerdopolis wrote:
> > > > Hi
> > > > 
> > > > Background:--------------------------------------------------------------------
> > > > This issue becomes evident on VT-less kernels. As when there is no /dev/tty0
> > > > device, the console defaults to being /dev/ttyS0 instead. Although this can
> > > > also be replicated if booting a standard kernel with 'console=ttyS0' and ensure
> > > > nothing is plugged into /dev/ttyS0.
> > > > 
> > > > This issue prevents systemd from logging to the console.
> > > > systemd when logging to /dev/console, long story short it calls isatty() on
> > > > /dev/console, and when /dev/console is actually /dev/ttyS0, and nothing is
> > > > connected to /dev/ttyS0, isatty() fails on /dev/console due to an input/output
> > > > error, causing systemd to not log the console output, because it rejects
> > > > /dev/console as not being a terminal.
> > > > 
> > > > 
> > > > This is noticed on a VT-less system with Plymouth. Plymouth calls the TIOCCONS
> > > > ioctl on a pty device it requests, to redirect console output, and in newer
> > > > versions, it displays the console logs on its own without the assistance of a
> > > > VT.
> > > > 
> > > > This part of it works, Plymouth is able to 'see' what gets written to
> > > > /dev/console, log output from processes that write to /dev/console directly
> > > > (for example 'echo hi > /dev/console") do appear in plymouth's
> > > > /var/log/boot.log, it is just that systemd is not writing to /dev/console
> > > > because isatty() fails to report /dev/console as a tty device.
> > > > 
> > > > The alternate fix in for systemds https://github.com/systemd/systemd/pull/33690[1]
> > > > is believed to be that when TIOCCONS is called on a PTY, or another terminal
> > > > device, that trying to call TCGETS on /dev/console should no longer result
> > > > in an error.
> > > > 
> > > > 
> > > > Replicating the issue:---------------------------------------------------------
> > > > 
> > > > This program replicates it:
> > > > -------------------------------------------------------------------------------
> > > > #include <stdio.h>
> > > > #include <fcntl.h>
> > > > #include <unistd.h>
> > > > #include <errno.h>
> > > > #include <string.h>
> > > > 
> > > > int main(void)
> > > > {
> > > >         int fd;
> > > > 
> > > >         if (getuid() != 0) {
> > > >                 printf("Must be root\n");
> > > >                 return 1;
> > > >         }
> > > > 
> > > >         fd = open ("/dev/console", O_RDONLY);
> > > >         if (!isatty(fd)) {
> > > >                 printf("err on /dev/console: %s\n", strerror(errno));
> > > >         }
> > > >         return 0;
> > > > }
> > > > -------------------------------------------------------------------------------
> > > > 
> > > > When the kernel console is /dev/ttyS0 and /dev/ttySO has no device connected,
> > > > it prints "err on /dev/console: Input/output error"
> > > > 
> > > > When I strace it, the relevant line is:
> > > > ioctl(3</dev/console<char 5:1>>, TCGETS, 0x7f...) = -1 EIO (Input/output error)
> > > 
> > > Do you have a proposed kernel change for this that solves this for your
> > > tests here?
> > > 
> > > thanks,
> > > 
> > > greg k-h
> > > 
> > Hi
> > 
> > Sorry if this is a duplicate, I accidentally had rich text sending turned on,
> > and did not realize until too late. Anyway, to answer the question, unfortunately
> > I have been unable to come up with a fix on my own 
> > 
> Would the fix be to make /sys/class/tty/console/active report the terminal
> that TIOCCONS was called against? I am probably wrong there.
> > Thanks
> > 
> 
> 
Hi.

So I was doing some grepping, and throwing in printk's in places, and then I
realized  that the ttynull driver. Turning it on, as it was disabled by default
in the base config I was using from Debian, and then booting with
console=ttynull causes /dev/console to work when systemd logs to it, and then
Plymouth when it calls TIOCCONS on its pty, the log messages makes it to the
pty. (The proper systemd status messages are now working again on VT-less
systems without the need for /dev/ttyS0 to be active)

So I think I found the solution. 

I think the only thing I have to ask from here is if there is a way to enable
the ttynull driver by default with a config option, so I don't have to boot
with console=ttynull in all my command lines

Thanks

Thanks




Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ