Commit 38e12408 authored by Al Viro's avatar Al Viro

kill the last remaining user of proc_ns_fget()

lookups by descriptor are better off closer to syscall surface...
Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d2084fd8
...@@ -235,24 +235,6 @@ bool proc_ns_file(const struct file *file) ...@@ -235,24 +235,6 @@ bool proc_ns_file(const struct file *file)
return file->f_op == &ns_file_operations; return file->f_op == &ns_file_operations;
} }
struct file *proc_ns_fget(int fd)
{
struct file *file;
file = fget(fd);
if (!file)
return ERR_PTR(-EBADF);
if (file->f_op != &ns_file_operations)
goto out_invalid;
return file;
out_invalid:
fput(file);
return ERR_PTR(-EINVAL);
}
/** /**
* ns_match() - Returns true if current namespace matches dev/ino provided. * ns_match() - Returns true if current namespace matches dev/ino provided.
* @ns: current namespace * @ns: current namespace
......
...@@ -72,7 +72,6 @@ static inline int ns_alloc_inum(struct ns_common *ns) ...@@ -72,7 +72,6 @@ static inline int ns_alloc_inum(struct ns_common *ns)
#define ns_free_inum(ns) proc_free_inum((ns)->inum) #define ns_free_inum(ns) proc_free_inum((ns)->inum)
extern struct file *proc_ns_fget(int fd);
#define get_proc_ns(inode) ((struct ns_common *)(inode)->i_private) #define get_proc_ns(inode) ((struct ns_common *)(inode)->i_private)
extern int ns_get_path(struct path *path, struct task_struct *task, extern int ns_get_path(struct path *path, struct task_struct *task,
const struct proc_ns_operations *ns_ops); const struct proc_ns_operations *ns_ops);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/sched/task.h> #include <linux/sched/task.h>
#include <linux/uidgid.h> #include <linux/uidgid.h>
#include <linux/cookie.h> #include <linux/cookie.h>
#include <linux/proc_fs.h>
#include <net/sock.h> #include <net/sock.h>
#include <net/netlink.h> #include <net/netlink.h>
...@@ -676,21 +677,19 @@ EXPORT_SYMBOL_GPL(get_net_ns); ...@@ -676,21 +677,19 @@ EXPORT_SYMBOL_GPL(get_net_ns);
struct net *get_net_ns_by_fd(int fd) struct net *get_net_ns_by_fd(int fd)
{ {
struct file *file; struct fd f = fdget(fd);
struct ns_common *ns; struct net *net = ERR_PTR(-EINVAL);
struct net *net;
file = proc_ns_fget(fd); if (!f.file)
if (IS_ERR(file)) return ERR_PTR(-EBADF);
return ERR_CAST(file);
ns = get_proc_ns(file_inode(file)); if (proc_ns_file(f.file)) {
struct ns_common *ns = get_proc_ns(file_inode(f.file));
if (ns->ops == &netns_operations) if (ns->ops == &netns_operations)
net = get_net(container_of(ns, struct net, ns)); net = get_net(container_of(ns, struct net, ns));
else }
net = ERR_PTR(-EINVAL); fdput(f);
fput(file);
return net; return net;
} }
EXPORT_SYMBOL_GPL(get_net_ns_by_fd); EXPORT_SYMBOL_GPL(get_net_ns_by_fd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment