|
@@ -71,19 +71,16 @@ static const char *const bt_slock_key_strings[BT_MAX_PROTO] = {
|
|
|
"slock-AF_BLUETOOTH-BTPROTO_AVDTP",
|
|
|
};
|
|
|
|
|
|
-static inline void bt_sock_reclassify_lock(struct socket *sock, int proto)
|
|
|
+void bt_sock_reclassify_lock(struct sock *sk, int proto)
|
|
|
{
|
|
|
- struct sock *sk = sock->sk;
|
|
|
-
|
|
|
- if (!sk)
|
|
|
- return;
|
|
|
-
|
|
|
+ BUG_ON(!sk);
|
|
|
BUG_ON(sock_owned_by_user(sk));
|
|
|
|
|
|
sock_lock_init_class_and_name(sk,
|
|
|
bt_slock_key_strings[proto], &bt_slock_key[proto],
|
|
|
bt_key_strings[proto], &bt_lock_key[proto]);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(bt_sock_reclassify_lock);
|
|
|
|
|
|
int bt_sock_register(int proto, const struct net_proto_family *ops)
|
|
|
{
|
|
@@ -145,7 +142,8 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto,
|
|
|
|
|
|
if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
|
|
|
err = bt_proto[proto]->create(net, sock, proto, kern);
|
|
|
- bt_sock_reclassify_lock(sock, proto);
|
|
|
+ if (!err)
|
|
|
+ bt_sock_reclassify_lock(sock->sk, proto);
|
|
|
module_put(bt_proto[proto]->owner);
|
|
|
}
|
|
|
|