Smack: Inform peer that IPv6 traffic has been blocked
authorPiotr Sawicki <p.sawicki2@partner.samsung.com>
Thu, 19 Jul 2018 09:47:31 +0000 (11:47 +0200)
committerCasey Schaufler <casey@schaufler-ca.com>
Mon, 23 Jul 2018 20:00:03 +0000 (13:00 -0700)
In this patch we're sending an ICMPv6 message to a peer to
immediately inform it that making a connection is not possible.
In case of TCP connections, without this change, the peer
will be waiting until a connection timeout is exceeded.

Signed-off-by: Piotr Sawicki <p.sawicki2@partner.samsung.com>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smack_lsm.c

index aff8397..9175020 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/tcp.h>
 #include <linux/udp.h>
 #include <linux/dccp.h>
+#include <linux/icmpv6.h>
 #include <linux/slab.h>
 #include <linux/mutex.h>
 #include <linux/pipe_fs_i.h>
@@ -4009,6 +4010,9 @@ access_check:
 #ifdef SMACK_IPV6_PORT_LABELING
                rc = smk_ipv6_port_check(sk, &sadd, SMK_RECEIVING);
 #endif /* SMACK_IPV6_PORT_LABELING */
+               if (rc != 0)
+                       icmpv6_send(skb, ICMPV6_DEST_UNREACH,
+                                       ICMPV6_ADM_PROHIBITED, 0);
                break;
 #endif /* CONFIG_IPV6 */
        }