Bluetooth: L2CAP: Fix auto-allocating LE PSM values
The LE dynamic PSM range is different from BR/EDR (0x0080 - 0x00ff) and doesn't have requirements relating to parity, so separate checks are needed. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
114f9f1e03
commit
92594a5112
|
@ -197,10 +197,20 @@ int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
|
|||
chan->sport = psm;
|
||||
err = 0;
|
||||
} else {
|
||||
u16 p;
|
||||
u16 p, start, end, incr;
|
||||
|
||||
if (chan->src_type == BDADDR_BREDR) {
|
||||
start = L2CAP_PSM_DYN_START;
|
||||
end = L2CAP_PSM_AUTO_END;
|
||||
incr = 2;
|
||||
} else {
|
||||
start = L2CAP_PSM_LE_DYN_START;
|
||||
end = L2CAP_PSM_LE_DYN_END;
|
||||
incr = 1;
|
||||
}
|
||||
|
||||
err = -EINVAL;
|
||||
for (p = 0x1001; p < 0x1100; p += 2)
|
||||
for (p = start; p <= end; p += incr)
|
||||
if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
|
||||
chan->psm = cpu_to_le16(p);
|
||||
chan->sport = cpu_to_le16(p);
|
||||
|
|
Loading…
Reference in New Issue
Block a user