--- x/net/ipv4/ip_sockglue.c +++ y/net/ipv4/ip_sockglue.c @@ -1087,6 +1087,8 @@ int do_ip_setsockopt(struct sock *sk, in err = ip_options_get(sock_net(sk), &opt, optval, optlen); if (err) break; + sockopt_release_sock(sk); + bh_lock_sock(sk); old = rcu_dereference_protected(inet->inet_opt, lockdep_sock_is_held(sk)); if (inet_test_bit(IS_ICSK, sk)) { @@ -1109,6 +1111,8 @@ int do_ip_setsockopt(struct sock *sk, in rcu_assign_pointer(inet->inet_opt, opt); if (old) kfree_rcu(old, rcu); + bh_unlock_sock(sk); + sockopt_lock_sock(sk); break; } case IP_CHECKSUM: --- x/net/netlabel/netlabel_kapi.c +++ y/net/netlabel/netlabel_kapi.c @@ -1149,9 +1149,11 @@ int netlbl_conn_setattr(struct sock *sk, } switch (entry->type) { case NETLBL_NLTYPE_CIPSOV4: + bh_lock_sock(sk); ret_val = cipso_v4_sock_setattr(sk, entry->cipso, secattr, netlbl_sk_lock_check(sk)); + bh_unlock_sock(sk); break; case NETLBL_NLTYPE_UNLABELED: /* just delete the protocols we support for right now