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
nexedi
linux
Commits
2a3f7d06
Commit
2a3f7d06
authored
Sep 02, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge home.transmeta.com:/home/torvalds/v2.5/linux
into home.transmeta.com:/home/torvalds/v2.5/sigio
parents
eca56747
1add9f7a
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
147 additions
and
168 deletions
+147
-168
drivers/char/tty_io.c
drivers/char/tty_io.c
+3
-9
drivers/net/tun.c
drivers/net/tun.c
+3
-5
fs/Makefile
fs/Makefile
+2
-1
fs/dnotify.c
fs/dnotify.c
+10
-14
fs/fcntl.c
fs/fcntl.c
+93
-27
fs/file_table.c
fs/file_table.c
+1
-0
fs/locks.c
fs/locks.c
+2
-10
include/linux/fs.h
include/linux/fs.h
+5
-0
include/net/inet_common.h
include/net/inet_common.h
+0
-3
include/net/sock.h
include/net/sock.h
+1
-4
kernel/futex.c
kernel/futex.c
+8
-3
net/core/sock.c
net/core/sock.c
+7
-29
net/econet/af_econet.c
net/econet/af_econet.c
+2
-5
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+2
-6
net/ipv4/tcp_input.c
net/ipv4/tcp_input.c
+1
-7
net/ipv4/tcp_minisocks.c
net/ipv4/tcp_minisocks.c
+0
-1
net/ipv6/af_inet6.c
net/ipv6/af_inet6.c
+2
-7
net/packet/af_packet.c
net/packet/af_packet.c
+2
-6
net/socket.c
net/socket.c
+0
-18
net/wanrouter/af_wanpipe.c
net/wanrouter/af_wanpipe.c
+2
-6
net/x25/x25_in.c
net/x25/x25_in.c
+1
-7
No files found.
drivers/char/tty_io.c
View file @
2a3f7d06
...
...
@@ -1458,15 +1458,9 @@ static int tty_fasync(int fd, struct file * filp, int on)
if
(
on
)
{
if
(
!
waitqueue_active
(
&
tty
->
read_wait
))
tty
->
minimum_to_wake
=
1
;
if
(
filp
->
f_owner
.
pid
==
0
)
{
retval
=
security_ops
->
file_set_fowner
(
filp
);
if
(
retval
)
return
retval
;
filp
->
f_owner
.
pid
=
(
-
tty
->
pgrp
)
?
:
current
->
pid
;
filp
->
f_owner
.
uid
=
current
->
uid
;
filp
->
f_owner
.
euid
=
current
->
euid
;
}
retval
=
f_setown
(
filp
,
(
-
tty
->
pgrp
)
?
:
current
->
pid
,
0
);
if
(
retval
)
return
retval
;
}
else
{
if
(
!
tty
->
fasync
&&
!
waitqueue_active
(
&
tty
->
read_wait
))
tty
->
minimum_to_wake
=
N_TTY_BUF_SIZE
;
...
...
drivers/net/tun.c
View file @
2a3f7d06
...
...
@@ -513,12 +513,10 @@ static int tun_chr_fasync(int fd, struct file *file, int on)
return
ret
;
if
(
on
)
{
ret
=
f_setown
(
file
,
current
->
pid
,
0
);
if
(
ret
)
return
ret
;
tun
->
flags
|=
TUN_FASYNC
;
if
(
!
file
->
f_owner
.
pid
)
{
file
->
f_owner
.
pid
=
current
->
pid
;
file
->
f_owner
.
uid
=
current
->
uid
;
file
->
f_owner
.
euid
=
current
->
euid
;
}
}
else
tun
->
flags
&=
~
TUN_FASYNC
;
...
...
fs/Makefile
View file @
2a3f7d06
...
...
@@ -7,7 +7,8 @@
O_TARGET
:=
fs.o
export-objs
:=
open.o dcache.o buffer.o bio.o inode.o dquot.o mpage.o aio.o
export-objs
:=
open.o dcache.o buffer.o bio.o inode.o dquot.o mpage.o aio.o
\
fcntl.o
obj-y
:=
open.o read_write.o devices.o file_table.o buffer.o
\
bio.o super.o block_dev.o char_dev.o stat.o exec.o pipe.o
\
...
...
fs/dnotify.c
View file @
2a3f7d06
...
...
@@ -68,7 +68,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
struct
dnotify_struct
**
prev
;
struct
inode
*
inode
;
fl_owner_t
id
=
current
->
files
;
int
error
;
int
error
=
0
;
if
((
arg
&
~
DN_MULTISHOT
)
==
0
)
{
dnotify_flush
(
filp
,
id
);
...
...
@@ -89,21 +89,15 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
odn
->
dn_fd
=
fd
;
odn
->
dn_mask
|=
arg
;
inode
->
i_dnotify_mask
|=
arg
&
~
DN_MULTISHOT
;
kmem_cache_free
(
dn_cache
,
dn
);
goto
out
;
goto
out_free
;
}
prev
=
&
odn
->
dn_next
;
}
error
=
security_ops
->
file_set_fowner
(
filp
);
if
(
error
)
{
write_unlock
(
&
dn_lock
);
return
error
;
}
error
=
f_setown
(
filp
,
current
->
pid
,
1
);
if
(
error
)
goto
out_free
;
filp
->
f_owner
.
pid
=
current
->
pid
;
filp
->
f_owner
.
uid
=
current
->
uid
;
filp
->
f_owner
.
euid
=
current
->
euid
;
dn
->
dn_mask
=
arg
;
dn
->
dn_fd
=
fd
;
dn
->
dn_filp
=
filp
;
...
...
@@ -113,7 +107,10 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
inode
->
i_dnotify
=
dn
;
out:
write_unlock
(
&
dn_lock
);
return
0
;
return
error
;
out_free:
kmem_cache_free
(
dn_cache
,
dn
);
goto
out
;
}
void
__inode_dir_notify
(
struct
inode
*
inode
,
unsigned
long
event
)
...
...
@@ -131,8 +128,7 @@ void __inode_dir_notify(struct inode *inode, unsigned long event)
continue
;
}
fown
=
&
dn
->
dn_filp
->
f_owner
;
if
(
fown
->
pid
)
send_sigio
(
fown
,
dn
->
dn_fd
,
POLL_MSG
);
send_sigio
(
fown
,
dn
->
dn_fd
,
POLL_MSG
);
if
(
dn
->
dn_mask
&
DN_MULTISHOT
)
prev
=
&
dn
->
dn_next
;
else
{
...
...
fs/fcntl.c
View file @
2a3f7d06
...
...
@@ -11,13 +11,13 @@
#include <linux/smp_lock.h>
#include <linux/slab.h>
#include <linux/iobuf.h>
#include <linux/module.h>
#include <linux/security.h>
#include <asm/poll.h>
#include <asm/siginfo.h>
#include <asm/uaccess.h>
extern
int
sock_fcntl
(
struct
file
*
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
fcntl_setlease
(
unsigned
int
fd
,
struct
file
*
filp
,
long
arg
);
extern
int
fcntl_getlease
(
struct
file
*
filp
);
...
...
@@ -259,6 +259,35 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
return
error
;
}
static
void
f_modown
(
struct
file
*
filp
,
unsigned
long
pid
,
uid_t
uid
,
uid_t
euid
,
int
force
)
{
write_lock_irq
(
&
filp
->
f_owner
.
lock
);
if
(
force
||
!
filp
->
f_owner
.
pid
)
{
filp
->
f_owner
.
pid
=
pid
;
filp
->
f_owner
.
uid
=
uid
;
filp
->
f_owner
.
euid
=
euid
;
}
write_unlock_irq
(
&
filp
->
f_owner
.
lock
);
}
int
f_setown
(
struct
file
*
filp
,
unsigned
long
arg
,
int
force
)
{
int
err
;
err
=
security_ops
->
file_set_fowner
(
filp
);
if
(
err
)
return
err
;
f_modown
(
filp
,
arg
,
current
->
uid
,
current
->
euid
,
force
);
return
0
;
}
void
f_delown
(
struct
file
*
filp
)
{
f_modown
(
filp
,
0
,
0
,
0
,
1
);
}
static
long
do_fcntl
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
,
struct
file
*
filp
)
{
...
...
@@ -302,21 +331,7 @@ static long do_fcntl(unsigned int fd, unsigned int cmd,
err
=
filp
->
f_owner
.
pid
;
break
;
case
F_SETOWN
:
lock_kernel
();
err
=
security_ops
->
file_set_fowner
(
filp
);
if
(
err
)
{
unlock_kernel
();
break
;
}
filp
->
f_owner
.
pid
=
arg
;
filp
->
f_owner
.
uid
=
current
->
uid
;
filp
->
f_owner
.
euid
=
current
->
euid
;
err
=
0
;
if
(
S_ISSOCK
(
filp
->
f_dentry
->
d_inode
->
i_mode
))
err
=
sock_fcntl
(
filp
,
F_SETOWN
,
arg
);
unlock_kernel
();
err
=
f_setown
(
filp
,
arg
,
1
);
break
;
case
F_GETSIG
:
err
=
filp
->
f_owner
.
signum
;
...
...
@@ -339,10 +354,6 @@ static long do_fcntl(unsigned int fd, unsigned int cmd,
err
=
fcntl_dirnotify
(
fd
,
filp
,
arg
);
break
;
default:
/* sockets need a few special fcntls. */
err
=
-
EINVAL
;
if
(
S_ISSOCK
(
filp
->
f_dentry
->
d_inode
->
i_mode
))
err
=
sock_fcntl
(
filp
,
cmd
,
arg
);
break
;
}
...
...
@@ -418,14 +429,20 @@ static long band_table[NSIGPOLL] = {
POLLHUP
|
POLLERR
/* POLL_HUP */
};
static
inline
int
sigio_perm
(
struct
task_struct
*
p
,
struct
fown_struct
*
fown
)
{
return
((
fown
->
euid
==
0
)
||
(
fown
->
euid
==
p
->
suid
)
||
(
fown
->
euid
==
p
->
uid
)
||
(
fown
->
uid
==
p
->
suid
)
||
(
fown
->
uid
==
p
->
uid
));
}
static
void
send_sigio_to_task
(
struct
task_struct
*
p
,
struct
fown_struct
*
fown
,
int
fd
,
int
reason
)
{
if
((
fown
->
euid
!=
0
)
&&
(
fown
->
euid
^
p
->
suid
)
&&
(
fown
->
euid
^
p
->
uid
)
&&
(
fown
->
uid
^
p
->
suid
)
&&
(
fown
->
uid
^
p
->
uid
))
if
(
!
sigio_perm
(
p
,
fown
))
return
;
if
(
security_ops
->
file_send_sigiotask
(
p
,
fown
,
fd
,
reason
))
...
...
@@ -464,12 +481,17 @@ static void send_sigio_to_task(struct task_struct *p,
void
send_sigio
(
struct
fown_struct
*
fown
,
int
fd
,
int
band
)
{
struct
task_struct
*
p
;
int
pid
=
fown
->
pid
;
int
pid
;
read_lock
(
&
fown
->
lock
);
pid
=
fown
->
pid
;
if
(
!
pid
)
goto
out_unlock_fown
;
read_lock
(
&
tasklist_lock
);
if
(
(
pid
>
0
)
&&
(
p
=
find_task_by_pid
(
pid
))
)
{
send_sigio_to_task
(
p
,
fown
,
fd
,
band
);
goto
out
;
goto
out
_unlock_task
;
}
for_each_task
(
p
)
{
int
match
=
p
->
pid
;
...
...
@@ -479,8 +501,49 @@ void send_sigio(struct fown_struct *fown, int fd, int band)
continue
;
send_sigio_to_task
(
p
,
fown
,
fd
,
band
);
}
out:
out
_unlock_task
:
read_unlock
(
&
tasklist_lock
);
out_unlock_fown:
read_unlock
(
&
fown
->
lock
);
}
static
void
send_sigurg_to_task
(
struct
task_struct
*
p
,
struct
fown_struct
*
fown
)
{
if
(
sigio_perm
(
p
,
fown
))
send_sig
(
SIGURG
,
p
,
1
);
}
int
send_sigurg
(
struct
fown_struct
*
fown
)
{
struct
task_struct
*
p
;
int
pid
,
ret
=
0
;
read_lock
(
&
fown
->
lock
);
pid
=
fown
->
pid
;
if
(
!
pid
)
goto
out_unlock_fown
;
ret
=
1
;
read_lock
(
&
tasklist_lock
);
if
((
pid
>
0
)
&&
(
p
=
find_task_by_pid
(
pid
)))
{
send_sigurg_to_task
(
p
,
fown
);
goto
out_unlock_task
;
}
for_each_task
(
p
)
{
int
match
=
p
->
pid
;
if
(
pid
<
0
)
match
=
-
p
->
pgrp
;
if
(
pid
!=
match
)
continue
;
send_sigurg_to_task
(
p
,
fown
);
}
out_unlock_task:
read_unlock
(
&
tasklist_lock
);
out_unlock_fown:
read_unlock
(
&
fown
->
lock
);
return
ret
;
}
static
rwlock_t
fasync_lock
=
RW_LOCK_UNLOCKED
;
...
...
@@ -543,7 +606,7 @@ void __kill_fasync(struct fasync_struct *fa, int sig, int band)
/* Don't send SIGURG to processes which have not set a
queued signum: SIGURG has its own default signalling
mechanism. */
if
(
fown
->
pid
&&
!
(
sig
==
SIGURG
&&
fown
->
signum
==
0
))
if
(
!
(
sig
==
SIGURG
&&
fown
->
signum
==
0
))
send_sigio
(
fown
,
fa
->
fa_fd
,
band
);
fa
=
fa
->
fa_next
;
}
...
...
@@ -566,3 +629,6 @@ static int __init fasync_init(void)
}
module_init
(
fasync_init
)
EXPORT_SYMBOL
(
f_setown
);
EXPORT_SYMBOL
(
f_delown
);
fs/file_table.c
View file @
2a3f7d06
...
...
@@ -54,6 +54,7 @@ struct file * get_empty_filp(void)
f
->
f_version
=
++
event
;
f
->
f_uid
=
current
->
fsuid
;
f
->
f_gid
=
current
->
fsgid
;
f
->
f_owner
.
lock
=
RW_LOCK_UNLOCKED
;
list_add
(
&
f
->
f_list
,
&
anon_list
);
file_list_unlock
();
return
f
;
...
...
fs/locks.c
View file @
2a3f7d06
...
...
@@ -997,9 +997,7 @@ static int lease_modify(struct file_lock **before, int arg)
if
(
arg
==
F_UNLCK
)
{
struct
file
*
filp
=
fl
->
fl_file
;
filp
->
f_owner
.
pid
=
0
;
filp
->
f_owner
.
uid
=
0
;
filp
->
f_owner
.
euid
=
0
;
f_delown
(
filp
);
filp
->
f_owner
.
signum
=
0
;
locks_delete_lock
(
before
);
}
...
...
@@ -1277,13 +1275,7 @@ int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
*
before
=
fl
;
list_add
(
&
fl
->
fl_link
,
&
file_lock_list
);
error
=
security_ops
->
file_set_fowner
(
filp
);
if
(
error
)
goto
out_unlock
;
filp
->
f_owner
.
pid
=
current
->
pid
;
filp
->
f_owner
.
uid
=
current
->
uid
;
filp
->
f_owner
.
euid
=
current
->
euid
;
error
=
f_setown
(
filp
,
current
->
pid
,
1
);
out_unlock:
unlock_kernel
();
return
error
;
...
...
include/linux/fs.h
View file @
2a3f7d06
...
...
@@ -432,6 +432,7 @@ static inline struct inode *SOCK_INODE(struct socket *socket)
#include <linux/efs_fs_i.h>
struct
fown_struct
{
rwlock_t
lock
;
/* protects pid, uid, euid fields */
int
pid
;
/* pid or -pgrp where SIGIO should be sent */
uid_t
uid
,
euid
;
/* uid/euid of process setting the owner */
int
signum
;
/* posix.1b rt signal to be delivered on IO */
...
...
@@ -615,6 +616,10 @@ extern void kill_fasync(struct fasync_struct **, int, int);
/* only for net: no internal synchronization */
extern
void
__kill_fasync
(
struct
fasync_struct
*
,
int
,
int
);
extern
int
f_setown
(
struct
file
*
filp
,
unsigned
long
arg
,
int
force
);
extern
void
f_delown
(
struct
file
*
filp
);
extern
int
send_sigurg
(
struct
fown_struct
*
fown
);
/*
* Umount options
*/
...
...
include/net/inet_common.h
View file @
2a3f7d06
...
...
@@ -34,9 +34,6 @@ extern int inet_setsockopt(struct socket *sock, int level,
extern
int
inet_getsockopt
(
struct
socket
*
sock
,
int
level
,
int
optname
,
char
*
optval
,
int
*
optlen
);
extern
int
inet_fcntl
(
struct
socket
*
sock
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
inet_listen
(
struct
socket
*
sock
,
int
backlog
);
extern
void
inet_sock_release
(
struct
sock
*
sk
);
...
...
include/net/sock.h
View file @
2a3f7d06
...
...
@@ -132,7 +132,6 @@ struct sock {
unsigned
char
rcvtstamp
;
unsigned
char
no_largesend
;
int
route_caps
;
int
proc
;
unsigned
long
lingertime
;
int
hashent
;
...
...
@@ -292,7 +291,6 @@ static __inline__ void sock_prot_dec_use(struct proto *prot)
#define SOCK_BINDADDR_LOCK 4
#define SOCK_BINDPORT_LOCK 8
#include <linux/fs.h>
/* just for inode - yeuch.*/
/* Used by processes to "lock" a socket state, so that
...
...
@@ -362,6 +360,7 @@ extern struct sk_buff *sock_alloc_send_pskb(struct sock *sk,
int
*
errcode
);
extern
void
*
sock_kmalloc
(
struct
sock
*
sk
,
int
size
,
int
priority
);
extern
void
sock_kfree_s
(
struct
sock
*
sk
,
void
*
mem
,
int
size
);
extern
void
sk_send_sigurg
(
struct
sock
*
sk
);
/*
* Functions to fill in entries in struct proto_ops when a protocol
...
...
@@ -388,8 +387,6 @@ extern int sock_no_getsockopt(struct socket *, int , int,
char
*
,
int
*
);
extern
int
sock_no_setsockopt
(
struct
socket
*
,
int
,
int
,
char
*
,
int
);
extern
int
sock_no_fcntl
(
struct
socket
*
,
unsigned
int
,
unsigned
long
);
extern
int
sock_no_sendmsg
(
struct
socket
*
,
struct
msghdr
*
,
int
,
struct
scm_cookie
*
);
...
...
kernel/futex.c
View file @
2a3f7d06
...
...
@@ -276,9 +276,14 @@ static int futex_fd(struct list_head *head,
filp
->
f_dentry
=
dget
(
futex_mnt
->
mnt_root
);
if
(
signal
)
{
filp
->
f_owner
.
pid
=
current
->
tgid
;
filp
->
f_owner
.
uid
=
current
->
uid
;
filp
->
f_owner
.
euid
=
current
->
euid
;
int
ret
;
ret
=
f_setown
(
filp
,
current
->
tgid
,
1
);
if
(
ret
)
{
put_unused_fd
(
fd
);
put_filp
(
filp
);
return
ret
;
}
filp
->
f_owner
.
signum
=
signal
;
}
...
...
net/core/sock.c
View file @
2a3f7d06
...
...
@@ -103,7 +103,6 @@
#include <linux/string.h>
#include <linux/sockios.h>
#include <linux/net.h>
#include <linux/fcntl.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
...
...
@@ -1048,34 +1047,6 @@ int sock_no_getsockopt(struct socket *sock, int level, int optname,
return
-
EOPNOTSUPP
;
}
/*
* Note: if you add something that sleeps here then change sock_fcntl()
* to do proper fd locking.
*/
int
sock_no_fcntl
(
struct
socket
*
sock
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
sock
*
sk
=
sock
->
sk
;
switch
(
cmd
)
{
case
F_SETOWN
:
/*
* This is a little restrictive, but it's the only
* way to make sure that you can't send a sigurg to
* another process.
*/
if
(
current
->
pgrp
!=
-
arg
&&
current
->
pid
!=
arg
&&
!
capable
(
CAP_KILL
))
return
(
-
EPERM
);
sk
->
proc
=
arg
;
return
(
0
);
case
F_GETOWN
:
return
(
sk
->
proc
);
default:
return
(
-
EINVAL
);
}
}
int
sock_no_sendmsg
(
struct
socket
*
sock
,
struct
msghdr
*
m
,
int
flags
,
struct
scm_cookie
*
scm
)
{
...
...
@@ -1179,6 +1150,13 @@ void sock_def_destruct(struct sock *sk)
kfree
(
sk
->
protinfo
);
}
void
sk_send_sigurg
(
struct
sock
*
sk
)
{
if
(
sk
->
socket
&&
sk
->
socket
->
file
)
if
(
send_sigurg
(
&
sk
->
socket
->
file
->
f_owner
))
sk_wake_async
(
sk
,
3
,
POLL_PRI
);
}
void
sock_init_data
(
struct
socket
*
sock
,
struct
sock
*
sk
)
{
skb_queue_head_init
(
&
sk
->
receive_queue
);
...
...
net/econet/af_econet.c
View file @
2a3f7d06
...
...
@@ -651,13 +651,10 @@ static int econet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg
case
SIOCSPGRP
:
if
(
get_user
(
pid
,
(
int
*
)
arg
))
return
-
EFAULT
;
if
(
current
->
pid
!=
pid
&&
current
->
pgrp
!=
-
pid
&&
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
sk
->
proc
=
pid
;
return
(
0
);
return
f_setown
(
sock
->
file
,
pid
,
1
);
case
FIOGETOWN
:
case
SIOCGPGRP
:
return
put_user
(
s
k
->
proc
,
(
int
*
)
arg
);
return
put_user
(
s
ock
->
file
->
f_owner
.
pid
,
(
int
*
)
arg
);
case
SIOCGSTAMP
:
if
(
sk
->
stamp
.
tv_sec
==
0
)
return
-
ENOENT
;
...
...
net/ipv4/af_inet.c
View file @
2a3f7d06
...
...
@@ -857,16 +857,12 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
case
SIOCSPGRP
:
if
(
get_user
(
pid
,
(
int
*
)
arg
))
err
=
-
EFAULT
;
else
if
(
current
->
pid
!=
pid
&&
current
->
pgrp
!=
-
pid
&&
!
capable
(
CAP_NET_ADMIN
))
err
=
-
EPERM
;
else
sk
->
proc
=
pid
;
err
=
f_setown
(
sock
->
file
,
pid
,
1
)
;
break
;
case
FIOGETOWN
:
case
SIOCGPGRP
:
err
=
put_user
(
s
k
->
proc
,
(
int
*
)
arg
);
err
=
put_user
(
s
ock
->
file
->
f_owner
.
pid
,
(
int
*
)
arg
);
break
;
case
SIOCGSTAMP
:
if
(
!
sk
->
stamp
.
tv_sec
)
...
...
net/ipv4/tcp_input.c
View file @
2a3f7d06
...
...
@@ -3103,13 +3103,7 @@ static void tcp_check_urg(struct sock * sk, struct tcphdr * th)
return
;
/* Tell the world about our new urgent pointer. */
if
(
sk
->
proc
!=
0
)
{
if
(
sk
->
proc
>
0
)
kill_proc
(
sk
->
proc
,
SIGURG
,
1
);
else
kill_pg
(
-
sk
->
proc
,
SIGURG
,
1
);
sk_wake_async
(
sk
,
3
,
POLL_PRI
);
}
sk_send_sigurg
(
sk
);
/* We may be adding urgent data when the last byte read was
* urgent. To do this requires some care. We cannot just ignore
...
...
net/ipv4/tcp_minisocks.c
View file @
2a3f7d06
...
...
@@ -676,7 +676,6 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct open_request *req,
newsk
->
done
=
0
;
newsk
->
userlocks
=
sk
->
userlocks
&
~
SOCK_BINDPORT_LOCK
;
newsk
->
proc
=
0
;
newsk
->
backlog
.
head
=
newsk
->
backlog
.
tail
=
NULL
;
newsk
->
callback_lock
=
RW_LOCK_UNLOCKED
;
skb_queue_head_init
(
&
newsk
->
error_queue
);
...
...
net/ipv6/af_inet6.c
View file @
2a3f7d06
...
...
@@ -463,15 +463,10 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
case
SIOCSPGRP
:
if
(
get_user
(
pid
,
(
int
*
)
arg
))
return
-
EFAULT
;
/* see sock_no_fcntl */
if
(
current
->
pid
!=
pid
&&
current
->
pgrp
!=
-
pid
&&
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
sk
->
proc
=
pid
;
return
(
0
);
return
f_setown
(
sock
->
file
,
pid
,
1
);
case
FIOGETOWN
:
case
SIOCGPGRP
:
return
put_user
(
s
k
->
proc
,
(
int
*
)
arg
);
return
put_user
(
s
ock
->
file
->
f_owner
.
pid
,
(
int
*
)
arg
);
case
SIOCGSTAMP
:
if
(
sk
->
stamp
.
tv_sec
==
0
)
return
-
ENOENT
;
...
...
net/packet/af_packet.c
View file @
2a3f7d06
...
...
@@ -1463,15 +1463,11 @@ static int packet_ioctl(struct socket *sock, unsigned int cmd,
int
pid
;
if
(
get_user
(
pid
,
(
int
*
)
arg
))
return
-
EFAULT
;
if
(
current
->
pid
!=
pid
&&
current
->
pgrp
!=
-
pid
&&
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
sk
->
proc
=
pid
;
break
;
return
f_setown
(
sock
->
file
,
pid
,
1
);
}
case
FIOGETOWN
:
case
SIOCGPGRP
:
return
put_user
(
s
k
->
proc
,
(
int
*
)
arg
);
return
put_user
(
s
ock
->
file
->
f_owner
.
pid
,
(
int
*
)
arg
);
case
SIOCGSTAMP
:
if
(
sk
->
stamp
.
tv_sec
==
0
)
return
-
ENOENT
;
...
...
net/socket.c
View file @
2a3f7d06
...
...
@@ -1516,24 +1516,6 @@ asmlinkage long sys_recvmsg(int fd, struct msghdr *msg, unsigned int flags)
return
err
;
}
/*
* Perform a file control on a socket file descriptor.
*
* Doesn't acquire a fd lock, because no network fcntl
* function sleeps currently.
*/
int
sock_fcntl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
socket
*
sock
;
sock
=
SOCKET_I
(
filp
->
f_dentry
->
d_inode
);
if
(
sock
&&
sock
->
ops
)
return
sock_no_fcntl
(
sock
,
cmd
,
arg
);
return
(
-
EINVAL
);
}
/* Argument list sizes for sys_socketcall */
#define AL(x) ((x) * sizeof(unsigned long))
static
unsigned
char
nargs
[
18
]
=
{
AL
(
0
),
AL
(
3
),
AL
(
3
),
AL
(
3
),
AL
(
2
),
AL
(
3
),
...
...
net/wanrouter/af_wanpipe.c
View file @
2a3f7d06
...
...
@@ -1876,14 +1876,10 @@ static int wanpipe_ioctl(struct socket *sock, unsigned int cmd, unsigned long ar
err
=
get_user
(
pid
,
(
int
*
)
arg
);
if
(
err
)
return
err
;
if
(
current
->
pid
!=
pid
&&
current
->
pgrp
!=
-
pid
&&
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
sk
->
proc
=
pid
;
return
(
0
);
return
f_setown
(
sock
->
file
,
pid
,
1
);
case
FIOGETOWN
:
case
SIOCGPGRP
:
return
put_user
(
s
k
->
proc
,
(
int
*
)
arg
);
return
put_user
(
s
ock
->
file
->
f_owner
.
pid
,
(
int
*
)
arg
);
case
SIOCGSTAMP
:
if
(
sk
->
stamp
.
tv_sec
==
0
)
return
-
ENOENT
;
...
...
net/x25/x25_in.c
View file @
2a3f7d06
...
...
@@ -283,13 +283,7 @@ static int x25_state3_machine(struct sock *sk, struct sk_buff *skb, int frametyp
skb_queue_tail
(
&
x25
->
interrupt_in_queue
,
skb
);
queued
=
1
;
}
if
(
sk
->
proc
!=
0
)
{
if
(
sk
->
proc
>
0
)
kill_proc
(
sk
->
proc
,
SIGURG
,
1
);
else
kill_pg
(
-
sk
->
proc
,
SIGURG
,
1
);
sock_wake_async
(
sk
->
socket
,
3
,
POLL_PRI
);
}
sk_send_sigurg
(
sk
);
x25_write_internal
(
sk
,
X25_INTERRUPT_CONFIRMATION
);
break
;
...
...
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