--- x/net/netlabel/netlabel_kapi.c +++ y/net/netlabel/netlabel_kapi.c @@ -984,6 +984,7 @@ int netlbl_sock_setattr(struct sock *sk, int ret_val; struct netlbl_dom_map *dom_entry; + sockopt_lock_sock(sk); rcu_read_lock(); dom_entry = netlbl_domhsh_getentry(secattr->domain, family); if (dom_entry == NULL) { @@ -1033,6 +1034,7 @@ int netlbl_sock_setattr(struct sock *sk, socket_setattr_return: rcu_read_unlock(); + sockopt_release_sock(sk); return ret_val; } @@ -1047,6 +1049,7 @@ socket_setattr_return: */ void netlbl_sock_delattr(struct sock *sk) { + sockopt_lock_sock(sk); switch (sk->sk_family) { case AF_INET: cipso_v4_sock_delattr(sk); @@ -1057,6 +1060,7 @@ void netlbl_sock_delattr(struct sock *sk break; #endif /* IPv6 */ } + sockopt_release_sock(sk); } /** @@ -1137,6 +1141,7 @@ int netlbl_conn_setattr(struct sock *sk, #endif struct netlbl_dommap_def *entry; + sockopt_lock_sock(sk); rcu_read_lock(); switch (addr->sa_family) { case AF_INET: @@ -1199,6 +1204,7 @@ int netlbl_conn_setattr(struct sock *sk, conn_setattr_return: rcu_read_unlock(); + sockopt_release_sock(sk); return ret_val; }