--- x/net/bluetooth/bnep/core.c +++ y/net/bluetooth/bnep/core.c @@ -659,7 +659,7 @@ int bnep_del_connection(struct bnep_conn if (req->flags & ~valid_flags) return -EINVAL; - down_read(&bnep_session_sem); + down_write(&bnep_session_sem); s = __bnep_get_session(req->dst); if (s) { @@ -668,7 +668,7 @@ int bnep_del_connection(struct bnep_conn } else err = -ENOENT; - up_read(&bnep_session_sem); + up_write(&bnep_session_sem); return err; }