On Mon, 2017-05-15 at 23:42 +0300, Dan Jurgens wrote:
> From: Daniel Jurgens <dani...@mellanox.com>
> 
> Add checkpolicy support for scanning and parsing ibendportcon labels.
> Also create a new ocontext for IB end ports.
> 
> Signed-off-by: Daniel Jurgens <dani...@mellanox.com>
> 
> ---
> v1:
> Stephen Smalley:
> - Check IB device name length when parsing policy.
> - Use strcmp vs strncmp to compare device names.
> 
> Signed-off-by: Daniel Jurgens <dani...@mellanox.com>
> ---
>  checkpolicy/policy_define.c                | 75
> ++++++++++++++++++++++++++++++
>  checkpolicy/policy_define.h                |  1 +
>  checkpolicy/policy_parse.y                 | 14 +++++-
>  checkpolicy/policy_scan.l                  |  2 +
>  libsepol/include/sepol/policydb/policydb.h |  9 +++-
>  5 files changed, 98 insertions(+), 3 deletions(-)
> 
> diff --git a/checkpolicy/policy_define.c
> b/checkpolicy/policy_define.c
> index ffdc5f8..239ca37 100644
> --- a/checkpolicy/policy_define.c
> +++ b/checkpolicy/policy_define.c
> @@ -5162,6 +5162,81 @@ out:
>       return rc;
>  }
>  
> +int define_ibendport_context(unsigned int port)
> +{
> +     ocontext_t *newc, *c, *l, *head;
> +     char *id;
> +     int rc = 0;
> +
> +     if (policydbp->target_platform != SEPOL_TARGET_SELINUX) {
> +             yyerror("ibendportcon not supported for target");
> +             return -1;
> +     }
> +
> +     if (pass == 1) {
> +             id = (char *)queue_remove(id_queue);
> +             free(id);
> +             parse_security_context(NULL);
> +             return 0;
> +     }
> +
> +     newc = malloc(sizeof(*newc));
> +     if (!newc) {
> +             yyerror("out of memory");
> +             return -1;
> +     }
> +     memset(newc, 0, sizeof(*newc));
> +
> +     newc->u.ibendport.dev_name = queue_remove(id_queue);
> +     if (!newc->u.ibendport.dev_name) {
> +             yyerror("failed to read infiniband device name.");
> +             rc = -1;
> +             goto out;
> +     }
> +
> +     if (strlen(newc->u.ibendport.dev_name) > IB_DEVICE_NAME_MAX
> - 1) {
> +             yyerror("infiniband device name exceeds max length
> of 63.");
> +             rc = -1;
> +             goto out;
> +     }
> +
> +     newc->u.ibendport.port = port;

Kernel also treats it as an error if port > 0xff || port == 0.

Reply via email to