From: "Mike Gilbert" <floppym@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: lib/_emerge/
Date: Sun, 18 Sep 2022 18:35:04 +0000 (UTC) [thread overview]
Message-ID: <1663525999.47ac5aff464d414bcaa2d04e9eeff06aceec868c.floppym@gentoo> (raw)
commit: 47ac5aff464d414bcaa2d04e9eeff06aceec868c
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 17 23:37:46 2022 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sun Sep 18 18:33:19 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=47ac5aff
Move pty setup from AbstractEbuildProcess to SpawnProcess
This ensures that bash is always executed with a controlling terminal,
which prevents it from triggering sandbox failures on startup.
When merging a package, the 'instprep' phase is executed by a
MergeProcess task. The MergeProcess class derives from SpawnProcess
directly (not through AbstractEbuildProcess).
The SpawnProcess class calls portage.process.spawn() to execute a task.
When pid-sandbox is enabled, this creates a new PID namespaces, and
starts pid-ns-init to act as PID 1 in the new namespace.
pid-ns-init calls setsid(), which creates a new session and
disconnects the process from its controlling terminal.
Later, it calls ioctl(sys.stdout, termios.TIOCSCTTY) to associate the
process with the terminal attached to stdout. This only works if stdout
is a tty (not a pipe).
If pid-ns-init fails to associate the process with a controlling
terminal, bash will fail to open /dev/tty on startup. As a fallback,
bash will attempt to dereference /proc/self/fd/0 (stdin), and opens the
resulting path with O_RDWR.
If the ebuild sets PROPERTIES="interactive", stdin will be inherited
from the parent emerge process, and may be attached to a terminal device
(/dev/tty1, etc). Attempting to open this device is likely to trigger a
sandbox failure.
Bug: https://bugs.gentoo.org/870310
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
lib/_emerge/AbstractEbuildProcess.py | 8 --------
lib/_emerge/SpawnProcess.py | 7 ++++++-
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/lib/_emerge/AbstractEbuildProcess.py b/lib/_emerge/AbstractEbuildProcess.py
index 6d89d40f0..8712b8ea1 100644
--- a/lib/_emerge/AbstractEbuildProcess.py
+++ b/lib/_emerge/AbstractEbuildProcess.py
@@ -18,7 +18,6 @@ from portage.package.ebuild._ipc.ExitCommand import ExitCommand
from portage.package.ebuild._ipc.QueryCommand import QueryCommand
from portage import os
from portage.util.futures import asyncio
-from portage.util._pty import _create_pty_or_pipe
from portage.util import apply_secpass_permissions
portage.proxy.lazyimport.lazyimport(
@@ -336,13 +335,6 @@ class AbstractEbuildProcess(SpawnProcess):
self._eerror(textwrap.wrap(msg, 72))
- def _pipe(self, fd_pipes):
- stdout_pipe = None
- if not self.background:
- stdout_pipe = fd_pipes.get(1)
- got_pty, master_fd, slave_fd = _create_pty_or_pipe(copy_term_size=stdout_pipe)
- return (master_fd, slave_fd)
-
def _can_log(self, slave_fd):
# With sesandbox, logging works through a pty but not through a
# normal pipe. So, disable logging if ptys are broken.
diff --git a/lib/_emerge/SpawnProcess.py b/lib/_emerge/SpawnProcess.py
index c43b17c12..ed5724c91 100644
--- a/lib/_emerge/SpawnProcess.py
+++ b/lib/_emerge/SpawnProcess.py
@@ -16,6 +16,7 @@ from portage.output import EOutput
from portage.util import writemsg_level
from portage.util._async.BuildLogger import BuildLogger
from portage.util._async.PipeLogger import PipeLogger
+from portage.util._pty import _create_pty_or_pipe
from portage.util.futures import asyncio
@@ -217,7 +218,11 @@ class SpawnProcess(SubProcess):
@type fd_pipes: dict
@param fd_pipes: pipes from which to copy terminal size if desired.
"""
- return os.pipe()
+ stdout_pipe = None
+ if not self.background:
+ stdout_pipe = fd_pipes.get(1)
+ got_pty, master_fd, slave_fd = _create_pty_or_pipe(copy_term_size=stdout_pipe)
+ return (master_fd, slave_fd)
def _spawn(self, args, **kwargs):
spawn_func = portage.process.spawn
next reply other threads:[~2022-09-18 18:35 UTC|newest]
Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-18 18:35 Mike Gilbert [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-09-11 19:06 [gentoo-commits] proj/portage:master commit in: lib/_emerge/ Sam James
2025-08-27 18:46 Mike Gilbert
2025-06-24 1:09 Sam James
2025-01-16 21:04 Sam James
2024-09-29 22:52 Zac Medico
2024-09-11 1:39 Sam James
2024-09-11 1:39 Sam James
2024-08-14 16:05 Zac Medico
2024-08-14 15:17 Zac Medico
2024-08-02 13:38 James Le Cuirot
2024-05-26 23:28 Sam James
2024-05-26 23:28 Sam James
2024-05-26 23:28 Sam James
2024-05-26 18:02 Zac Medico
2024-05-21 16:08 Zac Medico
2024-05-13 5:43 Sam James
2024-05-04 12:05 Sam James
2024-03-28 14:48 Zac Medico
2024-03-09 23:31 Zac Medico
2024-02-24 20:03 Zac Medico
2024-02-21 16:00 Zac Medico
2024-02-21 16:00 Zac Medico
2024-02-21 16:00 Zac Medico
2024-01-17 12:53 Zac Medico
2024-01-04 16:00 Zac Medico
2024-01-03 19:59 Sam James
2023-12-30 21:45 Zac Medico
2023-12-27 13:30 Sam James
2023-12-26 22:03 Zac Medico
2023-12-19 4:15 Zac Medico
2023-12-10 22:29 Sam James
2023-12-04 6:45 Sam James
2023-11-29 20:05 Zac Medico
2023-11-29 19:56 Zac Medico
2023-11-29 0:33 Zac Medico
2023-11-28 22:51 Zac Medico
2023-11-25 6:33 Zac Medico
2023-11-14 4:24 Zac Medico
2023-11-11 7:23 Sam James
2023-11-10 16:04 Zac Medico
2023-11-06 15:58 Sam James
2023-10-22 22:51 Zac Medico
2023-10-22 22:09 Sam James
2023-10-22 4:38 Zac Medico
2023-10-14 20:01 Zac Medico
2023-10-05 4:45 Zac Medico
2023-09-21 15:47 Sam James
2023-09-21 15:47 Sam James
2023-09-15 10:36 Sam James
2023-09-15 10:36 Sam James
2023-07-11 5:02 Sam James
2023-06-29 8:19 Sam James
2023-06-29 8:19 Sam James
2023-06-29 8:19 Sam James
2023-06-14 5:06 Sam James
2023-06-14 5:03 Sam James
2023-06-14 1:44 Sam James
2023-05-23 2:59 Sam James
2023-02-18 0:00 Sam James
2023-02-17 1:23 Sam James
2023-01-10 15:12 Sam James
2022-11-28 15:32 Zac Medico
2022-11-28 15:32 Zac Medico
2022-09-25 19:12 Mike Gilbert
2022-09-25 1:36 Sam James
2022-09-20 3:39 Sam James
2022-08-13 17:56 Sam James
2022-06-17 17:05 Mike Gilbert
2022-06-07 23:48 Mike Gilbert
2022-04-22 23:08 Mike Gilbert
2022-03-27 23:07 Sam James
2022-03-06 19:25 Zac Medico
2022-02-14 21:51 Sam James
2021-12-04 4:56 Michał Górny
2021-10-28 4:52 Sam James
2021-10-28 4:07 Sam James
2021-09-21 5:51 Zac Medico
2021-09-21 5:51 Zac Medico
2021-06-13 22:41 Zac Medico
2021-05-24 6:33 Zac Medico
2021-05-24 6:33 Zac Medico
2021-05-24 6:33 Zac Medico
2021-05-16 22:29 Zac Medico
2021-05-08 17:54 Zac Medico
2021-05-01 22:47 Zac Medico
2021-05-01 22:47 Zac Medico
2020-12-03 23:20 Zac Medico
2020-09-21 5:54 Zac Medico
2020-08-09 21:48 Zac Medico
2020-08-09 0:15 Zac Medico
2020-08-04 3:11 Zac Medico
2020-08-03 23:28 Zac Medico
2020-08-03 23:28 Zac Medico
2020-08-03 21:42 Zac Medico
2020-08-03 21:42 Zac Medico
2020-08-03 21:42 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-08-03 19:30 Zac Medico
2020-07-22 20:42 Zac Medico
2020-07-18 23:54 Zac Medico
2020-06-24 5:41 Zac Medico
2020-06-23 18:00 Zac Medico
2020-04-09 20:48 Zac Medico
2020-04-09 6:48 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-04-08 5:56 Zac Medico
2020-03-23 1:51 Zac Medico
2020-03-23 0:42 Zac Medico
2020-03-22 20:56 Zac Medico
2020-03-07 22:18 Zac Medico
2020-03-07 20:14 Zac Medico
2020-03-06 3:36 Zac Medico
2020-03-06 3:04 Zac Medico
2020-03-05 17:39 Zac Medico
2020-03-05 8:26 Zac Medico
2020-03-04 10:28 Zac Medico
2020-03-03 5:47 Zac Medico
2020-03-02 3:54 Zac Medico
2020-03-01 20:31 Zac Medico
2020-03-01 18:36 Zac Medico
2020-03-01 2:17 Zac Medico
2020-03-01 1:47 Zac Medico
2020-03-01 0:57 Zac Medico
2020-02-29 22:49 Zac Medico
2020-02-29 21:48 Zac Medico
2020-02-29 18:52 Zac Medico
2020-02-29 8:39 Zac Medico
2020-02-24 6:07 Zac Medico
2020-02-22 0:06 Zac Medico
2020-02-18 6:45 Zac Medico
2020-02-18 0:21 Zac Medico
2020-02-17 23:14 Zac Medico
2020-02-11 20:49 Zac Medico
2020-02-10 5:11 Zac Medico
2020-02-03 20:34 Zac Medico
2020-02-03 20:30 Zac Medico
2019-12-26 21:22 Zac Medico
2019-12-23 23:34 Zac Medico
2019-11-28 1:43 Zac Medico
2019-11-25 6:38 Zac Medico
2019-11-18 2:56 Zac Medico
2019-11-17 21:04 Zac Medico
2019-11-16 9:23 Zac Medico
2019-10-27 19:33 Zac Medico
2019-10-23 17:03 Zac Medico
2019-09-01 1:09 Zac Medico
2019-08-06 3:14 Zac Medico
2019-07-08 6:49 Zac Medico
2019-04-24 18:54 Zac Medico
2019-04-21 1:02 Zac Medico
2019-01-21 21:59 Zac Medico
2018-11-25 8:25 Zac Medico
2018-10-06 1:03 Zac Medico
2018-08-02 18:45 Zac Medico
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=1663525999.47ac5aff464d414bcaa2d04e9eeff06aceec868c.floppym@gentoo \
--to=floppym@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.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