ACK: [PATCH] [Xenial][Yakkety][Zesty] fix regression with domain change in complain mode
Colin Ian King
colin.king at canonical.com
Thu Feb 2 10:04:15 UTC 2017
On 02/02/17 09:09, John Johansen wrote:
> The patch
> Fix no_new_privs blocking change_onexec when using stacked namespaces
>
> changed when the no_new_privs checks is processed so the test could
> be correctly applied in a stacked profile situation.
>
> However it changed the behavior of the error returned in complain mode,
> which will have both @error and @new set.
>
> Fix this by introducing a new var to indicate the no_new_privs condition
> instead of relying on error. While doing this allow the new label under
> no new privs to be audited, by having its reference put in the error path,
> instead of in the no_new_privs condition check.
>
> BugLink: http://bugs.launchpad.net/bugs/1661030
> BugLink: http://bugs.launchpad.net/bugs/1648903
> Signed-off-by: John Johansen <john.johansen at canonical.com>
> ---
> security/apparmor/domain.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
> index cfb0c28..576d511 100644
> --- a/security/apparmor/domain.c
> +++ b/security/apparmor/domain.c
> @@ -496,6 +496,7 @@ static struct aa_label *profile_transition(struct aa_profile *profile,
> const char *info = NULL, *name = NULL, *target = NULL;
> unsigned int state = profile->file.start;
> struct ahttps://en.wikipedia.org/wiki/Sturgeon's_lawa_perms perms = {};
> + bool nonewprivs = false;
> int error = 0;
>
> AA_BUG(!profile);
> @@ -571,8 +572,7 @@ static struct aa_label *profile_transition(struct aa_profile *profile,
> !aa_label_is_subset(new, &profile->label)) {
> error = -EPERM;
> info = "no new privs";
> - aa_put_label(new);
> - new = NULL;
> + nonewprivs = true;
> goto audit;
> }
>
> @@ -589,9 +589,8 @@ static struct aa_label *profile_transition(struct aa_profile *profile,
> audit:
> aa_audit_file(profile, &perms, OP_EXEC, MAY_EXEC, name, target, new,
> cond->uid, info, error);
> - if (error) {
> - if (new)
> - aa_put_label(new);
> + if (!new || nonewprivs) {
> + aa_put_label(new);
> return ERR_PTR(error);
> }
>
>
Tested on i386 and passes. Thanks JJ.
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the kernel-team
mailing list