lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 18 Jul 2017 17:00:04 -0700
From:   John Johansen <john.johansen@...onical.com>
To:     Kees Cook <keescook@...omium.org>,
        Andrew Morton <akpm@...ux-foundation.org>
Cc:     David Howells <dhowells@...hat.com>,
        "Eric W. Biederman" <ebiederm@...ssion.com>,
        "Serge E. Hallyn" <serge@...lyn.com>,
        Paul Moore <paul@...l-moore.com>,
        Stephen Smalley <sds@...ho.nsa.gov>,
        Casey Schaufler <casey@...aufler-ca.com>,
        Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>,
        James Morris <james.l.morris@...cle.com>,
        Andy Lutomirski <luto@...nel.org>,
        Linus Torvalds <torvalds@...ux-foundation.org>,
        linux-fsdevel@...r.kernel.org,
        linux-security-module@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 03/15] apparmor: Refactor to remove bprm_secureexec
 hook

On 07/18/2017 03:25 PM, Kees Cook wrote:
> The AppArmor bprm_secureexec hook can be merged with the bprm_set_creds
> hook since it's dealing with the same information, and all of the details
> are finalized during the first call to the bprm_set_creds hook via
> prepare_binprm() (subsequent calls due to binfmt_script, etc, are ignored
> via bprm->called_set_creds).
> 
> Here, all the comments describe how secureexec is actually calculated
> during bprm_set_creds, so this actually does it, drops the bprm flag that
> was being used internally by AppArmor, and drops the bprm_secureexec hook.
> 
> Cc: John Johansen <john.johansen@...onical.com>
> Signed-off-by: Kees Cook <keescook@...omium.org>

Acked-by: John Johansen <john.johansen@...onical.com>


> ---
>  security/apparmor/domain.c         | 22 +---------------------
>  security/apparmor/include/domain.h |  1 -
>  security/apparmor/include/file.h   |  3 ---
>  security/apparmor/lsm.c            |  1 -
>  4 files changed, 1 insertion(+), 26 deletions(-)
> 
> diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
> index 878407e023e3..1a1b1ec89d9d 100644
> --- a/security/apparmor/domain.c
> +++ b/security/apparmor/domain.c
> @@ -485,14 +485,11 @@ int apparmor_bprm_set_creds(struct linux_binprm *bprm)
>  	 *
>  	 * Cases 2 and 3 are marked as requiring secure exec
>  	 * (unless policy specified "unsafe exec")
> -	 *
> -	 * bprm->unsafe is used to cache the AA_X_UNSAFE permission
> -	 * to avoid having to recompute in secureexec
>  	 */
>  	if (!(perms.xindex & AA_X_UNSAFE)) {
>  		AA_DEBUG("scrubbing environment variables for %s profile=%s\n",
>  			 name, new_profile->base.hname);
> -		bprm->unsafe |= AA_SECURE_X_NEEDED;
> +		bprm->secureexec = 1;
>  	}
>  apply:
>  	/* when transitioning profiles clear unsafe personality bits */
> @@ -521,23 +518,6 @@ int apparmor_bprm_set_creds(struct linux_binprm *bprm)
>  }
>  
>  /**
> - * apparmor_bprm_secureexec - determine if secureexec is needed
> - * @bprm: binprm for exec  (NOT NULL)
> - *
> - * Returns: %1 if secureexec is needed else %0
> - */
> -int apparmor_bprm_secureexec(struct linux_binprm *bprm)
> -{
> -	/* the decision to use secure exec is computed in set_creds
> -	 * and stored in bprm->unsafe.
> -	 */
> -	if (bprm->unsafe & AA_SECURE_X_NEEDED)
> -		return 1;
> -
> -	return 0;
> -}
> -
> -/**
>   * apparmor_bprm_committing_creds - do task cleanup on committing new creds
>   * @bprm: binprm for the exec  (NOT NULL)
>   */
> diff --git a/security/apparmor/include/domain.h b/security/apparmor/include/domain.h
> index 30544729878a..2495af293587 100644
> --- a/security/apparmor/include/domain.h
> +++ b/security/apparmor/include/domain.h
> @@ -24,7 +24,6 @@ struct aa_domain {
>  };
>  
>  int apparmor_bprm_set_creds(struct linux_binprm *bprm);
> -int apparmor_bprm_secureexec(struct linux_binprm *bprm);
>  void apparmor_bprm_committing_creds(struct linux_binprm *bprm);
>  void apparmor_bprm_committed_creds(struct linux_binprm *bprm);
>  
> diff --git a/security/apparmor/include/file.h b/security/apparmor/include/file.h
> index 38f821bf49b6..076ac4501d97 100644
> --- a/security/apparmor/include/file.h
> +++ b/security/apparmor/include/file.h
> @@ -66,9 +66,6 @@ struct path;
>  #define AA_X_INHERIT		0x4000
>  #define AA_X_UNCONFINED		0x8000
>  
> -/* AA_SECURE_X_NEEDED - is passed in the bprm->unsafe field */
> -#define AA_SECURE_X_NEEDED	0x8000
> -
>  /* need to make conditional which ones are being set */
>  struct path_cond {
>  	kuid_t uid;
> diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
> index 8f3c0f7aca5a..291c7126350f 100644
> --- a/security/apparmor/lsm.c
> +++ b/security/apparmor/lsm.c
> @@ -624,7 +624,6 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = {
>  	LSM_HOOK_INIT(bprm_set_creds, apparmor_bprm_set_creds),
>  	LSM_HOOK_INIT(bprm_committing_creds, apparmor_bprm_committing_creds),
>  	LSM_HOOK_INIT(bprm_committed_creds, apparmor_bprm_committed_creds),
> -	LSM_HOOK_INIT(bprm_secureexec, apparmor_bprm_secureexec),
>  
>  	LSM_HOOK_INIT(task_setrlimit, apparmor_task_setrlimit),
>  };
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ