aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/namei.c b/fs/namei.c
index c9750d755aff..55a131230f94 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -159,7 +159,7 @@ char * getname(const char __user * filename)
159#ifdef CONFIG_AUDITSYSCALL 159#ifdef CONFIG_AUDITSYSCALL
160void putname(const char *name) 160void putname(const char *name)
161{ 161{
162 if (unlikely(current->audit_context)) 162 if (unlikely(!audit_dummy_context()))
163 audit_putname(name); 163 audit_putname(name);
164 else 164 else
165 __putname(name); 165 __putname(name);
@@ -1125,7 +1125,7 @@ static int fastcall do_path_lookup(int dfd, const char *name,
1125 retval = link_path_walk(name, nd); 1125 retval = link_path_walk(name, nd);
1126out: 1126out:
1127 if (likely(retval == 0)) { 1127 if (likely(retval == 0)) {
1128 if (unlikely(current->audit_context && nd && nd->dentry && 1128 if (unlikely(!audit_dummy_context() && nd && nd->dentry &&
1129 nd->dentry->d_inode)) 1129 nd->dentry->d_inode))
1130 audit_inode(name, nd->dentry->d_inode); 1130 audit_inode(name, nd->dentry->d_inode);
1131 } 1131 }
@@ -1357,7 +1357,7 @@ static int may_delete(struct inode *dir,struct dentry *victim,int isdir)
1357 return -ENOENT; 1357 return -ENOENT;
1358 1358
1359 BUG_ON(victim->d_parent->d_inode != dir); 1359 BUG_ON(victim->d_parent->d_inode != dir);
1360 audit_inode_child(victim->d_name.name, victim->d_inode, dir->i_ino); 1360 audit_inode_child(victim->d_name.name, victim->d_inode, dir);
1361 1361
1362 error = permission(dir,MAY_WRITE | MAY_EXEC, NULL); 1362 error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
1363 if (error) 1363 if (error)
@@ -1659,6 +1659,7 @@ do_last:
1659 * It already exists. 1659 * It already exists.
1660 */ 1660 */
1661 mutex_unlock(&dir->d_inode->i_mutex); 1661 mutex_unlock(&dir->d_inode->i_mutex);
1662 audit_inode_update(path.dentry->d_inode);
1662 1663
1663 error = -EEXIST; 1664 error = -EEXIST;
1664 if (flag & O_EXCL) 1665 if (flag & O_EXCL)
@@ -1669,6 +1670,7 @@ do_last:
1669 if (flag & O_NOFOLLOW) 1670 if (flag & O_NOFOLLOW)
1670 goto exit_dput; 1671 goto exit_dput;
1671 } 1672 }
1673
1672 error = -ENOENT; 1674 error = -ENOENT;
1673 if (!path.dentry->d_inode) 1675 if (!path.dentry->d_inode)
1674 goto exit_dput; 1676 goto exit_dput;
@@ -1712,8 +1714,14 @@ do_link:
1712 if (error) 1714 if (error)
1713 goto exit_dput; 1715 goto exit_dput;
1714 error = __do_follow_link(&path, nd); 1716 error = __do_follow_link(&path, nd);
1715 if (error) 1717 if (error) {
1718 /* Does someone understand code flow here? Or it is only
1719 * me so stupid? Anathema to whoever designed this non-sense
1720 * with "intent.open".
1721 */
1722 release_open_intent(nd);
1716 return error; 1723 return error;
1724 }
1717 nd->flags &= ~LOOKUP_PARENT; 1725 nd->flags &= ~LOOKUP_PARENT;
1718 if (nd->last_type == LAST_BIND) 1726 if (nd->last_type == LAST_BIND)
1719 goto ok; 1727 goto ok;