diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c index cf302e060f79..c1fdd9846eeb 100644 --- a/net/bluetooth/iso.c +++ b/net/bluetooth/iso.c @@ -287,8 +287,11 @@ static void iso_chan_del(struct sock *sk, int err) parent = bt_sk(sk)->parent; if (parent) { + /* Unlinking the child allows the parent to be freed. */ + sock_hold(parent); bt_accept_unlink(sk); parent->sk_data_ready(parent); + sock_put(parent); } else { sk->sk_state_change(sk); }