|
@@ -1019,7 +1019,7 @@ static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg,
|
|
|
goto done;
|
|
|
|
|
|
if (pi->rx_busy_skb) {
|
|
|
- if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
|
|
|
+ if (!__sock_queue_rcv_skb(sk, pi->rx_busy_skb))
|
|
|
pi->rx_busy_skb = NULL;
|
|
|
else
|
|
|
goto done;
|
|
@@ -1270,7 +1270,17 @@ static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
|
- err = sock_queue_rcv_skb(sk, skb);
|
|
|
+ if (chan->mode != L2CAP_MODE_ERTM &&
|
|
|
+ chan->mode != L2CAP_MODE_STREAMING) {
|
|
|
+ /* Even if no filter is attached, we could potentially
|
|
|
+ * get errors from security modules, etc.
|
|
|
+ */
|
|
|
+ err = sk_filter(sk, skb);
|
|
|
+ if (err)
|
|
|
+ goto done;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = __sock_queue_rcv_skb(sk, skb);
|
|
|
|
|
|
/* For ERTM, handle one skb that doesn't fit into the recv
|
|
|
* buffer. This is important to do because the data frames
|