From: Cedric Le Goater <clg@fr.ibm.com>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: Andrew Morton <akpm@osdl.org>,
Sukadev Bhattiprolu <sukadev@us.ibm.com>,
Herbert Poetzl <herbert@13thfloor.at>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Kirill Korotaev <dev@openvz.org>
Subject: [PATCH] add process_session() helper routine
Date: Tue, 17 Oct 2006 10:37:44 +0200 [thread overview]
Message-ID: <45349658.9060805@fr.ibm.com> (raw)
This patch replaces occurences of task->signal->session by a new
process_session() helper routine.
It will be useful for pid namespaces to abstract the session pid
number.
Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Cc: Andrew Morton <akpm@osdl.org>
---
arch/mips/kernel/irixelf.c | 2 +-
drivers/char/mxser.c | 2 +-
drivers/char/rocket.c | 2 +-
drivers/char/tty_io.c | 18 +++++++++---------
fs/binfmt_elf.c | 4 ++--
fs/binfmt_elf_fdpic.c | 4 ++--
include/linux/sched.h | 5 +++++
kernel/exit.c | 19 ++++++++++---------
kernel/fork.c | 4 ++--
kernel/signal.c | 2 +-
kernel/sys.c | 8 ++++----
11 files changed, 38 insertions(+), 32 deletions(-)
Index: 2.6.19-rc2/arch/mips/kernel/irixelf.c
===================================================================
--- 2.6.19-rc2.orig/arch/mips/kernel/irixelf.c
+++ 2.6.19-rc2/arch/mips/kernel/irixelf.c
@@ -1149,7 +1149,7 @@ static int irix_core_dump(long signr, st
psinfo.pr_pid = prstatus.pr_pid = current->pid;
psinfo.pr_ppid = prstatus.pr_ppid = current->parent->pid;
psinfo.pr_pgrp = prstatus.pr_pgrp = process_group(current);
- psinfo.pr_sid = prstatus.pr_sid = current->signal->session;
+ psinfo.pr_sid = prstatus.pr_sid = process_session(current);
if (current->pid == current->tgid) {
/*
* This is the record for the group leader. Add in the
Index: 2.6.19-rc2/drivers/char/mxser.c
===================================================================
--- 2.6.19-rc2.orig/drivers/char/mxser.c
+++ 2.6.19-rc2/drivers/char/mxser.c
@@ -993,7 +993,7 @@ static int mxser_open(struct tty_struct
mxser_change_speed(info, NULL);
}
- info->session = current->signal->session;
+ info->session = process_session(current);
info->pgrp = process_group(current);
/*
Index: 2.6.19-rc2/drivers/char/rocket.c
===================================================================
--- 2.6.19-rc2.orig/drivers/char/rocket.c
+++ 2.6.19-rc2/drivers/char/rocket.c
@@ -1017,7 +1017,7 @@ static int rp_open(struct tty_struct *tt
/*
* Info->count is now 1; so it's safe to sleep now.
*/
- info->session = current->signal->session;
+ info->session = process_session(current);
info->pgrp = process_group(current);
if ((info->flags & ROCKET_INITIALIZED) == 0) {
Index: 2.6.19-rc2/drivers/char/tty_io.c
===================================================================
--- 2.6.19-rc2.orig/drivers/char/tty_io.c
+++ 2.6.19-rc2/drivers/char/tty_io.c
@@ -1512,9 +1512,9 @@ void disassociate_ctty(int on_exit)
/* Now clear signal->tty under the lock */
read_lock(&tasklist_lock);
- do_each_task_pid(current->signal->session, PIDTYPE_SID, p) {
+ do_each_task_pid(process_session(current), PIDTYPE_SID, p) {
p->signal->tty = NULL;
- } while_each_task_pid(current->signal->session, PIDTYPE_SID, p);
+ } while_each_task_pid(process_session(current), PIDTYPE_SID, p);
read_unlock(&tasklist_lock);
mutex_unlock(&tty_mutex);
unlock_kernel();
@@ -2554,7 +2554,7 @@ got_driver:
current->signal->tty = tty;
task_unlock(current);
current->signal->tty_old_pgrp = 0;
- tty->session = current->signal->session;
+ tty->session = process_session(current);
tty->pgrp = process_group(current);
}
return 0;
@@ -2890,7 +2890,7 @@ static int tiocsctty(struct tty_struct *
struct task_struct *p;
if (current->signal->leader &&
- (current->signal->session == tty->session))
+ (process_session(current) == tty->session))
return 0;
/*
* The process must be a session leader and
@@ -2922,7 +2922,7 @@ static int tiocsctty(struct tty_struct *
task_unlock(current);
mutex_unlock(&tty_mutex);
current->signal->tty_old_pgrp = 0;
- tty->session = current->signal->session;
+ tty->session = process_session(current);
tty->pgrp = process_group(current);
return 0;
}
@@ -2973,13 +2973,13 @@ static int tiocspgrp(struct tty_struct *
return retval;
if (!current->signal->tty ||
(current->signal->tty != real_tty) ||
- (real_tty->session != current->signal->session))
+ (real_tty->session != process_session(current)))
return -ENOTTY;
if (get_user(pgrp, p))
return -EFAULT;
if (pgrp < 0)
return -EINVAL;
- if (session_of_pgrp(pgrp) != current->signal->session)
+ if (session_of_pgrp(pgrp) != process_session(current))
return -EPERM;
real_tty->pgrp = pgrp;
return 0;
@@ -3334,7 +3334,7 @@ static void __do_SAK(void *arg)
/* Kill the entire session */
do_each_task_pid(session, PIDTYPE_SID, p) {
printk(KERN_NOTICE "SAK: killed process %d"
- " (%s): p->signal->session==tty->session\n",
+ " (%s): process_session(p)==tty->session\n",
p->pid, p->comm);
send_sig(SIGKILL, p, 1);
} while_each_task_pid(session, PIDTYPE_SID, p);
@@ -3344,7 +3344,7 @@ static void __do_SAK(void *arg)
do_each_thread(g, p) {
if (p->signal->tty == tty) {
printk(KERN_NOTICE "SAK: killed process %d"
- " (%s): p->signal->session==tty->session\n",
+ " (%s): process_session(p)==tty->session\n",
p->pid, p->comm);
send_sig(SIGKILL, p, 1);
continue;
Index: 2.6.19-rc2/fs/binfmt_elf.c
===================================================================
--- 2.6.19-rc2.orig/fs/binfmt_elf.c
+++ 2.6.19-rc2/fs/binfmt_elf.c
@@ -1313,7 +1313,7 @@ static void fill_prstatus(struct elf_prs
prstatus->pr_pid = p->pid;
prstatus->pr_ppid = p->parent->pid;
prstatus->pr_pgrp = process_group(p);
- prstatus->pr_sid = p->signal->session;
+ prstatus->pr_sid = process_session(p);
if (thread_group_leader(p)) {
/*
* This is the record for the group leader. Add in the
@@ -1359,7 +1359,7 @@ static int fill_psinfo(struct elf_prpsin
psinfo->pr_pid = p->pid;
psinfo->pr_ppid = p->parent->pid;
psinfo->pr_pgrp = process_group(p);
- psinfo->pr_sid = p->signal->session;
+ psinfo->pr_sid = process_session(p);
i = p->state ? ffz(~p->state) + 1 : 0;
psinfo->pr_state = i;
Index: 2.6.19-rc2/fs/binfmt_elf_fdpic.c
===================================================================
--- 2.6.19-rc2.orig/fs/binfmt_elf_fdpic.c
+++ 2.6.19-rc2/fs/binfmt_elf_fdpic.c
@@ -1325,7 +1325,7 @@ static void fill_prstatus(struct elf_prs
prstatus->pr_pid = p->pid;
prstatus->pr_ppid = p->parent->pid;
prstatus->pr_pgrp = process_group(p);
- prstatus->pr_sid = p->signal->session;
+ prstatus->pr_sid = process_session(p);
if (thread_group_leader(p)) {
/*
* This is the record for the group leader. Add in the
@@ -1374,7 +1374,7 @@ static int fill_psinfo(struct elf_prpsin
psinfo->pr_pid = p->pid;
psinfo->pr_ppid = p->parent->pid;
psinfo->pr_pgrp = process_group(p);
- psinfo->pr_sid = p->signal->session;
+ psinfo->pr_sid = process_session(p);
i = p->state ? ffz(~p->state) + 1 : 0;
psinfo->pr_state = i;
Index: 2.6.19-rc2/include/linux/sched.h
===================================================================
--- 2.6.19-rc2.orig/include/linux/sched.h
+++ 2.6.19-rc2/include/linux/sched.h
@@ -1031,6 +1031,11 @@ static inline pid_t process_group(struct
return tsk->signal->pgrp;
}
+static inline pid_t process_session(struct task_struct *tsk)
+{
+ return tsk->signal->session;
+}
+
static inline struct pid *task_pid(struct task_struct *task)
{
return task->pids[PIDTYPE_PID].pid;
Index: 2.6.19-rc2/kernel/exit.c
===================================================================
--- 2.6.19-rc2.orig/kernel/exit.c
+++ 2.6.19-rc2/kernel/exit.c
@@ -192,14 +192,14 @@ int session_of_pgrp(int pgrp)
read_lock(&tasklist_lock);
do_each_task_pid(pgrp, PIDTYPE_PGID, p) {
- if (p->signal->session > 0) {
- sid = p->signal->session;
+ if (process_session(p) > 0) {
+ sid = process_session(p);
goto out;
}
} while_each_task_pid(pgrp, PIDTYPE_PGID, p);
p = find_task_by_pid(pgrp);
if (p)
- sid = p->signal->session;
+ sid = process_session(p);
out:
read_unlock(&tasklist_lock);
@@ -224,8 +224,8 @@ static int will_become_orphaned_pgrp(int
|| p->exit_state
|| is_init(p->real_parent))
continue;
- if (process_group(p->real_parent) != pgrp
- && p->real_parent->signal->session == p->signal->session) {
+ if (process_group(p->real_parent) != pgrp &&
+ process_session(p->real_parent) == process_session(p)) {
ret = 0;
break;
}
@@ -301,7 +301,7 @@ void __set_special_pids(pid_t session, p
{
struct task_struct *curr = current->group_leader;
- if (curr->signal->session != session) {
+ if (process_session(curr) != session) {
detach_pid(curr, PIDTYPE_SID);
curr->signal->session = session;
attach_pid(curr, PIDTYPE_SID, session);
@@ -648,10 +648,11 @@ reparent_thread(struct task_struct *p, s
* outside, so the child pgrp is now orphaned.
*/
if ((process_group(p) != process_group(father)) &&
- (p->signal->session == father->signal->session)) {
+ (process_session(p) == process_session(father))) {
int pgrp = process_group(p);
- if (will_become_orphaned_pgrp(pgrp, NULL) && has_stopped_jobs(pgrp)) {
+ if (will_become_orphaned_pgrp(pgrp, NULL) &&
+ has_stopped_jobs(pgrp)) {
__kill_pg_info(SIGHUP, SEND_SIG_PRIV, pgrp);
__kill_pg_info(SIGCONT, SEND_SIG_PRIV, pgrp);
}
@@ -785,7 +786,7 @@ static void exit_notify(struct task_stru
t = tsk->real_parent;
if ((process_group(t) != process_group(tsk)) &&
- (t->signal->session == tsk->signal->session) &&
+ (process_session(t) == process_session(tsk)) &&
will_become_orphaned_pgrp(process_group(tsk), tsk) &&
has_stopped_jobs(process_group(tsk))) {
__kill_pg_info(SIGHUP, SEND_SIG_PRIV, process_group(tsk));
Index: 2.6.19-rc2/kernel/fork.c
===================================================================
--- 2.6.19-rc2.orig/kernel/fork.c
+++ 2.6.19-rc2/kernel/fork.c
@@ -1244,9 +1244,9 @@ static struct task_struct *copy_process(
if (thread_group_leader(p)) {
p->signal->tty = current->signal->tty;
p->signal->pgrp = process_group(current);
- p->signal->session = current->signal->session;
+ p->signal->session = process_session(current);
attach_pid(p, PIDTYPE_PGID, process_group(p));
- attach_pid(p, PIDTYPE_SID, p->signal->session);
+ attach_pid(p, PIDTYPE_SID, process_session(p));
list_add_tail_rcu(&p->tasks, &init_task.tasks);
__get_cpu_var(process_counts)++;
Index: 2.6.19-rc2/kernel/signal.c
===================================================================
--- 2.6.19-rc2.orig/kernel/signal.c
+++ 2.6.19-rc2/kernel/signal.c
@@ -575,7 +575,7 @@ static int check_kill_permission(int sig
error = -EPERM;
if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info)))
&& ((sig != SIGCONT) ||
- (current->signal->session != t->signal->session))
+ (process_session(current) != process_session(t)))
&& (current->euid ^ t->suid) && (current->euid ^ t->uid)
&& (current->uid ^ t->suid) && (current->uid ^ t->uid)
&& !capable(CAP_KILL))
Index: 2.6.19-rc2/kernel/sys.c
===================================================================
--- 2.6.19-rc2.orig/kernel/sys.c
+++ 2.6.19-rc2/kernel/sys.c
@@ -1381,7 +1381,7 @@ asmlinkage long sys_setpgid(pid_t pid, p
if (p->real_parent == group_leader) {
err = -EPERM;
- if (p->signal->session != group_leader->signal->session)
+ if (process_session(p) != process_session(group_leader))
goto out;
err = -EACCES;
if (p->did_exec)
@@ -1400,7 +1400,7 @@ asmlinkage long sys_setpgid(pid_t pid, p
struct task_struct *p;
do_each_task_pid(pgid, PIDTYPE_PGID, p) {
- if (p->signal->session == group_leader->signal->session)
+ if (process_session(p) == process_session(group_leader))
goto ok_pgid;
} while_each_task_pid(pgid, PIDTYPE_PGID, p);
goto out;
@@ -1459,7 +1459,7 @@ asmlinkage long sys_getpgrp(void)
asmlinkage long sys_getsid(pid_t pid)
{
if (!pid)
- return current->signal->session;
+ return process_session(current);
else {
int retval;
struct task_struct *p;
@@ -1471,7 +1471,7 @@ asmlinkage long sys_getsid(pid_t pid)
if (p) {
retval = security_task_getsid(p);
if (!retval)
- retval = p->signal->session;
+ retval = process_session(p);
}
read_unlock(&tasklist_lock);
return retval;
next reply other threads:[~2006-10-17 8:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-17 8:37 Cedric Le Goater [this message]
2006-10-17 21:51 ` [PATCH] add process_session() helper routine Andrew Morton
2006-10-18 20:15 ` Cedric Le Goater
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=45349658.9060805@fr.ibm.com \
--to=clg@fr.ibm.com \
--cc=akpm@osdl.org \
--cc=dev@openvz.org \
--cc=ebiederm@xmission.com \
--cc=herbert@13thfloor.at \
--cc=linux-kernel@vger.kernel.org \
--cc=sukadev@us.ibm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.