[NetLabel]: protect the CIPSOv4 socket option from setsockopt()
This patch makes two changes to protect applications from either removing or tampering with the CIPSOv4 IP option on a socket. The first is the requirement that applications have the CAP_NET_RAW capability to set an IPOPT_CIPSO option on a socket; this prevents untrusted applications from setting their own CIPSOv4 security attributes on the packets they send. The second change is to SELinux and it prevents applications from setting any IPv4 options when there is an IPOPT_CIPSO option already present on the socket; this prevents applications from removing CIPSOv4 security attributes from the packets they send. Signed-off-by: Paul Moore <paul.moore@hp.com> Signed-off-by: James Morris <jmorris@namei.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
920b868ae1
commit
f8687afefc
@@ -3313,7 +3313,13 @@ static int selinux_socket_getpeername(struct socket *sock)
|
||||
|
||||
static int selinux_socket_setsockopt(struct socket *sock,int level,int optname)
|
||||
{
|
||||
return socket_has_perm(current, sock, SOCKET__SETOPT);
|
||||
int err;
|
||||
|
||||
err = socket_has_perm(current, sock, SOCKET__SETOPT);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return selinux_netlbl_socket_setsockopt(sock, level, optname);
|
||||
}
|
||||
|
||||
static int selinux_socket_getsockopt(struct socket *sock, int level,
|
||||
|
Reference in New Issue
Block a user