On Sat 22-09-12 17:11:04, Zhao Hongjiang wrote: > From: Zhao Hongjiang <zhaohongjiang@xxxxxxxxxx> > > Change return value from -EACCES to -EPERM when the permission check fails. Well, I somewhat miss in the changelog why the change is done. Looking into the sources I see we seem to return EPERM in some cases and EACCESS in other cases so is this for consistency? Also strictly speaking this is an API change since the error code user sees is different but I assume noone really cares. So I agree with the change - feel free to add: Acked-by: Jan Kara <jack@xxxxxxx> but please update the changelog. Honza > > Signed-off-by: Zhao Hongjiang <zhaohongjiang@xxxxxxxxxx> > --- > > This patch is based on linux-next tree http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git > --- > fs/autofs4/root.c | 2 +- > fs/dlm/config.c | 2 +- > fs/gfs2/sys.c | 18 +++++++++--------- > fs/ncpfs/ioctl.c | 2 +- > fs/proc/base.c | 6 +++--- > fs/udf/file.c | 2 +- > 6 files changed, 16 insertions(+), 16 deletions(-) > > diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c > index e7396cf..386cca4 100644 > --- a/fs/autofs4/root.c > +++ b/fs/autofs4/root.c > @@ -581,7 +581,7 @@ static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry) > > /* This allows root to remove symlinks */ > if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > if (atomic_dec_and_test(&ino->count)) { > p_ino = autofs4_dentry_ino(dentry->d_parent); > diff --git a/fs/dlm/config.c b/fs/dlm/config.c > index a0387dd..7d58d5b 100644 > --- a/fs/dlm/config.c > +++ b/fs/dlm/config.c > @@ -158,7 +158,7 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, > unsigned int x; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > x = simple_strtoul(buf, NULL, 0); > > diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c > index 8056b7b..0acbe2f 100644 > --- a/fs/gfs2/sys.c > +++ b/fs/gfs2/sys.c > @@ -107,7 +107,7 @@ static ssize_t freeze_store(struct gfs2_sbd *sdp, const char *buf, size_t len) > int n = simple_strtol(buf, NULL, 0); > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > switch (n) { > case 0: > @@ -135,7 +135,7 @@ static ssize_t withdraw_show(struct gfs2_sbd *sdp, char *buf) > static ssize_t withdraw_store(struct gfs2_sbd *sdp, const char *buf, size_t len) > { > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > if (simple_strtol(buf, NULL, 0) != 1) > return -EINVAL; > @@ -150,7 +150,7 @@ static ssize_t statfs_sync_store(struct gfs2_sbd *sdp, const char *buf, > size_t len) > { > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > if (simple_strtol(buf, NULL, 0) != 1) > return -EINVAL; > @@ -163,7 +163,7 @@ static ssize_t quota_sync_store(struct gfs2_sbd *sdp, const char *buf, > size_t len) > { > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > if (simple_strtol(buf, NULL, 0) != 1) > return -EINVAL; > @@ -179,7 +179,7 @@ static ssize_t quota_refresh_user_store(struct gfs2_sbd *sdp, const char *buf, > u32 id; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > id = simple_strtoul(buf, NULL, 0); > > @@ -194,7 +194,7 @@ static ssize_t quota_refresh_group_store(struct gfs2_sbd *sdp, const char *buf, > u32 id; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > id = simple_strtoul(buf, NULL, 0); > > @@ -213,7 +213,7 @@ static ssize_t demote_rq_store(struct gfs2_sbd *sdp, const char *buf, size_t len > int rv; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > rv = sscanf(buf, "%u:%llu %15s", &gltype, &glnum, > mode); > @@ -502,7 +502,7 @@ static ssize_t quota_scale_store(struct gfs2_sbd *sdp, const char *buf, > unsigned int x, y; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > if (sscanf(buf, "%u %u", &x, &y) != 2 || !y) > return -EINVAL; > @@ -521,7 +521,7 @@ static ssize_t tune_set(struct gfs2_sbd *sdp, unsigned int *field, > unsigned int x; > > if (!capable(CAP_SYS_ADMIN)) > - return -EACCES; > + return -EPERM; > > x = simple_strtoul(buf, NULL, 0); > > diff --git a/fs/ncpfs/ioctl.c b/fs/ncpfs/ioctl.c > index 6958adf..24a05ba 100644 > --- a/fs/ncpfs/ioctl.c > +++ b/fs/ncpfs/ioctl.c > @@ -819,7 +819,7 @@ long ncp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > case NCP_IOC_CONN_LOGGED_IN: > case NCP_IOC_SETROOT: > if (!capable(CAP_SYS_ADMIN)) { > - ret = -EACCES; > + ret = -EPERM; > goto out; > } > break; > diff --git a/fs/proc/base.c b/fs/proc/base.c > index db184f0..1c686f2 100644 > --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -1911,7 +1911,7 @@ static int map_files_d_revalidate(struct dentry *dentry, unsigned int flags) > return -ECHILD; > > if (!capable(CAP_SYS_ADMIN)) { > - status = -EACCES; > + status = -EPERM; > goto out_notask; > } > > @@ -2047,7 +2047,7 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, > struct dentry *result; > struct mm_struct *mm; > > - result = ERR_PTR(-EACCES); > + result = ERR_PTR(-EPERM); > if (!capable(CAP_SYS_ADMIN)) > goto out; > > @@ -2101,7 +2101,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) > ino_t ino; > int ret; > > - ret = -EACCES; > + ret = -EPERM; > if (!capable(CAP_SYS_ADMIN)) > goto out; > > diff --git a/fs/udf/file.c b/fs/udf/file.c > index 77b5953..63e25fc 100644 > --- a/fs/udf/file.c > +++ b/fs/udf/file.c > @@ -204,7 +204,7 @@ long udf_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > goto out; > case UDF_RELOCATE_BLOCKS: > if (!capable(CAP_SYS_ADMIN)) { > - result = -EACCES; > + result = -EPERM; > goto out; > } > if (get_user(old_block, (long __user *)arg)) { > -- 1.7.1 -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html