diff options
author | Gustavo F. Padovan <padovan@profusion.mobi> | 2010-06-08 20:08:49 -0300 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-07-21 10:39:08 -0700 |
commit | 6c2ea7a8f5fea67fa20e5825401b8fce5a78dbf6 (patch) | |
tree | bfcee6513e4a073c1d45607562e4d23a9cd07463 /net/bluetooth/l2cap.c | |
parent | 625477523b4e656fbcc5ec2a8ca7a1beb39b1caf (diff) | |
download | linux-6c2ea7a8f5fea67fa20e5825401b8fce5a78dbf6.tar.gz linux-6c2ea7a8f5fea67fa20e5825401b8fce5a78dbf6.tar.bz2 linux-6c2ea7a8f5fea67fa20e5825401b8fce5a78dbf6.zip |
Bluetooth: Refuse ConfigRsp with different mode
If our mode is Basic Mode we have to refuse any ConfigRsp that proposes
a different mode.
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/l2cap.c')
-rw-r--r-- | net/bluetooth/l2cap.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index ca9bab225777..c5904082392c 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c @@ -2747,7 +2747,6 @@ static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, rfc.mode != pi->mode) return -ECONNREFUSED; - pi->mode = rfc.mode; pi->fcs = 0; l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, @@ -2756,6 +2755,11 @@ static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, } } + if (pi->mode == L2CAP_MODE_BASIC && pi->mode != rfc.mode) + return -ECONNREFUSED; + + pi->mode = rfc.mode; + if (*result == L2CAP_CONF_SUCCESS) { switch (rfc.mode) { case L2CAP_MODE_ERTM: |