|
@@ -2635,7 +2635,7 @@ static void smk_ipv6_port_label(struct socket *sock, struct sockaddr *address)
|
|
|
*/
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(spp, &smk_ipv6_port_list, list) {
|
|
|
- if (spp->smk_port != port)
|
|
|
+ if (spp->smk_port != port || spp->smk_sock_type != sock->type)
|
|
|
continue;
|
|
|
spp->smk_port = port;
|
|
|
spp->smk_sock = sk;
|
|
@@ -2656,6 +2656,7 @@ static void smk_ipv6_port_label(struct socket *sock, struct sockaddr *address)
|
|
|
spp->smk_sock = sk;
|
|
|
spp->smk_in = ssp->smk_in;
|
|
|
spp->smk_out = ssp->smk_out;
|
|
|
+ spp->smk_sock_type = sock->type;
|
|
|
|
|
|
mutex_lock(&smack_ipv6_lock);
|
|
|
list_add_rcu(&spp->list, &smk_ipv6_port_list);
|
|
@@ -2712,7 +2713,7 @@ static int smk_ipv6_port_check(struct sock *sk, struct sockaddr_in6 *address,
|
|
|
port = ntohs(address->sin6_port);
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(spp, &smk_ipv6_port_list, list) {
|
|
|
- if (spp->smk_port != port)
|
|
|
+ if (spp->smk_port != port || spp->smk_sock_type != sk->sk_type)
|
|
|
continue;
|
|
|
object = spp->smk_in;
|
|
|
if (act == SMK_CONNECTING)
|