Skip to content
  • Paul Moore's avatar
    tun: fix LSM/SELinux labeling of tun/tap devices · 5dbbaf2d
    Paul Moore authored
    
    
    This patch corrects some problems with LSM/SELinux that were introduced
    with the multiqueue patchset.  The problem stems from the fact that the
    multiqueue work changed the relationship between the tun device and its
    associated socket; before the socket persisted for the life of the
    device, however after the multiqueue changes the socket only persisted
    for the life of the userspace connection (fd open).  For non-persistent
    devices this is not an issue, but for persistent devices this can cause
    the tun device to lose its SELinux label.
    
    We correct this problem by adding an opaque LSM security blob to the
    tun device struct which allows us to have the LSM security state, e.g.
    SELinux labeling information, persist for the lifetime of the tun
    device.  In the process we tweak the LSM hooks to work with this new
    approach to TUN device/socket labeling and introduce a new LSM hook,
    security_tun_dev_attach_queue(), to approve requests to attach to a
    TUN queue via TUNSETQUEUE.
    
    The SELinux code has been adjusted to match the new LSM hooks, the
    other LSMs do not make use of the LSM TUN controls.  This patch makes
    use of the recently added "tun_socket:attach_queue" permission to
    restrict access to the TUNSETQUEUE operation.  On older SELinux
    policies which do not define the "tun_socket:attach_queue" permission
    the access control decision for TUNSETQUEUE will be handled according
    to the SELinux policy's unknown permission setting.
    
    Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
    Acked-by: default avatarEric Paris <eparis@parisplace.org>
    Tested-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5dbbaf2d