diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-08-18 00:25:51 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-26 21:08:50 -0400 |
commit | 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285 (patch) | |
tree | 44521dbcdf51695b6092f2a4dabe83f460c2ed7c /net/socket.c | |
parent | 28407630513b1a86133db0ef8b39fabad6c494af (diff) |
unexport sock_map_fd(), switch to sock_alloc_file()
Both modular callers of sock_map_fd() had been buggy; sctp one leaks
descriptor and file if copy_to_user() fails, 9p one shouldn't be
exposing file in the descriptor table at all.
Switch both to sock_alloc_file(), export it, unexport sock_map_fd() and
make it static.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/socket.c b/net/socket.c index a14ec19164b6..38a14311f3a6 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -346,7 +346,7 @@ static struct file_system_type sock_fs_type = { | |||
346 | * but we take care of internal coherence yet. | 346 | * but we take care of internal coherence yet. |
347 | */ | 347 | */ |
348 | 348 | ||
349 | static struct file *sock_alloc_file(struct socket *sock, int flags) | 349 | struct file *sock_alloc_file(struct socket *sock, int flags) |
350 | { | 350 | { |
351 | struct qstr name = { .name = "" }; | 351 | struct qstr name = { .name = "" }; |
352 | struct path path; | 352 | struct path path; |
@@ -375,8 +375,9 @@ static struct file *sock_alloc_file(struct socket *sock, int flags) | |||
375 | file->private_data = sock; | 375 | file->private_data = sock; |
376 | return file; | 376 | return file; |
377 | } | 377 | } |
378 | EXPORT_SYMBOL(sock_alloc_file); | ||
378 | 379 | ||
379 | int sock_map_fd(struct socket *sock, int flags) | 380 | static int sock_map_fd(struct socket *sock, int flags) |
380 | { | 381 | { |
381 | struct file *newfile; | 382 | struct file *newfile; |
382 | int fd = get_unused_fd_flags(flags); | 383 | int fd = get_unused_fd_flags(flags); |
@@ -392,7 +393,6 @@ int sock_map_fd(struct socket *sock, int flags) | |||
392 | put_unused_fd(fd); | 393 | put_unused_fd(fd); |
393 | return PTR_ERR(newfile); | 394 | return PTR_ERR(newfile); |
394 | } | 395 | } |
395 | EXPORT_SYMBOL(sock_map_fd); | ||
396 | 396 | ||
397 | struct socket *sock_from_file(struct file *file, int *err) | 397 | struct socket *sock_from_file(struct file *file, int *err) |
398 | { | 398 | { |