Skip to content

Commit 10556cb

Browse files
author
Al Viro
committed
->permission() sanitizing: don't pass flags to ->permission()
not used by the instances anymore. Signed-off-by: Al Viro <[email protected]>
1 parent 2830ba7 commit 10556cb

31 files changed

+55
-55
lines changed

Documentation/filesystems/vfs.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ struct inode_operations {
333333
void * (*follow_link) (struct dentry *, struct nameidata *);
334334
void (*put_link) (struct dentry *, struct nameidata *, void *);
335335
void (*truncate) (struct inode *);
336-
int (*permission) (struct inode *, int, unsigned int);
336+
int (*permission) (struct inode *, int);
337337
int (*check_acl)(struct inode *, int);
338338
int (*setattr) (struct dentry *, struct iattr *);
339339
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
@@ -423,7 +423,7 @@ otherwise noted.
423423
permission: called by the VFS to check for access rights on a POSIX-like
424424
filesystem.
425425

426-
May be called in rcu-walk mode (flags & IPERM_FLAG_RCU). If in rcu-walk
426+
May be called in rcu-walk mode (mask & MAY_NOT_BLOCK). If in rcu-walk
427427
mode, the filesystem must check the permission without blocking or
428428
storing to the inode.
429429

fs/afs/internal.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ extern void afs_clear_permits(struct afs_vnode *);
627627
extern void afs_cache_permit(struct afs_vnode *, struct key *, long);
628628
extern void afs_zap_permits(struct rcu_head *);
629629
extern struct key *afs_request_key(struct afs_cell *);
630-
extern int afs_permission(struct inode *, int, unsigned int);
630+
extern int afs_permission(struct inode *, int);
631631

632632
/*
633633
* server.c

fs/afs/security.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,14 @@ static int afs_check_permit(struct afs_vnode *vnode, struct key *key,
285285
* - AFS ACLs are attached to directories only, and a file is controlled by its
286286
* parent directory's ACL
287287
*/
288-
int afs_permission(struct inode *inode, int mask, unsigned int flags)
288+
int afs_permission(struct inode *inode, int mask)
289289
{
290290
struct afs_vnode *vnode = AFS_FS_I(inode);
291291
afs_access_t uninitialized_var(access);
292292
struct key *key;
293293
int ret;
294294

295-
if (flags & IPERM_FLAG_RCU)
295+
if (mask & MAY_NOT_BLOCK)
296296
return -ECHILD;
297297

298298
_enter("{{%x:%u},%lx},%x,",

fs/bad_inode.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ static int bad_inode_readlink(struct dentry *dentry, char __user *buffer,
229229
return -EIO;
230230
}
231231

232-
static int bad_inode_permission(struct inode *inode, int mask, unsigned int flags)
232+
static int bad_inode_permission(struct inode *inode, int mask)
233233
{
234234
return -EIO;
235235
}

fs/btrfs/inode.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -7331,7 +7331,7 @@ static int btrfs_set_page_dirty(struct page *page)
73317331
return __set_page_dirty_nobuffers(page);
73327332
}
73337333

7334-
static int btrfs_permission(struct inode *inode, int mask, unsigned int flags)
7334+
static int btrfs_permission(struct inode *inode, int mask)
73357335
{
73367336
struct btrfs_root *root = BTRFS_I(inode)->root;
73377337

fs/ceph/inode.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1795,11 +1795,11 @@ int ceph_do_getattr(struct inode *inode, int mask)
17951795
* Check inode permissions. We verify we have a valid value for
17961796
* the AUTH cap, then call the generic handler.
17971797
*/
1798-
int ceph_permission(struct inode *inode, int mask, unsigned int flags)
1798+
int ceph_permission(struct inode *inode, int mask)
17991799
{
18001800
int err;
18011801

1802-
if (flags & IPERM_FLAG_RCU)
1802+
if (mask & MAY_NOT_BLOCK)
18031803
return -ECHILD;
18041804

18051805
err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED);

fs/ceph/super.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ extern void ceph_queue_invalidate(struct inode *inode);
692692
extern void ceph_queue_writeback(struct inode *inode);
693693

694694
extern int ceph_do_getattr(struct inode *inode, int mask);
695-
extern int ceph_permission(struct inode *inode, int mask, unsigned int flags);
695+
extern int ceph_permission(struct inode *inode, int mask);
696696
extern int ceph_setattr(struct dentry *dentry, struct iattr *attr);
697697
extern int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
698698
struct kstat *stat);

fs/cifs/cifsfs.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
224224
return 0;
225225
}
226226

227-
static int cifs_permission(struct inode *inode, int mask, unsigned int flags)
227+
static int cifs_permission(struct inode *inode, int mask)
228228
{
229229
struct cifs_sb_info *cifs_sb;
230230

fs/coda/coda_linux.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ extern const struct file_operations coda_ioctl_operations;
3939
/* operations shared over more than one file */
4040
int coda_open(struct inode *i, struct file *f);
4141
int coda_release(struct inode *i, struct file *f);
42-
int coda_permission(struct inode *inode, int mask, unsigned int flags);
42+
int coda_permission(struct inode *inode, int mask);
4343
int coda_revalidate_inode(struct dentry *);
4444
int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *);
4545
int coda_setattr(struct dentry *, struct iattr *);

fs/coda/dir.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@ static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struc
132132
}
133133

134134

135-
int coda_permission(struct inode *inode, int mask, unsigned int flags)
135+
int coda_permission(struct inode *inode, int mask)
136136
{
137137
int error;
138138

139-
if (flags & IPERM_FLAG_RCU)
139+
if (mask & MAY_NOT_BLOCK)
140140
return -ECHILD;
141141

142142
mask &= MAY_READ | MAY_WRITE | MAY_EXEC;

fs/coda/pioctl.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include "coda_linux.h"
2525

2626
/* pioctl ops */
27-
static int coda_ioctl_permission(struct inode *inode, int mask, unsigned int flags);
27+
static int coda_ioctl_permission(struct inode *inode, int mask);
2828
static long coda_pioctl(struct file *filp, unsigned int cmd,
2929
unsigned long user_data);
3030

@@ -41,7 +41,7 @@ const struct file_operations coda_ioctl_operations = {
4141
};
4242

4343
/* the coda pioctl inode ops */
44-
static int coda_ioctl_permission(struct inode *inode, int mask, unsigned int flags)
44+
static int coda_ioctl_permission(struct inode *inode, int mask)
4545
{
4646
return (mask & MAY_EXEC) ? -EACCES : 0;
4747
}

fs/ecryptfs/inode.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -942,9 +942,9 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
942942
}
943943

944944
static int
945-
ecryptfs_permission(struct inode *inode, int mask, unsigned int flags)
945+
ecryptfs_permission(struct inode *inode, int mask)
946946
{
947-
if (flags & IPERM_FLAG_RCU)
947+
if (mask & MAY_NOT_BLOCK)
948948
return -ECHILD;
949949
return inode_permission(ecryptfs_inode_to_lower(inode), mask);
950950
}

fs/fuse/dir.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -971,9 +971,9 @@ static int fuse_access(struct inode *inode, int mask)
971971
return err;
972972
}
973973

974-
static int fuse_perm_getattr(struct inode *inode, int flags)
974+
static int fuse_perm_getattr(struct inode *inode, int mask)
975975
{
976-
if (flags & IPERM_FLAG_RCU)
976+
if (mask & MAY_NOT_BLOCK)
977977
return -ECHILD;
978978

979979
return fuse_do_getattr(inode, NULL, NULL);
@@ -992,7 +992,7 @@ static int fuse_perm_getattr(struct inode *inode, int flags)
992992
* access request is sent. Execute permission is still checked
993993
* locally based on file mode.
994994
*/
995-
static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
995+
static int fuse_permission(struct inode *inode, int mask)
996996
{
997997
struct fuse_conn *fc = get_fuse_conn(inode);
998998
bool refreshed = false;
@@ -1011,7 +1011,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
10111011
if (fi->i_time < get_jiffies_64()) {
10121012
refreshed = true;
10131013

1014-
err = fuse_perm_getattr(inode, flags);
1014+
err = fuse_perm_getattr(inode, mask);
10151015
if (err)
10161016
return err;
10171017
}
@@ -1024,7 +1024,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
10241024
attributes. This is also needed, because the root
10251025
node will at first have no permissions */
10261026
if (err == -EACCES && !refreshed) {
1027-
err = fuse_perm_getattr(inode, flags);
1027+
err = fuse_perm_getattr(inode, mask);
10281028
if (!err)
10291029
err = generic_permission(inode, mask);
10301030
}
@@ -1034,7 +1034,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
10341034
noticed immediately, only after the attribute
10351035
timeout has expired */
10361036
} else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1037-
if (flags & IPERM_FLAG_RCU)
1037+
if (mask & MAY_NOT_BLOCK)
10381038
return -ECHILD;
10391039

10401040
err = fuse_access(inode, mask);
@@ -1043,7 +1043,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
10431043
if (refreshed)
10441044
return -EACCES;
10451045

1046-
err = fuse_perm_getattr(inode, flags);
1046+
err = fuse_perm_getattr(inode, mask);
10471047
if (!err && !(inode->i_mode & S_IXUGO))
10481048
return -EACCES;
10491049
}

fs/gfs2/file.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
243243
!capable(CAP_LINUX_IMMUTABLE))
244244
goto out;
245245
if (!IS_IMMUTABLE(inode)) {
246-
error = gfs2_permission(inode, MAY_WRITE, 0);
246+
error = gfs2_permission(inode, MAY_WRITE);
247247
if (error)
248248
goto out;
249249
}

fs/gfs2/inode.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
307307
}
308308

309309
if (!is_root) {
310-
error = gfs2_permission(dir, MAY_EXEC, 0);
310+
error = gfs2_permission(dir, MAY_EXEC);
311311
if (error)
312312
goto out;
313313
}
@@ -337,7 +337,7 @@ static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
337337
{
338338
int error;
339339

340-
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0);
340+
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
341341
if (error)
342342
return error;
343343

@@ -857,7 +857,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
857857
if (inode->i_nlink == 0)
858858
goto out_gunlock;
859859

860-
error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC, 0);
860+
error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC);
861861
if (error)
862862
goto out_gunlock;
863863

@@ -990,7 +990,7 @@ static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
990990
if (IS_APPEND(&dip->i_inode))
991991
return -EPERM;
992992

993-
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0);
993+
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
994994
if (error)
995995
return error;
996996

@@ -1336,7 +1336,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
13361336
}
13371337
}
13381338
} else {
1339-
error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC, 0);
1339+
error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC);
13401340
if (error)
13411341
goto out_gunlock;
13421342

@@ -1371,7 +1371,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
13711371
/* Check out the dir to be renamed */
13721372

13731373
if (dir_rename) {
1374-
error = gfs2_permission(odentry->d_inode, MAY_WRITE, 0);
1374+
error = gfs2_permission(odentry->d_inode, MAY_WRITE);
13751375
if (error)
13761376
goto out_gunlock;
13771377
}
@@ -1543,7 +1543,7 @@ static void gfs2_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
15431543
* Returns: errno
15441544
*/
15451545

1546-
int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
1546+
int gfs2_permission(struct inode *inode, int mask)
15471547
{
15481548
struct gfs2_inode *ip;
15491549
struct gfs2_holder i_gh;
@@ -1553,7 +1553,7 @@ int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
15531553

15541554
ip = GFS2_I(inode);
15551555
if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1556-
if (flags & IPERM_FLAG_RCU)
1556+
if (mask & MAY_NOT_BLOCK)
15571557
return -ECHILD;
15581558
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
15591559
if (error)

fs/gfs2/inode.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ extern int gfs2_inode_refresh(struct gfs2_inode *ip);
108108

109109
extern struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
110110
int is_root);
111-
extern int gfs2_permission(struct inode *inode, int mask, unsigned int flags);
111+
extern int gfs2_permission(struct inode *inode, int mask);
112112
extern int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr);
113113
extern struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
114114
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);

fs/hostfs/hostfs_kern.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -748,12 +748,12 @@ int hostfs_rename(struct inode *from_ino, struct dentry *from,
748748
return err;
749749
}
750750

751-
int hostfs_permission(struct inode *ino, int desired, unsigned int flags)
751+
int hostfs_permission(struct inode *ino, int desired)
752752
{
753753
char *name;
754754
int r = 0, w = 0, x = 0, err;
755755

756-
if (flags & IPERM_FLAG_RCU)
756+
if (desired & MAY_NOT_BLOCK)
757757
return -ECHILD;
758758

759759
if (desired & MAY_READ) r = 1;

fs/namei.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ int inode_permission(struct inode *inode, int mask)
287287
}
288288

289289
if (inode->i_op->permission)
290-
retval = inode->i_op->permission(inode, mask, 0);
290+
retval = inode->i_op->permission(inode, mask);
291291
else
292292
retval = generic_permission(inode, mask);
293293

@@ -323,7 +323,7 @@ static inline int exec_permission(struct inode *inode, unsigned int flags)
323323
mask |= MAY_NOT_BLOCK;
324324

325325
if (inode->i_op->permission) {
326-
ret = inode->i_op->permission(inode, mask, flags);
326+
ret = inode->i_op->permission(inode, mask);
327327
if (likely(!ret))
328328
goto ok;
329329
} else {

fs/nfs/dir.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -2273,12 +2273,12 @@ int nfs_may_open(struct inode *inode, struct rpc_cred *cred, int openflags)
22732273
return nfs_do_access(inode, cred, nfs_open_permission_mask(openflags));
22742274
}
22752275

2276-
int nfs_permission(struct inode *inode, int mask, unsigned int flags)
2276+
int nfs_permission(struct inode *inode, int mask)
22772277
{
22782278
struct rpc_cred *cred;
22792279
int res = 0;
22802280

2281-
if (flags & IPERM_FLAG_RCU)
2281+
if (mask & MAY_NOT_BLOCK)
22822282
return -ECHILD;
22832283

22842284
nfs_inc_stats(inode, NFSIOS_VFSACCESS);

fs/nilfs2/inode.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ int nilfs_setattr(struct dentry *dentry, struct iattr *iattr)
799799
return err;
800800
}
801801

802-
int nilfs_permission(struct inode *inode, int mask, unsigned int flags)
802+
int nilfs_permission(struct inode *inode, int mask)
803803
{
804804
struct nilfs_root *root = NILFS_I(inode)->i_root;
805805
if ((mask & MAY_WRITE) && root &&

fs/nilfs2/nilfs.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ extern void nilfs_update_inode(struct inode *, struct buffer_head *);
264264
extern void nilfs_truncate(struct inode *);
265265
extern void nilfs_evict_inode(struct inode *);
266266
extern int nilfs_setattr(struct dentry *, struct iattr *);
267-
int nilfs_permission(struct inode *inode, int mask, unsigned int flags);
267+
int nilfs_permission(struct inode *inode, int mask);
268268
int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh);
269269
extern int nilfs_inode_dirty(struct inode *);
270270
int nilfs_set_file_dirty(struct inode *inode, unsigned nr_dirty);

fs/ocfs2/file.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1279,11 +1279,11 @@ int ocfs2_getattr(struct vfsmount *mnt,
12791279
return err;
12801280
}
12811281

1282-
int ocfs2_permission(struct inode *inode, int mask, unsigned int flags)
1282+
int ocfs2_permission(struct inode *inode, int mask)
12831283
{
12841284
int ret;
12851285

1286-
if (flags & IPERM_FLAG_RCU)
1286+
if (mask & MAY_NOT_BLOCK)
12871287
return -ECHILD;
12881288

12891289
ret = ocfs2_inode_lock(inode, NULL, 0);

fs/ocfs2/file.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh,
6161
int ocfs2_setattr(struct dentry *dentry, struct iattr *attr);
6262
int ocfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
6363
struct kstat *stat);
64-
int ocfs2_permission(struct inode *inode, int mask, unsigned int flags);
64+
int ocfs2_permission(struct inode *inode, int mask);
6565

6666
int ocfs2_should_update_atime(struct inode *inode,
6767
struct vfsmount *vfsmnt);

fs/proc/base.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2167,7 +2167,7 @@ static const struct file_operations proc_fd_operations = {
21672167
* /proc/pid/fd needs a special permission handler so that a process can still
21682168
* access /proc/self/fd after it has executed a setuid().
21692169
*/
2170-
static int proc_fd_permission(struct inode *inode, int mask, unsigned int flags)
2170+
static int proc_fd_permission(struct inode *inode, int mask)
21712171
{
21722172
int rv = generic_permission(inode, mask);
21732173
if (rv == 0)

0 commit comments

Comments
 (0)