git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
fs
/
proc
/
generic.c
diff --git
a/fs/proc/generic.c
b/fs/proc/generic.c
index
e77cf18
..
72ddf0f
100644
(file)
--- a/
fs/proc/generic.c
+++ b/
fs/proc/generic.c
@@
-18,10
+18,9
@@
#include <linux/init.h>
#include <linux/idr.h>
#include <linux/namei.h>
#include <linux/init.h>
#include <linux/idr.h>
#include <linux/namei.h>
-#include <linux/
vs_base
.h>
+#include <linux/
bitops
.h>
#include <linux/vserver/inode.h>
#include <asm/uaccess.h>
#include <linux/vserver/inode.h>
#include <asm/uaccess.h>
-#include <asm/bitops.h>
static ssize_t proc_file_read(struct file *file, char __user *buf,
size_t nbytes, loff_t *ppos);
static ssize_t proc_file_read(struct file *file, char __user *buf,
size_t nbytes, loff_t *ppos);
@@
-62,7
+61,7
@@
proc_file_read(struct file *file, char __user *buf, size_t nbytes,
return -ENOMEM;
while ((nbytes > 0) && !eof) {
return -ENOMEM;
while ((nbytes > 0) && !eof) {
- count = min_t(s
s
ize_t, PROC_BLOCK_SIZE, nbytes);
+ count = min_t(size_t, PROC_BLOCK_SIZE, nbytes);
start = NULL;
if (dp->get_info) {
start = NULL;
if (dp->get_info) {
@@
-288,7
+287,7
@@
static int xlate_proc_name(const char *name,
}
static DEFINE_IDR(proc_inum_idr);
}
static DEFINE_IDR(proc_inum_idr);
-static
spinlock_t proc_inum_lock = SPIN_LOCK_UNLOCKED
; /* protects the above */
+static
DEFINE_SPINLOCK(proc_inum_lock)
; /* protects the above */
#define PROC_DYNAMIC_FIRST 0xF0000000UL
#define PROC_DYNAMIC_FIRST 0xF0000000UL
@@
-353,15
+352,8
@@
static int proc_delete_dentry(struct dentry * dentry)
return 1;
}
return 1;
}
-static int proc_revalidate_dentry(struct dentry *de, struct nameidata *nd)
-{
- /* maybe add a check if it's really necessary? */
- return 0;
-}
-
static struct dentry_operations proc_dentry_operations =
{
static struct dentry_operations proc_dentry_operations =
{
- .d_revalidate = proc_revalidate_dentry,
.d_delete = proc_delete_dentry,
};
.d_delete = proc_delete_dentry,
};
@@
-388,7
+380,8
@@
struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry, struct nam
error = -EINVAL;
inode = proc_get_inode(dir->i_sb, ino, de);
error = -EINVAL;
inode = proc_get_inode(dir->i_sb, ino, de);
- inode->i_xid = vx_current_xid();
+ /* generic proc entries belong to the host */
+ inode->i_xid = 0;
break;
}
}
break;
}
}
@@
-566,6
+559,11
@@
static struct proc_dir_entry *proc_create(struct proc_dir_entry **parent,
if (!(*parent) && xlate_proc_name(name, parent, &fn) != 0)
goto out;
if (!(*parent) && xlate_proc_name(name, parent, &fn) != 0)
goto out;
+
+ /* At this point there must not be any '/' characters beyond *fn */
+ if (strchr(fn, '/'))
+ goto out;
+
len = strlen(fn);
ent = kmalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
len = strlen(fn);
ent = kmalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);