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

Commit df75e774 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

userns: When the per user per user namespace limit is reached return ENOSPC



The current error codes returned when a the per user per user
namespace limit are hit (EINVAL, EUSERS, and ENFILE) are wrong.  I
asked for advice on linux-api and it we made clear that those were
the wrong error code, but a correct effor code was not suggested.

The best general error code I have found for hitting a resource limit
is ENOSPC.  It is not perfect but as it is unambiguous it will serve
until someone comes up with a better error code.

Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 9c722e40
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2754,7 +2754,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)

	ucounts = inc_mnt_namespaces(user_ns);
	if (!ucounts)
		return ERR_PTR(-ENFILE);
		return ERR_PTR(-ENOSPC);

	new_ns = kmalloc(sizeof(struct mnt_namespace), GFP_KERNEL);
	if (!new_ns) {
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ static struct ipc_namespace *create_ipc_ns(struct user_namespace *user_ns,
	struct ucounts *ucounts;
	int err;

	err = -ENFILE;
	err = -ENOSPC;
	ucounts = inc_ipc_namespaces(user_ns);
	if (!ucounts)
		goto fail;
+1 −1
Original line number Diff line number Diff line
@@ -6354,7 +6354,7 @@ struct cgroup_namespace *copy_cgroup_ns(unsigned long flags,

	ucounts = inc_cgroup_namespaces(user_ns);
	if (!ucounts)
		return ERR_PTR(-ENFILE);
		return ERR_PTR(-ENOSPC);

	/* It is not safe to take cgroup_mutex here */
	spin_lock_irq(&css_set_lock);
+1 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ static struct pid_namespace *create_pid_namespace(struct user_namespace *user_ns
	int i;
	int err;

	err = -EINVAL;
	err = -ENOSPC;
	if (level > MAX_PID_NS_LEVEL)
		goto out;
	ucounts = inc_pid_namespaces(user_ns);
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ int create_user_ns(struct cred *new)
	struct ucounts *ucounts;
	int ret, i;

	ret = -EUSERS;
	ret = -ENOSPC;
	if (parent_ns->level > 32)
		goto fail;

Loading