浏览代码

Smack: Check UDP-Lite and DCCP protocols during IPv6 handling

The smack_socket_sock_rcv_skb() function is checking smack labels
only for UDP and TCP frames carried in IPv6 packets. From now on,
it is able also to handle UDP-Lite and DCCP protocols.

Signed-off-by: Piotr Sawicki <p.sawicki2@partner.samsung.com>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Piotr Sawicki 7 年之前
父节点
当前提交
a07ef95164
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      security/smack/smack_lsm.c

+ 3 - 1
security/smack/smack_lsm.c

@@ -3895,6 +3895,7 @@ static int smk_skb_to_addr_ipv6(struct sk_buff *skb, struct sockaddr_in6 *sip)
 			sip->sin6_port = th->source;
 			sip->sin6_port = th->source;
 		break;
 		break;
 	case IPPROTO_UDP:
 	case IPPROTO_UDP:
+	case IPPROTO_UDPLITE:
 		uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
 		uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
 		if (uh != NULL)
 		if (uh != NULL)
 			sip->sin6_port = uh->source;
 			sip->sin6_port = uh->source;
@@ -3985,7 +3986,8 @@ access_check:
 #if IS_ENABLED(CONFIG_IPV6)
 #if IS_ENABLED(CONFIG_IPV6)
 	case PF_INET6:
 	case PF_INET6:
 		proto = smk_skb_to_addr_ipv6(skb, &sadd);
 		proto = smk_skb_to_addr_ipv6(skb, &sadd);
-		if (proto != IPPROTO_UDP && proto != IPPROTO_TCP)
+		if (proto != IPPROTO_UDP && proto != IPPROTO_UDPLITE &&
+		    proto != IPPROTO_TCP && proto != IPPROTO_DCCP)
 			break;
 			break;
 #ifdef SMACK_IPV6_SECMARK_LABELING
 #ifdef SMACK_IPV6_SECMARK_LABELING
 		if (skb && skb->secmark != 0)
 		if (skb && skb->secmark != 0)