kill the last remaining user of proc_ns_fget()
lookups by descriptor are better off closer to syscall surface... Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d2084fd845
commit
38e1240862
18
fs/nsfs.c
18
fs/nsfs.c
|
@ -235,24 +235,6 @@ bool proc_ns_file(const struct file *file)
|
|||
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: current namespace
|
||||
|
|
|
@ -72,7 +72,6 @@ static inline int ns_alloc_inum(struct ns_common *ns)
|
|||
|
||||
#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)
|
||||
extern int ns_get_path(struct path *path, struct task_struct *task,
|
||||
const struct proc_ns_operations *ns_ops);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <linux/sched/task.h>
|
||||
#include <linux/uidgid.h>
|
||||
#include <linux/cookie.h>
|
||||
#include <linux/proc_fs.h>
|
||||
|
||||
#include <net/sock.h>
|
||||
#include <net/netlink.h>
|
||||
|
@ -676,21 +677,19 @@ EXPORT_SYMBOL_GPL(get_net_ns);
|
|||
|
||||
struct net *get_net_ns_by_fd(int fd)
|
||||
{
|
||||
struct file *file;
|
||||
struct ns_common *ns;
|
||||
struct net *net;
|
||||
struct fd f = fdget(fd);
|
||||
struct net *net = ERR_PTR(-EINVAL);
|
||||
|
||||
file = proc_ns_fget(fd);
|
||||
if (IS_ERR(file))
|
||||
return ERR_CAST(file);
|
||||
if (!f.file)
|
||||
return ERR_PTR(-EBADF);
|
||||
|
||||
ns = get_proc_ns(file_inode(file));
|
||||
if (ns->ops == &netns_operations)
|
||||
net = get_net(container_of(ns, struct net, ns));
|
||||
else
|
||||
net = ERR_PTR(-EINVAL);
|
||||
if (proc_ns_file(f.file)) {
|
||||
struct ns_common *ns = get_proc_ns(file_inode(f.file));
|
||||
if (ns->ops == &netns_operations)
|
||||
net = get_net(container_of(ns, struct net, ns));
|
||||
}
|
||||
fdput(f);
|
||||
|
||||
fput(file);
|
||||
return net;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(get_net_ns_by_fd);
|
||||
|
|
Loading…
Reference in New Issue