diff options
Diffstat (limited to 'kernel/sys.c')
-rw-r--r-- | kernel/sys.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index a0c1a29a507f..1ac2d1c5d84e 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -1484,7 +1484,6 @@ asmlinkage long sys_setsid(void) | |||
1484 | pid_t session; | 1484 | pid_t session; |
1485 | int err = -EPERM; | 1485 | int err = -EPERM; |
1486 | 1486 | ||
1487 | mutex_lock(&tty_mutex); | ||
1488 | write_lock_irq(&tasklist_lock); | 1487 | write_lock_irq(&tasklist_lock); |
1489 | 1488 | ||
1490 | /* Fail if I am already a session leader */ | 1489 | /* Fail if I am already a session leader */ |
@@ -1504,12 +1503,15 @@ asmlinkage long sys_setsid(void) | |||
1504 | 1503 | ||
1505 | group_leader->signal->leader = 1; | 1504 | group_leader->signal->leader = 1; |
1506 | __set_special_pids(session, session); | 1505 | __set_special_pids(session, session); |
1506 | |||
1507 | spin_lock(&group_leader->sighand->siglock); | ||
1507 | group_leader->signal->tty = NULL; | 1508 | group_leader->signal->tty = NULL; |
1508 | group_leader->signal->tty_old_pgrp = 0; | 1509 | group_leader->signal->tty_old_pgrp = 0; |
1510 | spin_unlock(&group_leader->sighand->siglock); | ||
1511 | |||
1509 | err = process_group(group_leader); | 1512 | err = process_group(group_leader); |
1510 | out: | 1513 | out: |
1511 | write_unlock_irq(&tasklist_lock); | 1514 | write_unlock_irq(&tasklist_lock); |
1512 | mutex_unlock(&tty_mutex); | ||
1513 | return err; | 1515 | return err; |
1514 | } | 1516 | } |
1515 | 1517 | ||