Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41735818 authored by Zhao Hongjiang's avatar Zhao Hongjiang Committed by Al Viro
Browse files

fs: change return values from -EACCES to -EPERM



According to SUSv3:

[EACCES] Permission denied. An attempt was made to access a file in a way
forbidden by its file access permissions.

[EPERM] Operation not permitted. An attempt was made to perform an operation
limited to processes with appropriate privileges or to the owner of a file
or other resource.

So -EPERM should be returned if capability checks fails.

Strictly speaking this is an API change since the error code user sees is
altered.

Signed-off-by: default avatarZhao Hongjiang <zhaohongjiang@huawei.com>
Acked-by: default avatarJan Kara <jack@suse.cz>
Acked-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
Acked-by: default avatarIan Kent <raven@themaw.net>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 9cc64cea
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -587,7 +587,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);
+1 −1
Original line number Diff line number Diff line
@@ -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);

+9 −9
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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;
+3 −3
Original line number Diff line number Diff line
@@ -1711,7 +1711,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;
	}

@@ -1844,7 +1844,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;

@@ -1900,7 +1900,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;

Loading