Hi Andrei, On Wed, Mar 07, 2012 at 12:35:22PM +0200, Andrei Emeltchenko wrote: > Hi Ido, > > On Mon, Mar 05, 2012 at 08:10:24PM +0200, Ido Yariv wrote: > > The cid or psm and the source address might not be enough to uniquely > > identify a global channel, especially when the source address is our > > own. > > > > For instance, when trying to communicate with two LE devices in master > > mode, data received from the both devices is sent to the same socket. > > > > Fix this by taking the destination address into account when choosing > > the socket. > > > > Signed-off-by: Ido Yariv <ido@xxxxxxxxxx> > > Signed-off-by: Arik Nemtsov <arik@xxxxxxxxxx> > > --- ... > > @@ -847,14 +849,24 @@ static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdadd > > continue; > > > > if (c->scid == cid) { > > + int src_match, dst_match; > > + int src_any, dst_any; > > + > > + src_match = !bacmp(&bt_sk(sk)->src, src); > > + dst_match = !bacmp(&bt_sk(sk)->dst, dst); > > + src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY); > > + dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY); > > This may be not efficient to use extensive memcmp operations every time > before they can be actually used. > > > + > > /* Exact match. */ > > - if (!bacmp(&bt_sk(sk)->src, src)) { > > + if (src_match && dst_match) { > > read_unlock(&chan_list_lock); > > return c; > > } > > at least src_any and dst_any may be put here. Maybe you could improve it > even more. Sure, I'll send an updated version. Thanks for the review, Ido. -- 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