zsh-workers
 help / color / mirror / code / Atom feed
From: Chirantan Ekbote <chirantan@google.com>
To: zsh-workers@zsh.org
Subject: Bug in interaction with pid namespaces
Date: Tue, 16 Dec 2014 15:07:28 -0800	[thread overview]
Message-ID: <CAJFHJrrBgFGRipY==ZcW+hxY37e1dPRs9hRLK+SjgXeESabPOA@mail.gmail.com> (raw)

Hi,

I think I've found an issue with the way zsh interacts with pid namespaces [1].
Specifically the problem is that when zsh is launched immediately following the
creation of a new pid namespace it doesn't take ownership of the process group,
causing things like SIGINT to be sent to the process that spawned zsh rather
than zsh itself.  This can be minimally reproduced by running:

    unshare -p -f --mount-proc zsh -l

and then running

    ps o pid,pgid,comm

inside the newly created shell.  The expected result is that the pgid for zsh
should be the same as its pid, indicating that zsh has become the leader of a
new process group.  Instead I see that zsh has pgid 0 and a different pid
(usually 1).  If you then press ctrl-c, zsh will exit rather than just show the
prompt again.  I think this can be fixed with the following patch:

diff --git a/Src/jobs.c b/Src/jobs.c
index a668b07..8c4254a 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -2734,7 +2734,7 @@ acquire_pgrp(void)
     long ttpgrp;
     sigset_t blockset, oldset;

-    if ((mypgrp = GETPGRP()) > 0) {
+    if ((mypgrp = GETPGRP()) >= 0) {
        long lastpgrp = mypgrp;
        sigemptyset(&blockset);
        sigaddset(&blockset, SIGTTIN);

but this brings up another problem.  When zsh exits it tries to restore the
original process group using setpgrp(0, origpgrp).  This is an issue when
origpgrp is 0 because setpgrp(0, 0) actually means "set the process group of the
calling process to be the same as its pid", which is not the intention of the
call at all.

What's the proper way to fix this?

Thanks,
Chirantan



[1] http://lwn.net/Articles/531419/


             reply	other threads:[~2014-12-16 23:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-16 23:07 Chirantan Ekbote [this message]
2014-12-17  6:27 ` Bart Schaefer
2014-12-17  7:50   ` Chirantan Ekbote
2014-12-17 16:54     ` Bart Schaefer
2014-12-17 22:52       ` Chirantan Ekbote
2014-12-17  7:32 ` Bart Schaefer

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='CAJFHJrrBgFGRipY==ZcW+hxY37e1dPRs9hRLK+SjgXeESabPOA@mail.gmail.com' \
    --to=chirantan@google.com \
    --cc=zsh-workers@zsh.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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

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).