Re: [PATCH] selinux: libselinux: Enable multiple input files to selabel_open.

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

 



On Tue, 2017-10-10 at 14:12 -0700, Daniel Cashman wrote:
> From: Dan Cashman <dcashman@xxxxxxxxxx>
> 
> The file_contexts labeling backend, specified in label_file.c,
> currently assumes
> that only one path will be specified as an option to
> selabel_open().  The split
> of platform and non-platform policy on device, however, will
> necessitate the
> loading of two disparate policy files.  Rather than combining the
> files and then
> calling the existing API on a newly-formed file, just add the ability
> to specify
> multiple files to use.  Order of opt specification to selabel_open
> matters.
> 
> This corresponds to AOSP commit
> 50400d38203e4db08314168e60c281cc61a717a8, which
> lead to a fork with upstream, which we'd like to correct.
> 
> Signed-off-by: Dan Cashman <dcashman@xxxxxxxxxxx>
> ---
>  libselinux/src/label.c          |  21 +++++---
>  libselinux/src/label_db.c       |   4 +-
>  libselinux/src/label_file.c     | 104 +++++++++++++++++++++++++++++-
> ----------
>  libselinux/src/label_internal.h |   5 +-
>  libselinux/src/label_media.c    |   4 +-
>  libselinux/src/label_x.c        |   4 +-
>  6 files changed, 103 insertions(+), 39 deletions(-)
> 

> diff --git a/libselinux/src/label_db.c b/libselinux/src/label_db.c
> index c46d0a1d..205ff5f4 100644
> --- a/libselinux/src/label_db.c
> +++ b/libselinux/src/label_db.c
> @@ -290,7 +290,9 @@ db_init(const struct selinux_opt *opts, unsigned
> nopts,
>  		errno = EINVAL;
>  		return NULL;
>  	}
> -	rec->spec_file = strdup(path);
> +	rec->spec_files_len = 1;
> +	rec->spec_files = calloc(rec->spec_files_len, sizeof(path))

Missing semicolon, and a check for NULL.  Also should likely be
sizeof(rec->spec_files[0]) or sizeof(char *); path isn't really
relevant here.

> +	rec->spec_files[0] = strdup(path);

Ditto, although I see you didn't introduce that per se; we ought to fix
it anyway.

> diff --git a/libselinux/src/label_media.c
> b/libselinux/src/label_media.c
> index d202e5d5..f4a46ffe 100644
> --- a/libselinux/src/label_media.c
> +++ b/libselinux/src/label_media.c
> @@ -100,7 +100,9 @@ static int init(struct selabel_handle *rec, const
> struct selinux_opt *opts,
>  		errno = EINVAL;
>  		return -1;
>  	}
> -	rec->spec_file = strdup(path);
> +	rec->spec_files_len = 1;
> +	rec->spec_files = calloc(rec->spec_files_len, sizeof(path))
> +	rec->spec_files[0] = strdup(path);

Same as for label_db.c.

>  
>  	/* 
>  	 * Perform two passes over the specification file.
> diff --git a/libselinux/src/label_x.c b/libselinux/src/label_x.c
> index 96745299..54ebd2eb 100644
> --- a/libselinux/src/label_x.c
> +++ b/libselinux/src/label_x.c
> @@ -127,7 +127,9 @@ static int init(struct selabel_handle *rec, const
> struct selinux_opt *opts,
>  		errno = EINVAL;
>  		return -1;
>  	}
> -	rec->spec_file = strdup(path);
> +	rec->spec_files_len = 1;
> +	rec->spec_files = calloc(rec->spec_files_len, sizeof(path))
> +	rec->spec_files[0] = strdup(path);

And again.

>  
>  	/* 
>  	 * Perform two passes over the specification file.



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

  Powered by Linux