From: nerdopolis <bluescreen_avenger@verizon.net>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: jirislaby@kernel.org, linux-kernel@vger.kernel.org,
linux-serial@vger.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)
Date: Sun, 28 Jul 2024 13:56:43 -0400 [thread overview]
Message-ID: <1831764.TLkxdtWsSY@nerdopolis2> (raw)
In-Reply-To: <2169369.OBFZWjSADL@nerdopolis2>
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
prev parent reply other threads:[~2024-07-28 17:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <8411114.T7Z3S40VBb.ref@nerdopolis2>
[not found] ` <8411114.T7Z3S40VBb@nerdopolis2>
2024-07-12 12:59 ` When /dev/console is a disconnected /dev/ttyS0, TCGETS on /dev/console results in EIO (Even if TIOCCONS is called on a PTY) Greg KH
2024-07-18 11:52 ` nerdopolis
2024-07-25 3:17 ` nerdopolis
2024-07-28 17:56 ` nerdopolis [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1831764.TLkxdtWsSY@nerdopolis2 \
--to=bluescreen_avenger@verizon.net \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).