Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
59ee66b5
Commit
59ee66b5
authored
Oct 10, 2003
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/bk/linux-2.6.0
into intel.com:/home/lenb/bk/linux-acpi-test-2.6.0
parents
a4d5fc0a
06349d9d
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
298 additions
and
155 deletions
+298
-155
arch/i386/mm/fault.c
arch/i386/mm/fault.c
+178
-12
arch/ia64/kernel/unaligned.c
arch/ia64/kernel/unaligned.c
+1
-1
arch/sparc64/solaris/misc.c
arch/sparc64/solaris/misc.c
+1
-1
drivers/char/n_tty.c
drivers/char/n_tty.c
+1
-2
drivers/char/rocket.c
drivers/char/rocket.c
+1
-1
drivers/char/tty_io.c
drivers/char/tty_io.c
+45
-43
drivers/char/vt.c
drivers/char/vt.c
+1
-1
drivers/char/vt_ioctl.c
drivers/char/vt_ioctl.c
+2
-1
drivers/media/video/zoran_card.c
drivers/media/video/zoran_card.c
+2
-0
drivers/media/video/zoran_device.c
drivers/media/video/zoran_device.c
+2
-0
drivers/media/video/zoran_driver.c
drivers/media/video/zoran_driver.c
+1
-0
drivers/net/slip.c
drivers/net/slip.c
+1
-1
fs/binfmt_elf.c
fs/binfmt_elf.c
+2
-2
fs/compat_ioctl.c
fs/compat_ioctl.c
+1
-1
fs/dquot.c
fs/dquot.c
+5
-5
fs/exec.c
fs/exec.c
+0
-5
fs/open.c
fs/open.c
+1
-1
fs/proc/array.c
fs/proc/array.c
+4
-4
include/asm-i386/processor.h
include/asm-i386/processor.h
+3
-3
include/linux/sched.h
include/linux/sched.h
+7
-25
kernel/acct.c
kernel/acct.c
+1
-1
kernel/exit.c
kernel/exit.c
+11
-11
kernel/fork.c
kernel/fork.c
+4
-10
kernel/pid.c
kernel/pid.c
+4
-4
kernel/signal.c
kernel/signal.c
+2
-3
kernel/sys.c
kernel/sys.c
+9
-9
net/ipv4/netfilter/ipt_owner.c
net/ipv4/netfilter/ipt_owner.c
+1
-1
net/ipv6/netfilter/ip6t_owner.c
net/ipv6/netfilter/ip6t_owner.c
+1
-1
net/sunrpc/clnt.c
net/sunrpc/clnt.c
+6
-6
No files found.
arch/i386/mm/fault.c
View file @
59ee66b5
...
...
@@ -19,6 +19,7 @@
#include <linux/init.h>
#include <linux/tty.h>
#include <linux/vt_kern.h>
/* For unblank_screen() */
#include <linux/highmem.h>
#include <linux/module.h>
#include <asm/system.h>
...
...
@@ -55,6 +56,147 @@ void bust_spinlocks(int yes)
console_loglevel
=
loglevel_save
;
}
/*
* Return EIP plus the CS segment base. The segment limit is also
* adjusted, clamped to the kernel/user address space (whichever is
* appropriate), and returned in *eip_limit.
*
* The segment is checked, because it might have been changed by another
* task between the original faulting instruction and here.
*
* If CS is no longer a valid code segment, or if EIP is beyond the
* limit, or if it is a kernel address when CS is not a kernel segment,
* then the returned value will be greater than *eip_limit.
*
* This is slow, but is very rarely executed.
*/
static
inline
unsigned
long
get_segment_eip
(
struct
pt_regs
*
regs
,
unsigned
long
*
eip_limit
)
{
unsigned
long
eip
=
regs
->
eip
;
unsigned
seg
=
regs
->
xcs
&
0xffff
;
u32
seg_ar
,
seg_limit
,
base
,
*
desc
;
/* The standard kernel/user address space limit. */
*
eip_limit
=
(
seg
&
3
)
?
USER_DS
.
seg
:
KERNEL_DS
.
seg
;
/* Unlikely, but must come before segment checks. */
if
(
unlikely
((
regs
->
eflags
&
VM_MASK
)
!=
0
))
return
eip
+
(
seg
<<
4
);
/* By far the most common cases. */
if
(
likely
(
seg
==
__USER_CS
||
seg
==
__KERNEL_CS
))
return
eip
;
/* Check the segment exists, is within the current LDT/GDT size,
that kernel/user (ring 0..3) has the appropriate privilege,
that it's a code segment, and get the limit. */
__asm__
(
"larl %3,%0; lsll %3,%1"
:
"=&r"
(
seg_ar
),
"=r"
(
seg_limit
)
:
"0"
(
0
),
"rm"
(
seg
));
if
((
~
seg_ar
&
0x9800
)
||
eip
>
seg_limit
)
{
*
eip_limit
=
0
;
return
1
;
/* So that returned eip > *eip_limit. */
}
/* Get the GDT/LDT descriptor base.
When you look for races in this code remember that
LDT and other horrors are only used in user space. */
if
(
seg
&
(
1
<<
2
))
{
/* Must lock the LDT while reading it. */
down
(
&
current
->
mm
->
context
.
sem
);
desc
=
current
->
mm
->
context
.
ldt
;
desc
=
(
void
*
)
desc
+
(
seg
&
~
7
);
}
else
{
/* Must disable preemption while reading the GDT. */
desc
=
(
u32
*
)
&
cpu_gdt_table
[
get_cpu
()];
desc
=
(
void
*
)
desc
+
(
seg
&
~
7
);
}
/* Decode the code segment base from the descriptor */
base
=
(
desc
[
0
]
>>
16
)
|
((
desc
[
1
]
&
0xff
)
<<
16
)
|
(
desc
[
1
]
&
0xff000000
);
if
(
seg
&
(
1
<<
2
))
{
up
(
&
current
->
mm
->
context
.
sem
);
}
else
put_cpu
();
/* Adjust EIP and segment limit, and clamp at the kernel limit.
It's legitimate for segments to wrap at 0xffffffff. */
seg_limit
+=
base
;
if
(
seg_limit
<
*
eip_limit
&&
seg_limit
>=
base
)
*
eip_limit
=
seg_limit
;
return
eip
+
base
;
}
/*
* Sometimes AMD Athlon/Opteron CPUs report invalid exceptions on prefetch.
* Check that here and ignore it.
*/
static
int
__is_prefetch
(
struct
pt_regs
*
regs
,
unsigned
long
addr
)
{
unsigned
long
limit
;
unsigned
long
instr
=
get_segment_eip
(
regs
,
&
limit
);
int
scan_more
=
1
;
int
prefetch
=
0
;
int
i
;
for
(
i
=
0
;
scan_more
&&
i
<
15
;
i
++
)
{
unsigned
char
opcode
;
unsigned
char
instr_hi
;
unsigned
char
instr_lo
;
if
(
instr
>
limit
)
break
;
if
(
__get_user
(
opcode
,
(
unsigned
char
*
)
instr
))
break
;
instr_hi
=
opcode
&
0xf0
;
instr_lo
=
opcode
&
0x0f
;
instr
++
;
switch
(
instr_hi
)
{
case
0x20
:
case
0x30
:
/* Values 0x26,0x2E,0x36,0x3E are valid x86 prefixes. */
scan_more
=
((
instr_lo
&
7
)
==
0x6
);
break
;
case
0x60
:
/* 0x64 thru 0x67 are valid prefixes in all modes. */
scan_more
=
(
instr_lo
&
0xC
)
==
0x4
;
break
;
case
0xF0
:
/* 0xF0, 0xF2, and 0xF3 are valid prefixes */
scan_more
=
!
instr_lo
||
(
instr_lo
>>
1
)
==
1
;
break
;
case
0x00
:
/* Prefetch instruction is 0x0F0D or 0x0F18 */
scan_more
=
0
;
if
(
instr
>
limit
)
break
;
if
(
__get_user
(
opcode
,
(
unsigned
char
*
)
instr
))
break
;
prefetch
=
(
instr_lo
==
0xF
)
&&
(
opcode
==
0x0D
||
opcode
==
0x18
);
break
;
default:
scan_more
=
0
;
break
;
}
}
return
prefetch
;
}
static
inline
int
is_prefetch
(
struct
pt_regs
*
regs
,
unsigned
long
addr
)
{
if
(
unlikely
(
boot_cpu_data
.
x86_vendor
==
X86_VENDOR_AMD
&&
boot_cpu_data
.
x86
>=
6
))
return
__is_prefetch
(
regs
,
addr
);
return
0
;
}
asmlinkage
void
do_invalid_op
(
struct
pt_regs
*
,
unsigned
long
);
/*
...
...
@@ -86,6 +228,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
tsk
=
current
;
info
.
si_code
=
SEGV_MAPERR
;
/*
* We fault-in kernel-space virtual memory on-demand. The
* 'reference' page table is init_mm.pgd.
...
...
@@ -99,18 +243,24 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
* (error_code & 4) == 0, and that the fault was not a
* protection error (error_code & 1) == 0.
*/
if
(
address
>=
TASK_SIZE
&&
!
(
error_code
&
5
))
goto
vmalloc_fault
;
if
(
unlikely
(
address
>=
TASK_SIZE
))
{
if
(
!
(
error_code
&
5
))
goto
vmalloc_fault
;
/*
* Don't take the mm semaphore here. If we fixup a prefetch
* fault we could otherwise deadlock.
*/
goto
bad_area_nosemaphore
;
}
mm
=
tsk
->
mm
;
info
.
si_code
=
SEGV_MAPERR
;
/*
* If we're in an interrupt, have no user context or are running in an
* atomic region then we must not take the fault..
*/
if
(
in_atomic
()
||
!
mm
)
goto
no_context
;
goto
bad_area_nosemaphore
;
down_read
(
&
mm
->
mmap_sem
);
...
...
@@ -198,8 +348,16 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
bad_area:
up_read
(
&
mm
->
mmap_sem
);
bad_area_nosemaphore:
/* User mode accesses just cause a SIGSEGV */
if
(
error_code
&
4
)
{
/*
* Valid to do another page fault here because this one came
* from user space.
*/
if
(
is_prefetch
(
regs
,
address
))
return
;
tsk
->
thread
.
cr2
=
address
;
tsk
->
thread
.
error_code
=
error_code
;
tsk
->
thread
.
trap_no
=
14
;
...
...
@@ -232,6 +390,14 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
if
(
fixup_exception
(
regs
))
return
;
/*
* Valid to do another page fault here, because if this fault
* had been triggered by is_prefetch fixup_exception would have
* handled it.
*/
if
(
is_prefetch
(
regs
,
address
))
return
;
/*
* Oops. The kernel tried to access some bad page. We'll have to
* terminate things with extreme prejudice.
...
...
@@ -286,10 +452,14 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
do_sigbus:
up_read
(
&
mm
->
mmap_sem
);
/*
* Send a sigbus, regardless of whether we were in kernel
* or user mode.
*/
/* Kernel mode? Handle exceptions or die */
if
(
!
(
error_code
&
4
))
goto
no_context
;
/* User space => ok to do another page fault */
if
(
is_prefetch
(
regs
,
address
))
return
;
tsk
->
thread
.
cr2
=
address
;
tsk
->
thread
.
error_code
=
error_code
;
tsk
->
thread
.
trap_no
=
14
;
...
...
@@ -298,10 +468,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
info
.
si_code
=
BUS_ADRERR
;
info
.
si_addr
=
(
void
*
)
address
;
force_sig_info
(
SIGBUS
,
&
info
,
tsk
);
/* Kernel mode? Handle exceptions or die */
if
(
!
(
error_code
&
4
))
goto
no_context
;
return
;
vmalloc_fault:
...
...
arch/ia64/kernel/unaligned.c
View file @
59ee66b5
...
...
@@ -1347,7 +1347,7 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
* be holding locks...
*/
if
(
user_mode
(
regs
))
tty_write_message
(
process_tty
(
current
)
,
buf
);
tty_write_message
(
current
->
tty
,
buf
);
buf
[
len
-
1
]
=
'\0'
;
/* drop '\r' */
printk
(
KERN_WARNING
"%s"
,
buf
);
/* watch for command names containing %s */
}
...
...
arch/sparc64/solaris/misc.c
View file @
59ee66b5
...
...
@@ -402,7 +402,7 @@ asmlinkage int solaris_procids(int cmd, s32 pid, s32 pgid)
Solaris setpgrp and setsid? */
ret
=
sys_setpgid
(
0
,
0
);
if
(
ret
)
return
ret
;
current
->
signal
->
tty
=
NULL
;
current
->
tty
=
NULL
;
return
process_group
(
current
);
}
case
2
:
/* getsid */
...
...
drivers/char/n_tty.c
View file @
59ee66b5
...
...
@@ -974,8 +974,7 @@ static ssize_t read_chan(struct tty_struct *tty, struct file *file,
/* NOTE: not yet done after every sleep pending a thorough
check of the logic of this change. -- jlc */
/* don't stop on /dev/console */
if
(
file
->
f_op
->
write
!=
redirected_tty_write
&&
process_tty
(
current
)
==
tty
)
{
if
(
file
->
f_op
->
write
!=
redirected_tty_write
&&
current
->
tty
==
tty
)
{
if
(
tty
->
pgrp
<=
0
)
printk
(
"read_chan: tty->pgrp <= 0!
\n
"
);
else
if
(
process_group
(
current
)
!=
tty
->
pgrp
)
{
...
...
drivers/char/rocket.c
View file @
59ee66b5
...
...
@@ -953,7 +953,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
/*
* Info->count is now 1; so it's safe to sleep now.
*/
info
->
session
=
process_session
(
current
)
;
info
->
session
=
current
->
session
;
info
->
pgrp
=
process_group
(
current
);
if
((
info
->
flags
&
ROCKET_INITIALIZED
)
==
0
)
{
...
...
drivers/char/tty_io.c
View file @
59ee66b5
...
...
@@ -316,7 +316,7 @@ struct tty_driver *get_tty_driver(dev_t device, int *index)
*/
int
tty_check_change
(
struct
tty_struct
*
tty
)
{
if
(
process_tty
(
current
)
!=
tty
)
if
(
current
->
tty
!=
tty
)
return
0
;
if
(
tty
->
pgrp
<=
0
)
{
printk
(
KERN_WARNING
"tty_check_change: tty->pgrp <= 0!
\n
"
);
...
...
@@ -483,14 +483,14 @@ void do_tty_hangup(void *data)
if
(
tty
->
session
>
0
)
{
struct
list_head
*
l
;
for_each_task_pid
(
tty
->
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
{
if
(
p
rocess_tty
(
p
)
==
tty
)
p
->
signal
->
tty
=
NULL
;
if
(
!
p
rocess_session_leader
(
p
)
)
if
(
p
->
tty
==
tty
)
p
->
tty
=
NULL
;
if
(
!
p
->
leader
)
continue
;
send_group_sig_info
(
SIGHUP
,
SEND_SIG_PRIV
,
p
);
send_group_sig_info
(
SIGCONT
,
SEND_SIG_PRIV
,
p
);
if
(
tty
->
pgrp
>
0
)
p
->
signal
->
tty_old_pgrp
=
tty
->
pgrp
;
p
->
tty_old_pgrp
=
tty
->
pgrp
;
}
}
read_unlock
(
&
tasklist_lock
);
...
...
@@ -567,15 +567,15 @@ void disassociate_ctty(int on_exit)
lock_kernel
();
tty
=
process_tty
(
current
)
;
tty
=
current
->
tty
;
if
(
tty
)
{
tty_pgrp
=
tty
->
pgrp
;
if
(
on_exit
&&
tty
->
driver
->
type
!=
TTY_DRIVER_TYPE_PTY
)
tty_vhangup
(
tty
);
}
else
{
if
(
current
->
signal
->
tty_old_pgrp
)
{
kill_pg
(
current
->
signal
->
tty_old_pgrp
,
SIGHUP
,
on_exit
);
kill_pg
(
current
->
signal
->
tty_old_pgrp
,
SIGCONT
,
on_exit
);
if
(
current
->
tty_old_pgrp
)
{
kill_pg
(
current
->
tty_old_pgrp
,
SIGHUP
,
on_exit
);
kill_pg
(
current
->
tty_old_pgrp
,
SIGCONT
,
on_exit
);
}
unlock_kernel
();
return
;
...
...
@@ -586,13 +586,13 @@ void disassociate_ctty(int on_exit)
kill_pg
(
tty_pgrp
,
SIGCONT
,
on_exit
);
}
current
->
signal
->
tty_old_pgrp
=
0
;
current
->
tty_old_pgrp
=
0
;
tty
->
session
=
0
;
tty
->
pgrp
=
-
1
;
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
process_session
(
current
)
,
PIDTYPE_SID
,
p
,
l
,
pid
)
p
->
signal
->
tty
=
NULL
;
for_each_task_pid
(
current
->
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
p
->
tty
=
NULL
;
read_unlock
(
&
tasklist_lock
);
unlock_kernel
();
}
...
...
@@ -1220,10 +1220,10 @@ static void release_dev(struct file * filp)
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
tty
->
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
p
->
signal
->
tty
=
NULL
;
p
->
tty
=
NULL
;
if
(
o_tty
)
for_each_task_pid
(
o_tty
->
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
p
->
signal
->
tty
=
NULL
;
p
->
tty
=
NULL
;
read_unlock
(
&
tasklist_lock
);
}
...
...
@@ -1294,10 +1294,10 @@ static int tty_open(struct inode * inode, struct file * filp)
retry_open:
noctty
=
filp
->
f_flags
&
O_NOCTTY
;
if
(
device
==
MKDEV
(
TTYAUX_MAJOR
,
0
))
{
if
(
!
process_tty
(
current
)
)
if
(
!
current
->
tty
)
return
-
ENXIO
;
driver
=
process_tty
(
current
)
->
driver
;
index
=
process_tty
(
current
)
->
index
;
driver
=
current
->
tty
->
driver
;
index
=
current
->
tty
->
index
;
filp
->
f_flags
|=
O_NONBLOCK
;
/* Don't let /dev/tty block */
/* noctty = 1; */
goto
got_driver
;
...
...
@@ -1391,13 +1391,15 @@ static int tty_open(struct inode * inode, struct file * filp)
filp
->
f_op
=
&
tty_fops
;
goto
retry_open
;
}
if
(
!
noctty
&&
process_session_leader
(
current
)
&&
!
process_tty
(
current
)
&&
tty
->
session
==
0
)
{
if
(
!
noctty
&&
current
->
leader
&&
!
current
->
tty
&&
tty
->
session
==
0
)
{
task_lock
(
current
);
current
->
signal
->
tty
=
tty
;
current
->
tty
=
tty
;
task_unlock
(
current
);
current
->
signal
->
tty_old_pgrp
=
0
;
tty
->
session
=
process_session
(
current
)
;
current
->
tty_old_pgrp
=
0
;
tty
->
session
=
current
->
session
;
tty
->
pgrp
=
process_group
(
current
);
}
return
0
;
...
...
@@ -1455,7 +1457,7 @@ static int tiocsti(struct tty_struct *tty, char * arg)
{
char
ch
,
mbz
=
0
;
if
((
process_tty
(
current
)
!=
tty
)
&&
!
capable
(
CAP_SYS_ADMIN
))
if
((
current
->
tty
!=
tty
)
&&
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
if
(
get_user
(
ch
,
arg
))
return
-
EFAULT
;
...
...
@@ -1541,14 +1543,14 @@ static int tiocsctty(struct tty_struct *tty, int arg)
struct
pid
*
pid
;
task_t
*
p
;
if
(
process_session_leader
(
current
)
&&
(
process_session
(
current
)
==
tty
->
session
))
if
(
current
->
leader
&&
(
current
->
session
==
tty
->
session
))
return
0
;
/*
* The process must be a session leader and
* not have a controlling tty already.
*/
if
(
!
process_session_leader
(
current
)
||
process_tty
(
current
)
)
if
(
!
current
->
leader
||
current
->
tty
)
return
-
EPERM
;
if
(
tty
->
session
>
0
)
{
/*
...
...
@@ -1562,16 +1564,16 @@ static int tiocsctty(struct tty_struct *tty, int arg)
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
tty
->
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
p
->
signal
->
tty
=
NULL
;
p
->
tty
=
NULL
;
read_unlock
(
&
tasklist_lock
);
}
else
return
-
EPERM
;
}
task_lock
(
current
);
current
->
signal
->
tty
=
tty
;
current
->
tty
=
tty
;
task_unlock
(
current
);
current
->
signal
->
tty_old_pgrp
=
0
;
tty
->
session
=
process_session
(
current
)
;
current
->
tty_old_pgrp
=
0
;
tty
->
session
=
current
->
session
;
tty
->
pgrp
=
process_group
(
current
);
return
0
;
}
...
...
@@ -1582,13 +1584,12 @@ static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t
* (tty == real_tty) is a cheap way of
* testing if the tty is NOT a master pty.
*/
if
(
tty
==
real_tty
&&
process_tty
(
current
)
!=
real_tty
)
if
(
tty
==
real_tty
&&
current
->
tty
!=
real_tty
)
return
-
ENOTTY
;
return
put_user
(
real_tty
->
pgrp
,
arg
);
}
static
int
tiocspgrp
(
struct
tty_struct
*
tty
,
struct
tty_struct
*
real_tty
,
pid_t
*
arg
)
static
int
tiocspgrp
(
struct
tty_struct
*
tty
,
struct
tty_struct
*
real_tty
,
pid_t
*
arg
)
{
pid_t
pgrp
;
int
retval
=
tty_check_change
(
real_tty
);
...
...
@@ -1597,14 +1598,15 @@ static int tiocspgrp(struct tty_struct *tty,
return
-
ENOTTY
;
if
(
retval
)
return
retval
;
if
(
!
process_tty
(
current
)
||
(
process_tty
(
current
)
!=
real_tty
)
||
(
real_tty
->
session
!=
process_session
(
current
)))
if
(
!
current
->
tty
||
(
current
->
tty
!=
real_tty
)
||
(
real_tty
->
session
!=
current
->
session
))
return
-
ENOTTY
;
if
(
get_user
(
pgrp
,
(
pid_t
*
)
arg
))
return
-
EFAULT
;
if
(
pgrp
<
0
)
return
-
EINVAL
;
if
(
session_of_pgrp
(
pgrp
)
!=
process_session
(
current
)
)
if
(
session_of_pgrp
(
pgrp
)
!=
current
->
session
)
return
-
EPERM
;
real_tty
->
pgrp
=
pgrp
;
return
0
;
...
...
@@ -1616,7 +1618,7 @@ static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *
* (tty == real_tty) is a cheap way of
* testing if the tty is NOT a master pty.
*/
if
(
tty
==
real_tty
&&
process_tty
(
current
)
!=
real_tty
)
if
(
tty
==
real_tty
&&
current
->
tty
!=
real_tty
)
return
-
ENOTTY
;
if
(
real_tty
->
session
<=
0
)
return
-
ENOTTY
;
...
...
@@ -1774,12 +1776,12 @@ int tty_ioctl(struct inode * inode, struct file * file,
clear_bit
(
TTY_EXCLUSIVE
,
&
tty
->
flags
);
return
0
;
case
TIOCNOTTY
:
if
(
process_tty
(
current
)
!=
tty
)
if
(
current
->
tty
!=
tty
)
return
-
ENOTTY
;
if
(
process_session_leader
(
current
)
)
if
(
current
->
leader
)
disassociate_ctty
(
0
);
task_lock
(
current
);
current
->
signal
->
tty
=
NULL
;
current
->
tty
=
NULL
;
task_unlock
(
current
);
return
0
;
case
TIOCSCTTY
:
...
...
@@ -1883,10 +1885,10 @@ static void __do_SAK(void *arg)
tty
->
driver
->
flush_buffer
(
tty
);
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
session
,
PIDTYPE_SID
,
p
,
l
,
pid
)
{
if
(
p
rocess_tty
(
p
)
==
tty
||
session
>
0
)
{
if
(
p
->
tty
==
tty
||
session
>
0
)
{
printk
(
KERN_NOTICE
"SAK: killed process %d"
" (%s): process_session(p)
==tty->session
\n
"
,
p
->
pid
,
p
->
comm
);
" (%s): p->session
==tty->session
\n
"
,
p
->
pid
,
p
->
comm
);
send_sig
(
SIGKILL
,
p
,
1
);
continue
;
}
...
...
drivers/char/vt.c
View file @
59ee66b5
...
...
@@ -2226,7 +2226,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
if
(
tty
->
driver
->
type
!=
TTY_DRIVER_TYPE_CONSOLE
)
return
-
EINVAL
;
if
(
process_tty
(
current
)
!=
tty
&&
!
capable
(
CAP_SYS_ADMIN
))
if
(
current
->
tty
!=
tty
&&
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
if
(
get_user
(
type
,
(
char
*
)
arg
))
return
-
EFAULT
;
...
...
drivers/char/vt_ioctl.c
View file @
59ee66b5
...
...
@@ -380,7 +380,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
* to be the owner of the tty, or have CAP_SYS_TTY_CONFIG.
*/
perm
=
0
;
if
(
process_tty
(
current
)
==
tty
||
capable
(
CAP_SYS_TTY_CONFIG
))
if
(
current
->
tty
==
tty
||
capable
(
CAP_SYS_TTY_CONFIG
))
perm
=
1
;
kbd
=
kbd_table
+
console
;
...
...
@@ -1188,3 +1188,4 @@ void change_console(unsigned int new_console)
complete_change_console
(
new_console
);
}
drivers/media/video/zoran_card.c
View file @
59ee66b5
...
...
@@ -47,6 +47,8 @@
#include <linux/video_decoder.h>
#include <linux/video_encoder.h>
#include <asm/io.h>
#include "videocodec.h"
#include "zoran.h"
#include "zoran_card.h"
...
...
drivers/media/video/zoran_device.c
View file @
59ee66b5
...
...
@@ -46,6 +46,8 @@
#include <linux/video_encoder.h>
#include <linux/delay.h>
#include <asm/io.h>
#include "videocodec.h"
#include "zoran.h"
#include "zoran_device.h"
...
...
drivers/media/video/zoran_driver.c
View file @
59ee66b5
...
...
@@ -73,6 +73,7 @@
#include <linux/videodev.h>
#include "videocodec.h"
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/proc_fs.h>
...
...
drivers/net/slip.c
View file @
59ee66b5
...
...
@@ -1307,7 +1307,7 @@ static int sl_ioctl(struct net_device *dev,struct ifreq *rq,int cmd)
/* Resolve race condition, when ioctl'ing hanged up
and opened by another process device.
*/
if
(
sl
->
tty
!=
process_tty
(
current
)
&&
sl
->
pid
!=
current
->
pid
)
{
if
(
sl
->
tty
!=
current
->
tty
&&
sl
->
pid
!=
current
->
pid
)
{
spin_unlock_bh
(
&
sl
->
lock
);
return
-
EPERM
;
}
...
...
fs/binfmt_elf.c
View file @
59ee66b5
...
...
@@ -1084,7 +1084,7 @@ static void fill_prstatus(struct elf_prstatus *prstatus,
prstatus
->
pr_pid
=
p
->
pid
;
prstatus
->
pr_ppid
=
p
->
parent
->
pid
;
prstatus
->
pr_pgrp
=
process_group
(
p
);
prstatus
->
pr_sid
=
p
rocess_session
(
p
)
;
prstatus
->
pr_sid
=
p
->
session
;
jiffies_to_timeval
(
p
->
utime
,
&
prstatus
->
pr_utime
);
jiffies_to_timeval
(
p
->
stime
,
&
prstatus
->
pr_stime
);
jiffies_to_timeval
(
p
->
cutime
,
&
prstatus
->
pr_cutime
);
...
...
@@ -1112,7 +1112,7 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
psinfo
->
pr_pid
=
p
->
pid
;
psinfo
->
pr_ppid
=
p
->
parent
->
pid
;
psinfo
->
pr_pgrp
=
process_group
(
p
);
psinfo
->
pr_sid
=
p
rocess_session
(
p
)
;
psinfo
->
pr_sid
=
p
->
session
;
i
=
p
->
state
?
ffz
(
~
p
->
state
)
+
1
:
0
;
psinfo
->
pr_state
=
i
;
...
...
fs/compat_ioctl.c
View file @
59ee66b5
...
...
@@ -1574,7 +1574,7 @@ static int vt_check(struct file *file)
* To have permissions to do most of the vt ioctls, we either have
* to be the owner of the tty, or super-user.
*/
if
(
process_tty
(
current
)
==
tty
||
capable
(
CAP_SYS_ADMIN
))
if
(
current
->
tty
==
tty
||
capable
(
CAP_SYS_ADMIN
))
return
1
;
return
0
;
}
...
...
fs/dquot.c
View file @
59ee66b5
...
...
@@ -668,12 +668,12 @@ static void print_warning(struct dquot *dquot, const char warntype)
if
(
!
need_print_warning
(
dquot
)
||
(
flag
&&
test_and_set_bit
(
flag
,
&
dquot
->
dq_flags
)))
return
;
tty_write_message
(
process_tty
(
current
)
,
dquot
->
dq_sb
->
s_id
);
tty_write_message
(
current
->
tty
,
dquot
->
dq_sb
->
s_id
);
if
(
warntype
==
ISOFTWARN
||
warntype
==
BSOFTWARN
)
tty_write_message
(
process_tty
(
current
)
,
": warning, "
);
tty_write_message
(
current
->
tty
,
": warning, "
);
else
tty_write_message
(
process_tty
(
current
)
,
": write failed, "
);
tty_write_message
(
process_tty
(
current
)
,
quotatypes
[
dquot
->
dq_type
]);
tty_write_message
(
current
->
tty
,
": write failed, "
);
tty_write_message
(
current
->
tty
,
quotatypes
[
dquot
->
dq_type
]);
switch
(
warntype
)
{
case
IHARDWARN
:
msg
=
" file limit reached.
\n
"
;
...
...
@@ -694,7 +694,7 @@ static void print_warning(struct dquot *dquot, const char warntype)
msg
=
" block quota exceeded.
\n
"
;
break
;
}
tty_write_message
(
process_tty
(
current
)
,
msg
);
tty_write_message
(
current
->
tty
,
msg
);
}
static
inline
void
flush_warnings
(
struct
dquot
**
dquots
,
char
*
warntype
)
...
...
fs/exec.c
View file @
59ee66b5
...
...
@@ -596,11 +596,6 @@ static inline int de_thread(struct task_struct *tsk)
newsig
->
group_stop_count
=
0
;
newsig
->
curr_target
=
NULL
;
init_sigpending
(
&
newsig
->
shared_pending
);
newsig
->
pgrp
=
oldsig
->
pgrp
;
newsig
->
session
=
oldsig
->
session
;
newsig
->
leader
=
oldsig
->
leader
;
newsig
->
tty_old_pgrp
=
oldsig
->
tty_old_pgrp
;
}
if
(
thread_group_empty
(
current
))
...
...
fs/open.c
View file @
59ee66b5
...
...
@@ -1035,7 +1035,7 @@ EXPORT_SYMBOL(sys_close);
asmlinkage
long
sys_vhangup
(
void
)
{
if
(
capable
(
CAP_SYS_TTY_CONFIG
))
{
tty_vhangup
(
process_tty
(
current
)
);
tty_vhangup
(
current
->
tty
);
return
0
;
}
return
-
EPERM
;
...
...
fs/proc/array.c
View file @
59ee66b5
...
...
@@ -304,9 +304,9 @@ int proc_pid_stat(struct task_struct *task, char * buffer)
mm
=
task
->
mm
;
if
(
mm
)
mm
=
mmgrab
(
mm
);
if
(
process_tty
(
task
)
)
{
tty_pgrp
=
process_tty
(
task
)
->
pgrp
;
tty_nr
=
new_encode_dev
(
tty_devnum
(
process_tty
(
task
)
));
if
(
task
->
tty
)
{
tty_pgrp
=
task
->
tty
->
pgrp
;
tty_nr
=
new_encode_dev
(
tty_devnum
(
task
->
tty
));
}
task_unlock
(
task
);
if
(
mm
)
{
...
...
@@ -345,7 +345,7 @@ int proc_pid_stat(struct task_struct *task, char * buffer)
state
,
ppid
,
process_group
(
task
),
process_session
(
task
)
,
task
->
session
,
tty_nr
,
tty_pgrp
,
task
->
flags
,
...
...
include/asm-i386/processor.h
View file @
59ee66b5
...
...
@@ -585,12 +585,12 @@ static inline void rep_nop(void)
/* Prefetch instructions for Pentium III and AMD Athlon */
/* It's not worth to care about 3dnow! prefetches for the K6
because they are microcoded there and very slow. */
because they are microcoded there and very slow.
However we don't do prefetches for pre XP Athlons currently
That should be fixed. */
#define ARCH_HAS_PREFETCH
extern
inline
void
prefetch
(
const
void
*
x
)
{
if
(
cpu_data
[
0
].
x86_vendor
==
X86_VENDOR_AMD
)
return
;
/* Some athlons fault if the address is bad */
alternative_input
(
ASM_NOP4
,
"prefetchnta (%1)"
,
X86_FEATURE_XMM
,
...
...
include/linux/sched.h
View file @
59ee66b5
...
...
@@ -264,15 +264,6 @@ struct signal_struct {
/* thread group stop support, overloads group_exit_code too */
int
group_stop_count
;
/* job control IDs */
pid_t
pgrp
;
pid_t
tty_old_pgrp
;
pid_t
session
;
/* boolean value for session group leader */
int
leader
;
struct
tty_struct
*
tty
;
/* NULL if no tty */
};
/*
...
...
@@ -375,7 +366,12 @@ struct task_struct {
unsigned
long
personality
;
int
did_exec
:
1
;
pid_t
pid
;
pid_t
__pgrp
;
/* Accessed via process_group() */
pid_t
tty_old_pgrp
;
pid_t
session
;
pid_t
tgid
;
/* boolean value for session group leader */
int
leader
;
/*
* pointers to (original) parent process, youngest child, younger sibling,
* older sibling, respectively. (p->father can be replaced with
...
...
@@ -419,6 +415,7 @@ struct task_struct {
char
comm
[
16
];
/* file system info */
int
link_count
,
total_link_count
;
struct
tty_struct
*
tty
;
/* NULL if no tty */
/* ipc stuff */
struct
sysv_sem
sysvsem
;
/* CPU-specific state of this task */
...
...
@@ -471,22 +468,7 @@ struct task_struct {
static
inline
pid_t
process_group
(
struct
task_struct
*
tsk
)
{
return
tsk
->
signal
->
pgrp
;
}
static
inline
pid_t
process_session
(
struct
task_struct
*
tsk
)
{
return
tsk
->
signal
->
session
;
}
static
inline
int
process_session_leader
(
struct
task_struct
*
tsk
)
{
return
tsk
->
signal
->
leader
;
}
static
inline
struct
tty_struct
*
process_tty
(
struct
task_struct
*
tsk
)
{
return
tsk
->
signal
->
tty
;
return
tsk
->
group_leader
->
__pgrp
;
}
extern
void
__put_task_struct
(
struct
task_struct
*
tsk
);
...
...
kernel/acct.c
View file @
59ee66b5
...
...
@@ -343,7 +343,7 @@ static void do_acct_process(long exitcode, struct file *file)
/* we really need to bite the bullet and change layout */
ac
.
ac_uid
=
current
->
uid
;
ac
.
ac_gid
=
current
->
gid
;
ac
.
ac_tty
=
process_tty
(
current
)
?
old_encode_dev
(
tty_devnum
(
process_tty
(
current
)
))
:
0
;
ac
.
ac_tty
=
current
->
tty
?
old_encode_dev
(
tty_devnum
(
current
->
tty
))
:
0
;
ac
.
ac_flag
=
0
;
if
(
current
->
flags
&
PF_FORKNOEXEC
)
...
...
kernel/exit.c
View file @
59ee66b5
...
...
@@ -119,13 +119,13 @@ int session_of_pgrp(int pgrp)
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
pgrp
,
PIDTYPE_PGID
,
p
,
l
,
pid
)
if
(
p
rocess_session
(
p
)
>
0
)
{
sid
=
p
rocess_session
(
p
)
;
if
(
p
->
session
>
0
)
{
sid
=
p
->
session
;
goto
out
;
}
p
=
find_task_by_pid
(
pgrp
);
if
(
p
)
sid
=
p
rocess_session
(
p
)
;
sid
=
p
->
session
;
out:
read_unlock
(
&
tasklist_lock
);
...
...
@@ -153,7 +153,7 @@ static int will_become_orphaned_pgrp(int pgrp, task_t *ignored_task)
||
p
->
real_parent
->
pid
==
1
)
continue
;
if
(
process_group
(
p
->
real_parent
)
!=
pgrp
&&
p
rocess_session
(
p
->
real_parent
)
==
process_session
(
p
)
)
{
&&
p
->
real_parent
->
session
==
p
->
session
)
{
ret
=
0
;
break
;
}
...
...
@@ -242,14 +242,14 @@ void __set_special_pids(pid_t session, pid_t pgrp)
{
struct
task_struct
*
curr
=
current
;
if
(
process_session
(
curr
)
!=
session
)
{
if
(
curr
->
session
!=
session
)
{
detach_pid
(
curr
,
PIDTYPE_SID
);
curr
->
s
ignal
->
s
ession
=
session
;
curr
->
session
=
session
;
attach_pid
(
curr
,
PIDTYPE_SID
,
session
);
}
if
(
process_group
(
curr
)
!=
pgrp
)
{
detach_pid
(
curr
,
PIDTYPE_PGID
);
curr
->
signal
->
pgrp
=
pgrp
;
curr
->
group_leader
->
__
pgrp
=
pgrp
;
attach_pid
(
curr
,
PIDTYPE_PGID
,
pgrp
);
}
}
...
...
@@ -303,7 +303,7 @@ void daemonize(const char *name, ...)
exit_mm
(
current
);
set_special_pids
(
1
,
1
);
current
->
signal
->
tty
=
NULL
;
current
->
tty
=
NULL
;
/* Block and flush all signals */
sigfillset
(
&
blocked
);
...
...
@@ -515,7 +515,7 @@ static inline void reparent_thread(task_t *p, task_t *father, int traced)
* outside, so the child pgrp is now orphaned.
*/
if
((
process_group
(
p
)
!=
process_group
(
father
))
&&
(
p
rocess_session
(
p
)
==
process_session
(
father
)
))
{
(
p
->
session
==
father
->
session
))
{
int
pgrp
=
process_group
(
p
);
if
(
will_become_orphaned_pgrp
(
pgrp
,
NULL
)
&&
has_stopped_jobs
(
pgrp
))
{
...
...
@@ -625,7 +625,7 @@ static void exit_notify(struct task_struct *tsk)
t
=
tsk
->
real_parent
;
if
((
process_group
(
t
)
!=
process_group
(
tsk
))
&&
(
process_session
(
t
)
==
process_session
(
tsk
)
)
&&
(
t
->
session
==
tsk
->
session
)
&&
will_become_orphaned_pgrp
(
process_group
(
tsk
),
tsk
)
&&
has_stopped_jobs
(
process_group
(
tsk
)))
{
__kill_pg_info
(
SIGHUP
,
(
void
*
)
1
,
process_group
(
tsk
));
...
...
@@ -720,7 +720,7 @@ NORET_TYPE void do_exit(long code)
exit_itimers
(
tsk
);
exit_thread
();
if
(
process_session_leader
(
tsk
)
)
if
(
tsk
->
leader
)
disassociate_ctty
(
1
);
module_put
(
tsk
->
thread_info
->
exec_domain
->
module
);
...
...
kernel/fork.c
View file @
59ee66b5
...
...
@@ -743,12 +743,6 @@ static inline int copy_signal(unsigned long clone_flags, struct task_struct * ts
sig
->
curr_target
=
NULL
;
init_sigpending
(
&
sig
->
shared_pending
);
sig
->
tty
=
process_tty
(
current
);
sig
->
pgrp
=
process_group
(
current
);
sig
->
session
=
process_session
(
current
);
sig
->
leader
=
0
;
/* session leadership doesn't inherit */
sig
->
tty_old_pgrp
=
0
;
return
0
;
}
...
...
@@ -795,9 +789,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
* Thread groups must share signals as well, and detached threads
* can only be started up within the thread group.
*/
if
((
clone_flags
&
CLONE_THREAD
)
&&
(
clone_flags
&
(
CLONE_SIGHAND
|
CLONE_DETACHED
))
!=
(
CLONE_SIGHAND
|
CLONE_DETACHED
))
if
((
clone_flags
&
CLONE_THREAD
)
&&
!
(
clone_flags
&
CLONE_SIGHAND
))
return
ERR_PTR
(
-
EINVAL
);
/*
...
...
@@ -902,6 +894,8 @@ struct task_struct *copy_process(unsigned long clone_flags,
init_timer
(
&
p
->
real_timer
);
p
->
real_timer
.
data
=
(
unsigned
long
)
p
;
p
->
leader
=
0
;
/* session leadership doesn't inherit */
p
->
tty_old_pgrp
=
0
;
p
->
utime
=
p
->
stime
=
0
;
p
->
cutime
=
p
->
cstime
=
0
;
p
->
array
=
NULL
;
...
...
@@ -1046,7 +1040,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
if
(
thread_group_leader
(
p
))
{
attach_pid
(
p
,
PIDTYPE_TGID
,
p
->
tgid
);
attach_pid
(
p
,
PIDTYPE_PGID
,
process_group
(
p
));
attach_pid
(
p
,
PIDTYPE_SID
,
p
rocess_session
(
p
)
);
attach_pid
(
p
,
PIDTYPE_SID
,
p
->
session
);
if
(
p
->
pid
)
__get_cpu_var
(
process_counts
)
++
;
}
else
...
...
kernel/pid.c
View file @
59ee66b5
...
...
@@ -253,14 +253,14 @@ void switch_exec_pids(task_t *leader, task_t *thread)
attach_pid
(
thread
,
PIDTYPE_PID
,
thread
->
pid
);
attach_pid
(
thread
,
PIDTYPE_TGID
,
thread
->
tgid
);
attach_pid
(
thread
,
PIDTYPE_PGID
,
thread
->
signal
->
pgrp
);
attach_pid
(
thread
,
PIDTYPE_SID
,
thread
->
s
ignal
->
s
ession
);
attach_pid
(
thread
,
PIDTYPE_PGID
,
leader
->
__
pgrp
);
attach_pid
(
thread
,
PIDTYPE_SID
,
thread
->
session
);
list_add_tail
(
&
thread
->
tasks
,
&
init_task
.
tasks
);
attach_pid
(
leader
,
PIDTYPE_PID
,
leader
->
pid
);
attach_pid
(
leader
,
PIDTYPE_TGID
,
leader
->
tgid
);
attach_pid
(
leader
,
PIDTYPE_PGID
,
leader
->
signal
->
pgrp
);
attach_pid
(
leader
,
PIDTYPE_SID
,
leader
->
s
ignal
->
s
ession
);
attach_pid
(
leader
,
PIDTYPE_PGID
,
leader
->
__
pgrp
);
attach_pid
(
leader
,
PIDTYPE_SID
,
leader
->
session
);
}
/*
...
...
kernel/signal.c
View file @
59ee66b5
...
...
@@ -593,8 +593,7 @@ static int check_kill_permission(int sig, struct siginfo *info,
error
=
-
EPERM
;
if
((
!
info
||
((
unsigned
long
)
info
!=
1
&&
(
unsigned
long
)
info
!=
2
&&
SI_FROMUSER
(
info
)))
&&
((
sig
!=
SIGCONT
)
||
(
process_session
(
current
)
!=
process_session
(
t
)))
&&
((
sig
!=
SIGCONT
)
||
(
current
->
session
!=
t
->
session
))
&&
(
current
->
euid
^
t
->
suid
)
&&
(
current
->
euid
^
t
->
uid
)
&&
(
current
->
uid
^
t
->
suid
)
&&
(
current
->
uid
^
t
->
uid
)
&&
!
capable
(
CAP_KILL
))
...
...
@@ -1103,7 +1102,7 @@ kill_sl_info(int sig, struct siginfo *info, pid_t sid)
retval
=
-
ESRCH
;
read_lock
(
&
tasklist_lock
);
for_each_task_pid
(
sid
,
PIDTYPE_SID
,
p
,
l
,
pid
)
{
if
(
!
p
rocess_session_leader
(
p
)
)
if
(
!
p
->
leader
)
continue
;
err
=
group_send_sig_info
(
sig
,
info
,
p
);
if
(
retval
)
...
...
kernel/sys.c
View file @
59ee66b5
...
...
@@ -969,7 +969,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
if
(
p
->
parent
==
current
||
p
->
real_parent
==
current
)
{
err
=
-
EPERM
;
if
(
p
rocess_session
(
p
)
!=
process_session
(
current
)
)
if
(
p
->
session
!=
current
->
session
)
goto
out
;
err
=
-
EACCES
;
if
(
p
->
did_exec
)
...
...
@@ -981,7 +981,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
}
err
=
-
EPERM
;
if
(
p
rocess_session_leader
(
p
)
)
if
(
p
->
leader
)
goto
out
;
if
(
pgid
!=
pid
)
{
...
...
@@ -990,7 +990,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
struct
list_head
*
l
;
for_each_task_pid
(
pgid
,
PIDTYPE_PGID
,
p
,
l
,
pid
)
if
(
p
rocess_session
(
p
)
==
process_session
(
current
)
)
if
(
p
->
session
==
current
->
session
)
goto
ok_pgid
;
goto
out
;
}
...
...
@@ -1002,7 +1002,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
if
(
process_group
(
p
)
!=
pgid
)
{
detach_pid
(
p
,
PIDTYPE_PGID
);
p
->
signal
->
pgrp
=
pgid
;
p
->
group_leader
->
__
pgrp
=
pgid
;
attach_pid
(
p
,
PIDTYPE_PGID
,
pgid
);
}
...
...
@@ -1044,7 +1044,7 @@ asmlinkage long sys_getpgrp(void)
asmlinkage
long
sys_getsid
(
pid_t
pid
)
{
if
(
!
pid
)
{
return
process_session
(
current
)
;
return
current
->
session
;
}
else
{
int
retval
;
struct
task_struct
*
p
;
...
...
@@ -1056,7 +1056,7 @@ asmlinkage long sys_getsid(pid_t pid)
if
(
p
)
{
retval
=
security_task_getsid
(
p
);
if
(
!
retval
)
retval
=
p
rocess_session
(
p
)
;
retval
=
p
->
session
;
}
read_unlock
(
&
tasklist_lock
);
return
retval
;
...
...
@@ -1077,10 +1077,10 @@ asmlinkage long sys_setsid(void)
if
(
pid
)
goto
out
;
current
->
signal
->
leader
=
1
;
current
->
leader
=
1
;
__set_special_pids
(
current
->
pid
,
current
->
pid
);
current
->
signal
->
tty
=
NULL
;
current
->
signal
->
tty_old_pgrp
=
0
;
current
->
tty
=
NULL
;
current
->
tty_old_pgrp
=
0
;
err
=
process_group
(
current
);
out:
write_unlock_irq
(
&
tasklist_lock
);
...
...
net/ipv4/netfilter/ipt_owner.c
View file @
59ee66b5
...
...
@@ -90,7 +90,7 @@ match_sid(const struct sk_buff *skb, pid_t sid)
read_lock
(
&
tasklist_lock
);
do_each_thread
(
g
,
p
)
{
struct
files_struct
*
files
;
if
(
p
rocess_session
(
p
)
!=
sid
)
if
(
p
->
session
!=
sid
)
continue
;
task_lock
(
p
);
...
...
net/ipv6/netfilter/ip6t_owner.c
View file @
59ee66b5
...
...
@@ -56,7 +56,7 @@ match_sid(const struct sk_buff *skb, pid_t sid)
read_lock
(
&
tasklist_lock
);
do_each_thread
(
g
,
p
)
{
struct
files_struct
*
files
;
if
(
p
rocess_session
(
p
)
!=
sid
)
if
(
p
->
session
!=
sid
)
continue
;
task_lock
(
p
);
...
...
net/sunrpc/clnt.c
View file @
59ee66b5
...
...
@@ -961,19 +961,19 @@ call_verify(struct rpc_task *task)
case
RPC_SUCCESS
:
return
p
;
case
RPC_PROG_UNAVAIL
:
printk
(
KERN_WARNING
"RPC:
%4d
call_verify: program %u is unsupported by server %s
\n
"
,
task
->
tk_pid
,
(
unsigned
int
)
task
->
tk_client
->
cl_prog
,
printk
(
KERN_WARNING
"RPC: call_verify: program %u is unsupported by server %s
\n
"
,
(
unsigned
int
)
task
->
tk_client
->
cl_prog
,
task
->
tk_client
->
cl_server
);
goto
out_eio
;
case
RPC_PROG_MISMATCH
:
printk
(
KERN_WARNING
"RPC:
%4d
call_verify: program %u, version %u unsupported by server %s
\n
"
,
task
->
tk_pid
,
(
unsigned
int
)
task
->
tk_client
->
cl_prog
,
printk
(
KERN_WARNING
"RPC: call_verify: program %u, version %u unsupported by server %s
\n
"
,
(
unsigned
int
)
task
->
tk_client
->
cl_prog
,
(
unsigned
int
)
task
->
tk_client
->
cl_vers
,
task
->
tk_client
->
cl_server
);
goto
out_eio
;
case
RPC_PROC_UNAVAIL
:
printk
(
KERN_WARNING
"RPC:
%4d
call_verify: proc %p unsupported by program %u, version %u on server %s
\n
"
,
task
->
tk_
pid
,
task
->
tk_
msg
.
rpc_proc
,
printk
(
KERN_WARNING
"RPC: call_verify: proc %p unsupported by program %u, version %u on server %s
\n
"
,
task
->
tk_msg
.
rpc_proc
,
task
->
tk_client
->
cl_prog
,
task
->
tk_client
->
cl_vers
,
task
->
tk_client
->
cl_server
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment