mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 08:24:42 +01:00
212 lines
6 KiB
Diff
212 lines
6 KiB
Diff
From: Andreas Gruenbacher <agruen@suse.de>
|
|
Subject: Pass struct file down to remove_suid and children
|
|
|
|
Pass struct path to remove_suid and should_remove_suid instead of
|
|
only the dentry. Required by a later patch that adds a struct
|
|
vfsmount parameter to notify_change().
|
|
|
|
Signed-off-by: Tony Jones <tonyj@suse.de>
|
|
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
|
|
Signed-off-by: John Johansen <jjohansen@suse.de>
|
|
|
|
---
|
|
fs/ntfs/file.c | 2 +-
|
|
fs/ocfs2/file.c | 10 +++++-----
|
|
fs/reiserfs/file.c | 2 +-
|
|
fs/splice.c | 6 +++---
|
|
fs/xfs/linux-2.6/xfs_lrw.c | 2 +-
|
|
include/linux/fs.h | 6 +++---
|
|
mm/filemap.c | 16 ++++++++--------
|
|
mm/filemap_xip.c | 2 +-
|
|
mm/shmem.c | 2 +-
|
|
9 files changed, 24 insertions(+), 24 deletions(-)
|
|
|
|
--- a/fs/ntfs/file.c
|
|
+++ b/fs/ntfs/file.c
|
|
@@ -2146,7 +2146,7 @@ static ssize_t ntfs_file_aio_write_noloc
|
|
goto out;
|
|
if (!count)
|
|
goto out;
|
|
- err = remove_suid(file->f_path.dentry);
|
|
+ err = remove_suid(&file->f_path);
|
|
if (err)
|
|
goto out;
|
|
file_update_time(file);
|
|
--- a/fs/ocfs2/file.c
|
|
+++ b/fs/ocfs2/file.c
|
|
@@ -1158,14 +1158,14 @@ out:
|
|
return ret;
|
|
}
|
|
|
|
-static int ocfs2_prepare_inode_for_write(struct dentry *dentry,
|
|
+static int ocfs2_prepare_inode_for_write(struct path *path,
|
|
loff_t *ppos,
|
|
size_t count,
|
|
int appending,
|
|
int *direct_io)
|
|
{
|
|
int ret = 0, meta_level = appending;
|
|
- struct inode *inode = dentry->d_inode;
|
|
+ struct inode *inode = path->dentry->d_inode;
|
|
u32 clusters;
|
|
loff_t newsize, saved_pos;
|
|
|
|
@@ -1191,7 +1191,7 @@ static int ocfs2_prepare_inode_for_write
|
|
* inode. There's also the dinode i_size state which
|
|
* can be lost via setattr during extending writes (we
|
|
* set inode->i_size at the end of a write. */
|
|
- if (should_remove_suid(dentry)) {
|
|
+ if (should_remove_suid(path)) {
|
|
if (meta_level == 0) {
|
|
ocfs2_meta_unlock(inode, meta_level);
|
|
meta_level = 1;
|
|
@@ -1499,7 +1499,7 @@ relock:
|
|
}
|
|
|
|
can_do_direct = direct_io;
|
|
- ret = ocfs2_prepare_inode_for_write(file->f_path.dentry, ppos,
|
|
+ ret = ocfs2_prepare_inode_for_write(&file->f_path, ppos,
|
|
iocb->ki_left, appending,
|
|
&can_do_direct);
|
|
if (ret < 0) {
|
|
@@ -1704,7 +1704,7 @@ static ssize_t ocfs2_file_splice_write(s
|
|
goto out;
|
|
}
|
|
|
|
- ret = ocfs2_prepare_inode_for_write(out->f_path.dentry, ppos, len, 0,
|
|
+ ret = ocfs2_prepare_inode_for_write(&out->f_path, ppos, len, 0,
|
|
NULL);
|
|
if (ret < 0) {
|
|
mlog_errno(ret);
|
|
--- a/fs/reiserfs/file.c
|
|
+++ b/fs/reiserfs/file.c
|
|
@@ -1352,7 +1352,7 @@ static ssize_t reiserfs_file_write(struc
|
|
if (count == 0)
|
|
goto out;
|
|
|
|
- res = remove_suid(file->f_path.dentry);
|
|
+ res = remove_suid(&file->f_path);
|
|
if (res)
|
|
goto out;
|
|
|
|
--- a/fs/splice.c
|
|
+++ b/fs/splice.c
|
|
@@ -796,7 +796,7 @@ generic_file_splice_write_nolock(struct
|
|
ssize_t ret;
|
|
int err;
|
|
|
|
- err = remove_suid(out->f_path.dentry);
|
|
+ err = remove_suid(&out->f_path);
|
|
if (unlikely(err))
|
|
return err;
|
|
|
|
@@ -842,10 +842,10 @@ generic_file_splice_write(struct pipe_in
|
|
ssize_t ret;
|
|
int err;
|
|
|
|
- err = should_remove_suid(out->f_path.dentry);
|
|
+ err = should_remove_suid(&out->f_path);
|
|
if (unlikely(err)) {
|
|
mutex_lock(&inode->i_mutex);
|
|
- err = __remove_suid(out->f_path.dentry, err);
|
|
+ err = __remove_suid(&out->f_path, err);
|
|
mutex_unlock(&inode->i_mutex);
|
|
if (err)
|
|
return err;
|
|
--- a/fs/xfs/linux-2.6/xfs_lrw.c
|
|
+++ b/fs/xfs/linux-2.6/xfs_lrw.c
|
|
@@ -798,7 +798,7 @@ start:
|
|
!capable(CAP_FSETID)) {
|
|
error = xfs_write_clear_setuid(xip);
|
|
if (likely(!error))
|
|
- error = -remove_suid(file->f_path.dentry);
|
|
+ error = -remove_suid(&file->f_path);
|
|
if (unlikely(error)) {
|
|
goto out_unlock_internal;
|
|
}
|
|
--- a/include/linux/fs.h
|
|
+++ b/include/linux/fs.h
|
|
@@ -1697,9 +1697,9 @@ extern void __iget(struct inode * inode)
|
|
extern void clear_inode(struct inode *);
|
|
extern void destroy_inode(struct inode *);
|
|
extern struct inode *new_inode(struct super_block *);
|
|
-extern int __remove_suid(struct dentry *, int);
|
|
-extern int should_remove_suid(struct dentry *);
|
|
-extern int remove_suid(struct dentry *);
|
|
+extern int __remove_suid(struct path *, int);
|
|
+extern int should_remove_suid(struct path *);
|
|
+extern int remove_suid(struct path *);
|
|
|
|
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
|
|
extern void remove_inode_hash(struct inode *);
|
|
--- a/mm/filemap.c
|
|
+++ b/mm/filemap.c
|
|
@@ -1880,9 +1880,9 @@ repeat:
|
|
* if suid or (sgid and xgrp)
|
|
* remove privs
|
|
*/
|
|
-int should_remove_suid(struct dentry *dentry)
|
|
+int should_remove_suid(struct path *path)
|
|
{
|
|
- mode_t mode = dentry->d_inode->i_mode;
|
|
+ mode_t mode = path->dentry->d_inode->i_mode;
|
|
int kill = 0;
|
|
|
|
/* suid always must be killed */
|
|
@@ -1903,20 +1903,20 @@ int should_remove_suid(struct dentry *de
|
|
}
|
|
EXPORT_SYMBOL(should_remove_suid);
|
|
|
|
-int __remove_suid(struct dentry *dentry, int kill)
|
|
+int __remove_suid(struct path *path, int kill)
|
|
{
|
|
struct iattr newattrs;
|
|
|
|
newattrs.ia_valid = ATTR_FORCE | kill;
|
|
- return notify_change(dentry, &newattrs);
|
|
+ return notify_change(path->dentry, &newattrs);
|
|
}
|
|
|
|
-int remove_suid(struct dentry *dentry)
|
|
+int remove_suid(struct path *path)
|
|
{
|
|
- int kill = should_remove_suid(dentry);
|
|
+ int kill = should_remove_suid(path);
|
|
|
|
if (unlikely(kill))
|
|
- return __remove_suid(dentry, kill);
|
|
+ return __remove_suid(path, kill);
|
|
|
|
return 0;
|
|
}
|
|
@@ -2267,7 +2267,7 @@ __generic_file_aio_write_nolock(struct k
|
|
if (count == 0)
|
|
goto out;
|
|
|
|
- err = remove_suid(file->f_path.dentry);
|
|
+ err = remove_suid(&file->f_path);
|
|
if (err)
|
|
goto out;
|
|
|
|
--- a/mm/filemap_xip.c
|
|
+++ b/mm/filemap_xip.c
|
|
@@ -405,7 +405,7 @@ xip_file_write(struct file *filp, const
|
|
if (count == 0)
|
|
goto out_backing;
|
|
|
|
- ret = remove_suid(filp->f_path.dentry);
|
|
+ ret = remove_suid(&filp->f_path);
|
|
if (ret)
|
|
goto out_backing;
|
|
|
|
--- a/mm/shmem.c
|
|
+++ b/mm/shmem.c
|
|
@@ -1516,7 +1516,7 @@ shmem_file_write(struct file *file, cons
|
|
if (err || !count)
|
|
goto out;
|
|
|
|
- err = remove_suid(file->f_path.dentry);
|
|
+ err = remove_suid(&file->f_path);
|
|
if (err)
|
|
goto out;
|
|
|