*/
 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
                                                   bdaddr_t *src,
-                                                  bdaddr_t *dst)
+                                                  bdaddr_t *dst,
+                                                  u8 link_type)
 {
        struct l2cap_chan *c, *c1 = NULL;
 
                if (state && c->state != state)
                        continue;
 
+               if (link_type == ACL_LINK && c->src_type != BDADDR_BREDR)
+                       continue;
+
+               if (link_type == LE_LINK && c->src_type == BDADDR_BREDR)
+                       continue;
+
                if (c->psm == psm) {
                        int src_match, dst_match;
                        int src_any, dst_any;
 
        /* Check if we have socket listening on psm */
        pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
-                                        &conn->hcon->dst);
+                                        &conn->hcon->dst, ACL_LINK);
        if (!pchan) {
                result = L2CAP_CR_BAD_PSM;
                goto sendresp;
        if (hcon->type != ACL_LINK)
                goto drop;
 
-       chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst);
+       chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
+                                       ACL_LINK);
        if (!chan)
                goto drop;