namespaces.c (f01387d2693813eb5271a3448e6a082322c7d75d) | namespaces.c (64964528b24ea390824f0e5ce9d34b8d39b28cde) |
---|---|
1#include <linux/proc_fs.h> 2#include <linux/nsproxy.h> 3#include <linux/sched.h> 4#include <linux/ptrace.h> 5#include <linux/fs_struct.h> 6#include <linux/mount.h> 7#include <linux/path.h> 8#include <linux/namei.h> --- 50 unchanged lines hidden (view full) --- 59 60static struct dentry *proc_ns_get_dentry(struct super_block *sb, 61 struct task_struct *task, const struct proc_ns_operations *ns_ops) 62{ 63 struct dentry *dentry, *result; 64 struct inode *inode; 65 struct proc_inode *ei; 66 struct qstr qname = { .name = "", }; | 1#include <linux/proc_fs.h> 2#include <linux/nsproxy.h> 3#include <linux/sched.h> 4#include <linux/ptrace.h> 5#include <linux/fs_struct.h> 6#include <linux/mount.h> 7#include <linux/path.h> 8#include <linux/namei.h> --- 50 unchanged lines hidden (view full) --- 59 60static struct dentry *proc_ns_get_dentry(struct super_block *sb, 61 struct task_struct *task, const struct proc_ns_operations *ns_ops) 62{ 63 struct dentry *dentry, *result; 64 struct inode *inode; 65 struct proc_inode *ei; 66 struct qstr qname = { .name = "", }; |
67 void *ns; | 67 struct ns_common *ns; |
68 69 ns = ns_ops->get(task); 70 if (!ns) 71 return ERR_PTR(-ENOENT); 72 73 dentry = d_alloc_pseudo(sb, &qname); 74 if (!dentry) { 75 ns_ops->put(ns); 76 return ERR_PTR(-ENOMEM); 77 } 78 | 68 69 ns = ns_ops->get(task); 70 if (!ns) 71 return ERR_PTR(-ENOENT); 72 73 dentry = d_alloc_pseudo(sb, &qname); 74 if (!dentry) { 75 ns_ops->put(ns); 76 return ERR_PTR(-ENOMEM); 77 } 78 |
79 inode = iget_locked(sb, ns_ops->inum(ns)); | 79 inode = iget_locked(sb, ns->inum); |
80 if (!inode) { 81 dput(dentry); 82 ns_ops->put(ns); 83 return ERR_PTR(-ENOMEM); 84 } 85 86 ei = PROC_I(inode); 87 if (inode->i_state & I_NEW) { --- 51 unchanged lines hidden (view full) --- 139} 140 141static int proc_ns_readlink(struct dentry *dentry, char __user *buffer, int buflen) 142{ 143 struct inode *inode = dentry->d_inode; 144 struct proc_inode *ei = PROC_I(inode); 145 const struct proc_ns_operations *ns_ops = ei->ns.ns_ops; 146 struct task_struct *task; | 80 if (!inode) { 81 dput(dentry); 82 ns_ops->put(ns); 83 return ERR_PTR(-ENOMEM); 84 } 85 86 ei = PROC_I(inode); 87 if (inode->i_state & I_NEW) { --- 51 unchanged lines hidden (view full) --- 139} 140 141static int proc_ns_readlink(struct dentry *dentry, char __user *buffer, int buflen) 142{ 143 struct inode *inode = dentry->d_inode; 144 struct proc_inode *ei = PROC_I(inode); 145 const struct proc_ns_operations *ns_ops = ei->ns.ns_ops; 146 struct task_struct *task; |
147 void *ns; | 147 struct ns_common *ns; |
148 char name[50]; 149 int res = -EACCES; 150 151 task = get_proc_task(inode); 152 if (!task) 153 goto out; 154 155 if (!ptrace_may_access(task, PTRACE_MODE_READ)) 156 goto out_put_task; 157 158 res = -ENOENT; 159 ns = ns_ops->get(task); 160 if (!ns) 161 goto out_put_task; 162 | 148 char name[50]; 149 int res = -EACCES; 150 151 task = get_proc_task(inode); 152 if (!task) 153 goto out; 154 155 if (!ptrace_may_access(task, PTRACE_MODE_READ)) 156 goto out_put_task; 157 158 res = -ENOENT; 159 ns = ns_ops->get(task); 160 if (!ns) 161 goto out_put_task; 162 |
163 snprintf(name, sizeof(name), "%s:[%u]", ns_ops->name, ns_ops->inum(ns)); | 163 snprintf(name, sizeof(name), "%s:[%u]", ns_ops->name, ns->inum); |
164 res = readlink_copy(buffer, buflen, name); 165 ns_ops->put(ns); 166out_put_task: 167 put_task_struct(task); 168out: 169 return res; 170} 171 --- 126 unchanged lines hidden --- | 164 res = readlink_copy(buffer, buflen, name); 165 ns_ops->put(ns); 166out_put_task: 167 put_task_struct(task); 168out: 169 return res; 170} 171 --- 126 unchanged lines hidden --- |