diff options
author | David S. Miller <davem@davemloft.net> | 2015-07-02 15:17:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-02 15:17:11 -0400 |
commit | c4555d16d9d24b4a376b87817d264e16f00d08d8 (patch) | |
tree | 161ba128fdf279aef34d0fc2dca3f1f47411ebf6 /net | |
parent | 25c14ef86a0d5ec9320e833685c15bc96f504864 (diff) | |
parent | ab944c83f6690df0c7f67e6bcc29fc0c82ef6021 (diff) |
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
Johan Hedberg says:
====================
pull request: bluetooth 2015-07-02
A couple of regressions crept in because of a patch to use proper list
APIs rather than manually reading & writing the next/prev pointers
(commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5). Turns out this was
masking a few bugs: a missing INIT_LIST_HEAD() call and incorrectly
using list_del() rather than list_del_init(). The two patches in this
set fix these, and it'd be nice they could still make it to 4.2-rc1 to
avoid new bug reports from users.
Please let me know if there are any issues pulling. Thanks.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/hidp/core.c | 1 | ||||
-rw-r--r-- | net/bluetooth/l2cap_core.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index 9070dfd6b4ad..f1a117f8cad2 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c | |||
@@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr, | |||
915 | session->conn = l2cap_conn_get(conn); | 915 | session->conn = l2cap_conn_get(conn); |
916 | session->user.probe = hidp_session_probe; | 916 | session->user.probe = hidp_session_probe; |
917 | session->user.remove = hidp_session_remove; | 917 | session->user.remove = hidp_session_remove; |
918 | INIT_LIST_HEAD(&session->user.list); | ||
918 | session->ctrl_sock = ctrl_sock; | 919 | session->ctrl_sock = ctrl_sock; |
919 | session->intr_sock = intr_sock; | 920 | session->intr_sock = intr_sock; |
920 | skb_queue_head_init(&session->ctrl_transmit); | 921 | skb_queue_head_init(&session->ctrl_transmit); |
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 51594fb7b9e7..45fffa413642 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -1634,7 +1634,7 @@ void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user) | |||
1634 | if (list_empty(&user->list)) | 1634 | if (list_empty(&user->list)) |
1635 | goto out_unlock; | 1635 | goto out_unlock; |
1636 | 1636 | ||
1637 | list_del(&user->list); | 1637 | list_del_init(&user->list); |
1638 | user->remove(conn, user); | 1638 | user->remove(conn, user); |
1639 | 1639 | ||
1640 | out_unlock: | 1640 | out_unlock: |
@@ -1648,7 +1648,7 @@ static void l2cap_unregister_all_users(struct l2cap_conn *conn) | |||
1648 | 1648 | ||
1649 | while (!list_empty(&conn->users)) { | 1649 | while (!list_empty(&conn->users)) { |
1650 | user = list_first_entry(&conn->users, struct l2cap_user, list); | 1650 | user = list_first_entry(&conn->users, struct l2cap_user, list); |
1651 | list_del(&user->list); | 1651 | list_del_init(&user->list); |
1652 | user->remove(conn, user); | 1652 | user->remove(conn, user); |
1653 | } | 1653 | } |
1654 | } | 1654 | } |