Public bug reported:
For the past year or so, the LXD team has been trying to resolve an
issue affecting screen, tmux and a bunch of other software (including
the "tty" command).
The problem comes from the fact that when attaching to a container, your
terminal's pts device comes from the host and therefore can't be found
in /dev/pts/.
glibc makes the assumption that it can readlink /proc/self/fd/0 and that
the target path will exist. This simply isn't true as the symlink target
returned by the kernel, is confusingly relative to the host's root and
not the container's.
Which means that if the target happens to exist, it's actually going to
be an entirely different pts device from the one that you're actually
attached to.
You therefore need to do something along the lines of:
- Resolve the symlink. If the target doesn't exist, return the symlink as the
ttyname.
- If the target does exist, check that its major and minor matches that of the
symlink itself, if it doesn't, then return the symlink rather than the target.
That's the ideal approach which makes existing software keep working properly
without the need for any added code. After about a year of bikeshedding, the
proposed glibc upstream fix has now evolved to instead returning ENODEV in the
is_pty function. This allows downstream glibc users to detect this case and
then use /proc/self/fd/0 rather than the return value of ttyname() but means
every software using ttyname() now needs fixing.
As we very much care about Ubuntu running properly inside LXD
containers, our suggested patchset includes both the ENODEV patch as is
still being considered by upstream (stuck on legal validation) AND
another patch which has ttyname() return the symlink when it receives
the ENODEV.
We feel this is the best way to fix the problem entirely right now. Once glibc
upstream merges the ENODEV side of this and all affected software get fixed
upstream to deal with it, we'll then be able to drop that patch without causing
any regressions.
** Affects: glibc (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1669578
Title:
Get ttyname() to work properly in containers
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1669578/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs