On Tue, Aug 4, 2009 at 5:21 PM, Paul Moore<paul.moore@xxxxxx> wrote: > The TUN driver lacks any LSM hooks which makes it difficult for LSM modules, > such as SELinux, to enforce access controls on network traffic generated by > TUN users; this is particularly problematic for virtualization apps such as > QEMU and KVM. This patch adds three new LSM hooks designed to control the > creation and attachment of TUN devices, the hooks are: > > diff --git a/security/commoncap.c b/security/commoncap.c > index 48b7e02..07125a6 100644 > --- a/security/commoncap.c > +++ b/security/commoncap.c > @@ -984,3 +984,29 @@ int cap_vm_enough_memory(struct mm_struct *mm, long pages) > cap_sys_admin = 1; > return __vm_enough_memory(mm, pages, cap_sys_admin); > } > + > +/** > + * cap_tun_dev_create - Determine if creation of a new TUN device is allowed > + * > + * Determine if the user is allowed to create a new TUN device, historically > + * this has always required the CAP_NET_ADMIN permission. > + */ > +int cap_tun_dev_create(void) > +{ > + if (!capable(CAP_NET_ADMIN)) > + return -EPERM; > + return 0; > +} > + > +/** > + * cap_tun_dev_attach - Determine if attaching to an TUN device is allowed > + * > + * Determine if the user is allowed to attach to an existing persistent TUN > + * device, historically this has always required the CAP_NET_ADMIN permission. > + */ > +int cap_tun_dev_attach(void) > +{ > + if (!capable(CAP_NET_ADMIN)) > + return -EPERM; > + return 0; > +} > diff --git a/security/security.c b/security/security.c > index dc7674f..14ebf82 100644 > --- a/security/security.c > +++ b/security/security.c > @@ -1112,6 +1112,24 @@ void security_inet_conn_established(struct sock *sk, > security_ops->inet_conn_established(sk, skb); > } > > +int security_tun_dev_create(void) > +{ > + return security_ops->tun_dev_create(); > +} > +EXPORT_SYMBOL(security_tun_dev_create); > + > +void security_tun_dev_post_create(struct sock *tun_sk) > +{ > + return security_ops->tun_dev_post_create(tun_sk); > +} > +EXPORT_SYMBOL(security_tun_dev_post_create); > + > +int security_tun_dev_attach(struct sock *tun_sk) > +{ > + return security_ops->tun_dev_attach(tun_sk); > +} > +EXPORT_SYMBOL(security_tun_dev_attach); > + > #endif /* CONFIG_SECURITY_NETWORK */ > > #ifdef CONFIG_SECURITY_NETWORK_XFRM You also must add cap_tun_dev_post_create in security/capability.c and you need to call set_to_cap_if_null() for all 3 of these new functions. I believe you'll see a wonderful null pointer panic if you tried with selinux=0..... -Eric -- 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.