Re: [PATCH 2/2] libsepol: remove dead code in check_avtab_hierarchy_callback()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2010-02-17 at 08:49 +0900, KaiGai Kohei wrote:
> > I'd say we revert the changeset and restore the prior behavior.
> > I don't think we should impose the latter convention on policy writers.
> 
> OK, fair enough for me.
> 
> This patch revert the commit of 7d52a155e38d5a165759dbbee656455861bf7801
> which removed a part of type_attribute_bounds_av as a dead code.
> However, at that time, we didn't find out the target side boundary allows
> to handle some of pseudo /proc/<pid>/* entries with its process's security
> context well.

Does Jacques' original concern about the code still hold true?
http://marc.info/?l=selinux&m=125770868309928&w=2
http://marc.info/?l=selinux&m=125851264424682&w=2

> 
>  Signed-off-by: KaiGai Kohei <kaigai@xxxxxxxxxxxxx>
> --
>  security/selinux/ss/services.c |   43 ++++++++++++++++++++++++++++++++++++---
>  1 files changed, 39 insertions(+), 4 deletions(-)
> 
> diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
> index 4e976f5..42d423c 100644
> --- a/security/selinux/ss/services.c
> +++ b/security/selinux/ss/services.c
> @@ -524,14 +524,16 @@ static void type_attribute_bounds_av(struct context *scontext,
>  				     u16 tclass,
>  				     struct av_decision *avd)
>  {
> +	struct context lo_scontext;
> +	struct context lo_tcontext;
> +	struct av_decision lo_avd;
>  	struct type_datum *source
>  		= policydb.type_val_to_struct[scontext->type - 1];
> +	struct type_datum *target
> +		= policydb.type_val_to_struct[tcontext->type - 1];
> +	u32 masked = 0;
> 
>  	if (source->bounds) {
> -		struct context lo_scontext;
> -		struct av_decision lo_avd;
> -		u32 masked;
> -
>  		memset(&lo_avd, 0, sizeof(lo_avd));
> 
>  		memcpy(&lo_scontext, scontext, sizeof(lo_scontext));
> @@ -544,7 +546,40 @@ static void type_attribute_bounds_av(struct context *scontext,
>  		if ((lo_avd.allowed & avd->allowed) == avd->allowed)
>  			return;		/* no masked permission */
>  		masked = ~lo_avd.allowed & avd->allowed;
> +	}
> +
> +	if (target->bounds) {
> +		memset(&lo_avd, 0, sizeof(lo_avd));
> +
> +		memcpy(&lo_tcontext, tcontext, sizeof(lo_tcontext));
> +		lo_tcontext.type = target->bounds;
> +
> +		context_struct_compute_av(scontext,
> +					  &lo_tcontext,
> +					  tclass,
> +					  &lo_avd);
> +		if ((lo_avd.allowed & avd->allowed) == avd->allowed)
> +			return;		/* no masked permission */
> +		masked = ~lo_avd.allowed & avd->allowed;
> +	}
> +
> +	if (source->bounds && target->bounds) {
> +		memset(&lo_avd, 0, sizeof(lo_avd));
> +		/*
> +		 * lo_scontext and lo_tcontext are already
> +		 * set up.
> +		 */
> +
> +		context_struct_compute_av(&lo_scontext,
> +					  &lo_tcontext,
> +					  tclass,
> +					  &lo_avd);
> +		if ((lo_avd.allowed & avd->allowed) == avd->allowed)
> +			return;		/* no masked permission */
> +		masked = ~lo_avd.allowed & avd->allowed;
> +	}
> 
> +	if (masked) {
>  		/* mask violated permissions */
>  		avd->allowed &= ~masked;
> 
-- 
Stephen Smalley
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux