All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v3 00/19] CALIPSO Implementation
@ 2016-02-17 13:21 ` Huw Davies
  0 siblings, 0 replies; 4+ messages in thread
From: Huw Davies @ 2016-02-17 13:21 UTC (permalink / raw)
  To: netdev, linux-security-module, selinux; +Cc: Paul Moore

This patch series implements RFC 5570 - Common Architecture Label IPv6
Security Option (CALIPSO).  Its goal is to set MLS sensitivity labels
on IPv6 packets using a hop-by-hop option.  CALIPSO is very similar to
its IPv4 cousin CIPSO and much of this series is based on that code.

If anybody actually wants to play with this, then you'll need some patches
to netlabel-tools that are currently available on the 'calipso' branch at:
https://github.com/hdmdavies/netlabel_tools.git .  The protocol has changed
very slightly from the v2 patches, so please update to the latest.

This patch series is based off v4.5-rc4.

Thanks to Paul Moore, Hannes Frederic Sowa, Casey Schaufler and Julia
Lawall for their comments so far.

Changes between v3 and v2:

* Change CALIPSO_MAP_PASS to 2.
* Move calipso_init() before ipv6_sysctl_register().
* Rewrite calipso_tlv_len() to check for overflows.
* Simplify calispo_opt_find().
* Simplify calipso_opt_insert().
* Use calipso_tlv_len() in calipso_sock_getattr().
* Simplify calipso_skbuff_setattr().
* Return early from netlbl_domhsh_search_def() when a match is found.
* Remove nested if from netlbl_domhsh_validate().
* Don't return from netlbl_domhsh_add() with lock held.
* Various style changes.
* Rebased to v4.5-rc4.

Changes between v2 and v1:

* Simplify ipv6_renew_options_kern() to use set_fs(KERNEL_DS).
  Thanks to Hannes Frederic Sowa for suggesting this.
* Use the parent socket to account for the listener socket
  option's memory usage.  Again, thanks for Hannes for this.
* Added netlbl_cfg_calipso_* functions for SMACK.
* Rebased to v4.4-rc8.

Huw Davies (19):
  netlabel: Mark rcu pointers with __rcu.
  netlabel: Add an address family to domain hash entries.
  netlabel: Initial support for the CALIPSO netlink protocol.
  netlabel: Add support for querying a CALIPSO DOI.
  netlabel: Add support for enumerating the CALIPSO DOI list.
  netlabel: Add support for creating a CALIPSO protocol domain mapping.
  netlabel: Add support for removing a CALIPSO DOI.
  ipv6: Add ipv6_renew_options_kern() that accepts a kernel mem pointer.
  netlabel: Move bitmap manipulation functions to the NetLabel core.
  calipso: Set the calipso socket label to match the secattr.
  netlabel: Prevent setsockopt() from changing the hop-by-hop option.
  ipv6: Allow request socks to contain IPv6 options.
  calipso: Allow request sockets to be relabelled by the lsm.
  ipv6: constify the skb pointer of ipv6_find_tlv().
  calipso: Allow the lsm to label the skbuff directly.
  netlabel: Pass a family parameter to netlbl_skbuff_err().
  calipso: Add validation of CALIPSO option.
  calipso: Add a label cache.
  netlabel: Implement CALIPSO config functions for SMACK.

 include/net/calipso.h               |   91 +++
 include/net/inet_sock.h             |    7 +-
 include/net/ipv6.h                  |   10 +-
 include/net/netlabel.h              |  101 ++-
 include/uapi/linux/audit.h          |    2 +
 include/uapi/linux/in6.h            |    1 +
 net/dccp/ipv6.c                     |   12 +-
 net/ipv4/cipso_ipv4.c               |   88 +--
 net/ipv4/tcp_input.c                |    3 +
 net/ipv6/Makefile                   |    1 +
 net/ipv6/af_inet6.c                 |    9 +-
 net/ipv6/calipso.c                  | 1474 +++++++++++++++++++++++++++++++++++
 net/ipv6/exthdrs.c                  |   76 ++
 net/ipv6/exthdrs_core.c             |    2 +-
 net/ipv6/ipv6_sockglue.c            |    1 -
 net/ipv6/sysctl_net_ipv6.c          |   19 +
 net/ipv6/tcp_ipv6.c                 |   12 +-
 net/netlabel/Kconfig                |    1 +
 net/netlabel/Makefile               |    2 +-
 net/netlabel/netlabel_calipso.c     |  740 ++++++++++++++++++
 net/netlabel/netlabel_calipso.h     |  151 ++++
 net/netlabel/netlabel_domainhash.c  |  293 +++++--
 net/netlabel/netlabel_domainhash.h  |   17 +-
 net/netlabel/netlabel_kapi.c        |  385 ++++++++-
 net/netlabel/netlabel_mgmt.c        |   85 +-
 net/netlabel/netlabel_mgmt.h        |   27 +-
 net/netlabel/netlabel_unlabeled.c   |    5 +-
 net/netlabel/netlabel_user.c        |    5 +
 security/selinux/hooks.c            |   21 +-
 security/selinux/include/netlabel.h |    4 +-
 security/selinux/netlabel.c         |   36 +-
 security/smack/smack_lsm.c          |    2 +-
 32 files changed, 3480 insertions(+), 203 deletions(-)
 create mode 100644 include/net/calipso.h
 create mode 100644 net/ipv6/calipso.c
 create mode 100644 net/netlabel/netlabel_calipso.c
 create mode 100644 net/netlabel/netlabel_calipso.h

-- 
2.7.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [RFC PATCH v3 00/19] CALIPSO Implementation
@ 2016-02-17 13:21 ` Huw Davies
  0 siblings, 0 replies; 4+ messages in thread
From: Huw Davies @ 2016-02-17 13:21 UTC (permalink / raw)
  To: netdev, linux-security-module, selinux

This patch series implements RFC 5570 - Common Architecture Label IPv6
Security Option (CALIPSO).  Its goal is to set MLS sensitivity labels
on IPv6 packets using a hop-by-hop option.  CALIPSO is very similar to
its IPv4 cousin CIPSO and much of this series is based on that code.

If anybody actually wants to play with this, then you'll need some patches
to netlabel-tools that are currently available on the 'calipso' branch at:
https://github.com/hdmdavies/netlabel_tools.git .  The protocol has changed
very slightly from the v2 patches, so please update to the latest.

This patch series is based off v4.5-rc4.

Thanks to Paul Moore, Hannes Frederic Sowa, Casey Schaufler and Julia
Lawall for their comments so far.

Changes between v3 and v2:

* Change CALIPSO_MAP_PASS to 2.
* Move calipso_init() before ipv6_sysctl_register().
* Rewrite calipso_tlv_len() to check for overflows.
* Simplify calispo_opt_find().
* Simplify calipso_opt_insert().
* Use calipso_tlv_len() in calipso_sock_getattr().
* Simplify calipso_skbuff_setattr().
* Return early from netlbl_domhsh_search_def() when a match is found.
* Remove nested if from netlbl_domhsh_validate().
* Don't return from netlbl_domhsh_add() with lock held.
* Various style changes.
* Rebased to v4.5-rc4.

Changes between v2 and v1:

* Simplify ipv6_renew_options_kern() to use set_fs(KERNEL_DS).
  Thanks to Hannes Frederic Sowa for suggesting this.
* Use the parent socket to account for the listener socket
  option's memory usage.  Again, thanks for Hannes for this.
* Added netlbl_cfg_calipso_* functions for SMACK.
* Rebased to v4.4-rc8.

Huw Davies (19):
  netlabel: Mark rcu pointers with __rcu.
  netlabel: Add an address family to domain hash entries.
  netlabel: Initial support for the CALIPSO netlink protocol.
  netlabel: Add support for querying a CALIPSO DOI.
  netlabel: Add support for enumerating the CALIPSO DOI list.
  netlabel: Add support for creating a CALIPSO protocol domain mapping.
  netlabel: Add support for removing a CALIPSO DOI.
  ipv6: Add ipv6_renew_options_kern() that accepts a kernel mem pointer.
  netlabel: Move bitmap manipulation functions to the NetLabel core.
  calipso: Set the calipso socket label to match the secattr.
  netlabel: Prevent setsockopt() from changing the hop-by-hop option.
  ipv6: Allow request socks to contain IPv6 options.
  calipso: Allow request sockets to be relabelled by the lsm.
  ipv6: constify the skb pointer of ipv6_find_tlv().
  calipso: Allow the lsm to label the skbuff directly.
  netlabel: Pass a family parameter to netlbl_skbuff_err().
  calipso: Add validation of CALIPSO option.
  calipso: Add a label cache.
  netlabel: Implement CALIPSO config functions for SMACK.

 include/net/calipso.h               |   91 +++
 include/net/inet_sock.h             |    7 +-
 include/net/ipv6.h                  |   10 +-
 include/net/netlabel.h              |  101 ++-
 include/uapi/linux/audit.h          |    2 +
 include/uapi/linux/in6.h            |    1 +
 net/dccp/ipv6.c                     |   12 +-
 net/ipv4/cipso_ipv4.c               |   88 +--
 net/ipv4/tcp_input.c                |    3 +
 net/ipv6/Makefile                   |    1 +
 net/ipv6/af_inet6.c                 |    9 +-
 net/ipv6/calipso.c                  | 1474 +++++++++++++++++++++++++++++++++++
 net/ipv6/exthdrs.c                  |   76 ++
 net/ipv6/exthdrs_core.c             |    2 +-
 net/ipv6/ipv6_sockglue.c            |    1 -
 net/ipv6/sysctl_net_ipv6.c          |   19 +
 net/ipv6/tcp_ipv6.c                 |   12 +-
 net/netlabel/Kconfig                |    1 +
 net/netlabel/Makefile               |    2 +-
 net/netlabel/netlabel_calipso.c     |  740 ++++++++++++++++++
 net/netlabel/netlabel_calipso.h     |  151 ++++
 net/netlabel/netlabel_domainhash.c  |  293 +++++--
 net/netlabel/netlabel_domainhash.h  |   17 +-
 net/netlabel/netlabel_kapi.c        |  385 ++++++++-
 net/netlabel/netlabel_mgmt.c        |   85 +-
 net/netlabel/netlabel_mgmt.h        |   27 +-
 net/netlabel/netlabel_unlabeled.c   |    5 +-
 net/netlabel/netlabel_user.c        |    5 +
 security/selinux/hooks.c            |   21 +-
 security/selinux/include/netlabel.h |    4 +-
 security/selinux/netlabel.c         |   36 +-
 security/smack/smack_lsm.c          |    2 +-
 32 files changed, 3480 insertions(+), 203 deletions(-)
 create mode 100644 include/net/calipso.h
 create mode 100644 net/ipv6/calipso.c
 create mode 100644 net/netlabel/netlabel_calipso.c
 create mode 100644 net/netlabel/netlabel_calipso.h

-- 
2.7.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH v3 00/19] CALIPSO Implementation
  2016-02-17 13:21 ` Huw Davies
@ 2016-05-06 23:07   ` Paul Moore
  -1 siblings, 0 replies; 4+ messages in thread
From: Paul Moore @ 2016-05-06 23:07 UTC (permalink / raw)
  To: Huw Davies, netdev, selinux, linux-security-module; +Cc: Paul Moore

On Wed, Feb 17, 2016 at 8:21 AM, Huw Davies <huw@codeweavers.com> wrote:
> This patch series implements RFC 5570 - Common Architecture Label IPv6
> Security Option (CALIPSO).  Its goal is to set MLS sensitivity labels
> on IPv6 packets using a hop-by-hop option.  CALIPSO is very similar to
> its IPv4 cousin CIPSO and much of this series is based on that code.
>
> If anybody actually wants to play with this, then you'll need some patches
> to netlabel-tools that are currently available on the 'calipso' branch at:
> https://github.com/hdmdavies/netlabel_tools.git .  The protocol has changed
> very slightly from the v2 patches, so please update to the latest.
>
> This patch series is based off v4.5-rc4.
>
> Thanks to Paul Moore, Hannes Frederic Sowa, Casey Schaufler and Julia
> Lawall for their comments so far.
>
> Changes between v3 and v2:
>
> * Change CALIPSO_MAP_PASS to 2.
> * Move calipso_init() before ipv6_sysctl_register().
> * Rewrite calipso_tlv_len() to check for overflows.
> * Simplify calispo_opt_find().
> * Simplify calipso_opt_insert().
> * Use calipso_tlv_len() in calipso_sock_getattr().
> * Simplify calipso_skbuff_setattr().
> * Return early from netlbl_domhsh_search_def() when a match is found.
> * Remove nested if from netlbl_domhsh_validate().
> * Don't return from netlbl_domhsh_add() with lock held.
> * Various style changes.
> * Rebased to v4.5-rc4.
>
> Changes between v2 and v1:
>
> * Simplify ipv6_renew_options_kern() to use set_fs(KERNEL_DS).
>   Thanks to Hannes Frederic Sowa for suggesting this.
> * Use the parent socket to account for the listener socket
>   option's memory usage.  Again, thanks for Hannes for this.
> * Added netlbl_cfg_calipso_* functions for SMACK.
> * Rebased to v4.4-rc8.
>
> Huw Davies (19):
>   netlabel: Mark rcu pointers with __rcu.
>   netlabel: Add an address family to domain hash entries.
>   netlabel: Initial support for the CALIPSO netlink protocol.
>   netlabel: Add support for querying a CALIPSO DOI.
>   netlabel: Add support for enumerating the CALIPSO DOI list.
>   netlabel: Add support for creating a CALIPSO protocol domain mapping.
>   netlabel: Add support for removing a CALIPSO DOI.
>   ipv6: Add ipv6_renew_options_kern() that accepts a kernel mem pointer.
>   netlabel: Move bitmap manipulation functions to the NetLabel core.
>   calipso: Set the calipso socket label to match the secattr.
>   netlabel: Prevent setsockopt() from changing the hop-by-hop option.
>   ipv6: Allow request socks to contain IPv6 options.
>   calipso: Allow request sockets to be relabelled by the lsm.
>   ipv6: constify the skb pointer of ipv6_find_tlv().
>   calipso: Allow the lsm to label the skbuff directly.
>   netlabel: Pass a family parameter to netlbl_skbuff_err().
>   calipso: Add validation of CALIPSO option.
>   calipso: Add a label cache.
>   netlabel: Implement CALIPSO config functions for SMACK.

Other than the small nit I just mentioned with respect to CALIPSO
option validation code, this all looks reasonable to me.  I know you
are in the process of doing interop with Solaris TX folks, assuming
that goes well I think we are ready to throw this into linux-next with
an eye towards v4.8.  For the past several weeks I've been including
this patchset in my Fedora COPR test kernels (located below), others
are welcome to try it out if they like.

DaveM, what is your take on this?  I'm happy to get this into
linux-next via the SELinux tree, but it does touch some core network
code (the IPv6 option handling, much in the same way as CIPSO touched
the IPv4 option handling) and I don't want to push this if you aren't
okay with it.  Of course if you want to take this via your tree that's
fine with me too.

-- 
paul moore
www.paul-moore.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH v3 00/19] CALIPSO Implementation
@ 2016-05-06 23:07   ` Paul Moore
  0 siblings, 0 replies; 4+ messages in thread
From: Paul Moore @ 2016-05-06 23:07 UTC (permalink / raw)
  To: Huw Davies, netdev, selinux, linux-security-module

On Wed, Feb 17, 2016 at 8:21 AM, Huw Davies <huw@codeweavers.com> wrote:
> This patch series implements RFC 5570 - Common Architecture Label IPv6
> Security Option (CALIPSO).  Its goal is to set MLS sensitivity labels
> on IPv6 packets using a hop-by-hop option.  CALIPSO is very similar to
> its IPv4 cousin CIPSO and much of this series is based on that code.
>
> If anybody actually wants to play with this, then you'll need some patches
> to netlabel-tools that are currently available on the 'calipso' branch at:
> https://github.com/hdmdavies/netlabel_tools.git .  The protocol has changed
> very slightly from the v2 patches, so please update to the latest.
>
> This patch series is based off v4.5-rc4.
>
> Thanks to Paul Moore, Hannes Frederic Sowa, Casey Schaufler and Julia
> Lawall for their comments so far.
>
> Changes between v3 and v2:
>
> * Change CALIPSO_MAP_PASS to 2.
> * Move calipso_init() before ipv6_sysctl_register().
> * Rewrite calipso_tlv_len() to check for overflows.
> * Simplify calispo_opt_find().
> * Simplify calipso_opt_insert().
> * Use calipso_tlv_len() in calipso_sock_getattr().
> * Simplify calipso_skbuff_setattr().
> * Return early from netlbl_domhsh_search_def() when a match is found.
> * Remove nested if from netlbl_domhsh_validate().
> * Don't return from netlbl_domhsh_add() with lock held.
> * Various style changes.
> * Rebased to v4.5-rc4.
>
> Changes between v2 and v1:
>
> * Simplify ipv6_renew_options_kern() to use set_fs(KERNEL_DS).
>   Thanks to Hannes Frederic Sowa for suggesting this.
> * Use the parent socket to account for the listener socket
>   option's memory usage.  Again, thanks for Hannes for this.
> * Added netlbl_cfg_calipso_* functions for SMACK.
> * Rebased to v4.4-rc8.
>
> Huw Davies (19):
>   netlabel: Mark rcu pointers with __rcu.
>   netlabel: Add an address family to domain hash entries.
>   netlabel: Initial support for the CALIPSO netlink protocol.
>   netlabel: Add support for querying a CALIPSO DOI.
>   netlabel: Add support for enumerating the CALIPSO DOI list.
>   netlabel: Add support for creating a CALIPSO protocol domain mapping.
>   netlabel: Add support for removing a CALIPSO DOI.
>   ipv6: Add ipv6_renew_options_kern() that accepts a kernel mem pointer.
>   netlabel: Move bitmap manipulation functions to the NetLabel core.
>   calipso: Set the calipso socket label to match the secattr.
>   netlabel: Prevent setsockopt() from changing the hop-by-hop option.
>   ipv6: Allow request socks to contain IPv6 options.
>   calipso: Allow request sockets to be relabelled by the lsm.
>   ipv6: constify the skb pointer of ipv6_find_tlv().
>   calipso: Allow the lsm to label the skbuff directly.
>   netlabel: Pass a family parameter to netlbl_skbuff_err().
>   calipso: Add validation of CALIPSO option.
>   calipso: Add a label cache.
>   netlabel: Implement CALIPSO config functions for SMACK.

Other than the small nit I just mentioned with respect to CALIPSO
option validation code, this all looks reasonable to me.  I know you
are in the process of doing interop with Solaris TX folks, assuming
that goes well I think we are ready to throw this into linux-next with
an eye towards v4.8.  For the past several weeks I've been including
this patchset in my Fedora COPR test kernels (located below), others
are welcome to try it out if they like.

DaveM, what is your take on this?  I'm happy to get this into
linux-next via the SELinux tree, but it does touch some core network
code (the IPv6 option handling, much in the same way as CIPSO touched
the IPv4 option handling) and I don't want to push this if you aren't
okay with it.  Of course if you want to take this via your tree that's
fine with me too.

-- 
paul moore
www.paul-moore.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-05-06 23:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-17 13:21 [RFC PATCH v3 00/19] CALIPSO Implementation Huw Davies
2016-02-17 13:21 ` Huw Davies
2016-05-06 23:07 ` Paul Moore
2016-05-06 23:07   ` Paul Moore

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.