From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> If the L2CAP user is l2cap_sock.c chan->data is a pointer to the l2cap socket so chan->sk and chan->data are the same thing. Then we can just compare with chan->data instead. Non-socket users will have skb->sk = NULL, thus this change does not interfere in other users. Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> --- net/bluetooth/l2cap_core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 934ac1b..92936db 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -2682,12 +2682,11 @@ static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb) mutex_lock(&conn->chan_lock); list_for_each_entry(chan, &conn->chan_l, list) { - struct sock *sk = chan->sk; if (chan->chan_type != L2CAP_CHAN_RAW) continue; /* Don't send frame to the socket it came from */ - if (skb->sk == sk) + if (skb->sk && skb->sk == chan->data) continue; nskb = skb_clone(skb, GFP_KERNEL); if (!nskb) -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html