aboutsummaryrefslogtreecommitdiffstats
path: root/security/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/inode.c')
-rw-r--r--security/inode.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/security/inode.c b/security/inode.c
index 1c812e874504..cb8f47c66a58 100644
--- a/security/inode.c
+++ b/security/inode.c
@@ -53,6 +53,7 @@ static const struct file_operations default_file_ops = {
53 .read = default_read_file, 53 .read = default_read_file,
54 .write = default_write_file, 54 .write = default_write_file,
55 .open = default_open, 55 .open = default_open,
56 .llseek = noop_llseek,
56}; 57};
57 58
58static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev) 59static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev)
@@ -60,6 +61,7 @@ static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev)
60 struct inode *inode = new_inode(sb); 61 struct inode *inode = new_inode(sb);
61 62
62 if (inode) { 63 if (inode) {
64 inode->i_ino = get_next_ino();
63 inode->i_mode = mode; 65 inode->i_mode = mode;
64 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 66 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
65 switch (mode & S_IFMT) { 67 switch (mode & S_IFMT) {
@@ -86,7 +88,7 @@ static int mknod(struct inode *dir, struct dentry *dentry,
86 int mode, dev_t dev) 88 int mode, dev_t dev)
87{ 89{
88 struct inode *inode; 90 struct inode *inode;
89 int error = -EPERM; 91 int error = -ENOMEM;
90 92
91 if (dentry->d_inode) 93 if (dentry->d_inode)
92 return -EEXIST; 94 return -EEXIST;
@@ -166,6 +168,8 @@ static int create_by_name(const char *name, mode_t mode,
166 error = mkdir(parent->d_inode, *dentry, mode); 168 error = mkdir(parent->d_inode, *dentry, mode);
167 else 169 else
168 error = create(parent->d_inode, *dentry, mode); 170 error = create(parent->d_inode, *dentry, mode);
171 if (error)
172 dput(*dentry);
169 } else 173 } else
170 error = PTR_ERR(*dentry); 174 error = PTR_ERR(*dentry);
171 mutex_unlock(&parent->d_inode->i_mutex); 175 mutex_unlock(&parent->d_inode->i_mutex);