summaryrefslogtreecommitdiff
path: root/recipes-kernel/linux
diff options
context:
space:
mode:
authorJohn Klug <john.klug@multitech.com>2020-11-11 16:17:52 -0600
committerJohn Klug <john.klug@multitech.com>2020-11-11 16:17:52 -0600
commit4bb6f26b05450777d14aa96e10783066c2503dc2 (patch)
tree3ed6c4bb86736d28926fd37a3c2b4eb81de44c82 /recipes-kernel/linux
downloadmeta-multitech-atmel-4bb6f26b05450777d14aa96e10783066c2503dc2.tar.gz
meta-multitech-atmel-4bb6f26b05450777d14aa96e10783066c2503dc2.tar.bz2
meta-multitech-atmel-4bb6f26b05450777d14aa96e10783066c2503dc2.zip
Add new BSP submodule for Atmel Processors.5.3.0b5.3.0a
Diffstat (limited to 'recipes-kernel/linux')
-rw-r--r--recipes-kernel/linux/crypto.inc17
-rw-r--r--recipes-kernel/linux/driver.inc22
-rw-r--r--recipes-kernel/linux/linux-3.12.70/bluetooth_l2cap.patch357
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-add-num_accessory_ports-config-option.patch22
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-at91-gpio-pullup.patch42
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-at91sam9_wdt-10second-timeout.patch14
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-atmel-mci-force-detect.patch29
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-atmel-pmecc-debug-bitflips.patch22
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-atmel-spi.patch37
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-cadence-macb.patch106
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-cdc-acm-ignore-exar-devices.patch35
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-gpio-expose-deglitch.patch165
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-gpio-expose-pullups.patch301
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-ledtrig-netdev.patch470
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-option-telit.patch34
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-pps-gpio.patch31
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-release-rfcomm-port-fix.patch78
-rw-r--r--recipes-kernel/linux/linux-3.12.70/linux-3.12-spi-atmel-dma-min.patch18
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcap/defconfig2898
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcap/linux-3.12-eeprom-setup-mtcdt.patch164
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcap/linux-3.12-mtcap-device-tree.patch251
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcdt/defconfig2898
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcdt/linux-3.12-eeprom-setup-mtcdt.patch164
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtcdt/linux-3.12-mtcdt-device-tree.patch468
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/defconfig2879
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/linux-3.12-eeprom-setup-mtr.patch114
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/linux-3.12-mtr-device-tree.patch342
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/linux-3.12-wl12xx-fix-boot-in-plt-mode.patch19
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/linux-3.12-wl12xx-fix-threaded-irq-requested-with-NULL-handler.patch13
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtr/linux-3.12-wl12xx-set-power.patch42
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/defconfig2879
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/linux-3.12-eeprom-setup-mtr.patch114
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/linux-3.12-mtrv1-device-tree.patch345
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/linux-3.12-wl12xx-fix-boot-in-plt-mode.patch19
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/linux-3.12-wl12xx-fix-threaded-irq-requested-with-NULL-handler.patch13
-rw-r--r--recipes-kernel/linux/linux-3.12.70/mtrv1/linux-3.12-wl12xx-set-power.patch42
-rw-r--r--recipes-kernel/linux/linux-3.12.70/option.patch34
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/0001-linux-4.9-quectel_qmi_wwan_support.patch12
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/0002-linux-4.9-telit_print_qmi_wwan.patch21
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/950-0090-OF-DT-Overlay-configfs-interface.patch427
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/EXTRAVERSION.patch12
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/at91pinctrl_reprobe.patch60
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/at91sam9/defconfig3826
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/defconfig4365
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/i2c-at91.conf7
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-add-num_accessory_ports-config-option.patch22
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-addl-time-for-pmeccerrloc.patch13
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-at91_gpio_set_single_ended.patch228
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-at91sam9_wdt-10second-timeout.patch12
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-cdc-acm-ignore-exar-devices.patch36
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-led-core-Fix-brightness-setting-when-setting-delay_off-0.patch18
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-ledtrig-netdev.patch529
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-linux4sam-usb-serial-option.patch22
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-pps-gpio.patch10
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/linux-4.9-spidev_squack.patch11
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/make-kernel-reproducible.patch25
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtcap/linux-4.9-mtcap-device-tree.patch562
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtcdt/linux-4.9-eeprom-setup-mtcdt.patch163
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtcdt/linux-4.9-mtcdt-device-tree.patch558
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtr/fix-atmel-mci-reg-overloading.patch19
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtr/linux-4.9-mtr-device-tree.patch564
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtr/wl12xx_enable_disable.patch28
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/mtrv1/linux-4.9-mtrv1-device-tree.patch529
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/sama5/defconfig310
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/sama5d4/defconfig328
-rw-r--r--recipes-kernel/linux/linux-at91-4.9.87/v5-3-9-OF-DT-Overlay-configfs-interface.diff287
-rw-r--r--recipes-kernel/linux/linux-at91_4.9.87.bb168
-rw-r--r--recipes-kernel/linux/linux_3.12.70.bb119
-rw-r--r--recipes-kernel/linux/missingmodules.txt57
-rw-r--r--recipes-kernel/linux/net.inc108
70 files changed, 28954 insertions, 0 deletions
diff --git a/recipes-kernel/linux/crypto.inc b/recipes-kernel/linux/crypto.inc
new file mode 100644
index 0000000..a557ded
--- /dev/null
+++ b/recipes-kernel/linux/crypto.inc
@@ -0,0 +1,17 @@
+# modules to load for Crypto on boot
+KERNEL_MODULE_AUTOLOAD_mtcdt += " \
+ sha512_generic \
+"
+
+KERNEL_MODULE_AUTOLOAD_mtrv1 += " \
+ sha512_generic \
+"
+
+
+KERNEL_MODULE_AUTOLOAD_mtr += " \
+ sha512_generic \
+"
+
+KERNEL_MODULE_AUTOLOAD_mtcap += " \
+ sha512_generic \
+"
diff --git a/recipes-kernel/linux/driver.inc b/recipes-kernel/linux/driver.inc
new file mode 100644
index 0000000..5e21ed6
--- /dev/null
+++ b/recipes-kernel/linux/driver.inc
@@ -0,0 +1,22 @@
+# Hardware drivers to load on boot.
+# Gadget serial is for MTCDT only
+
+DRIVER_LOAD_ALL_MACHINES = " \
+ atmel_usba_udc \
+ ledtrig-default-on \
+ ledtrig-heartbeat \
+ ledtrig-timer \
+"
+
+KERNEL_MODULE_AUTOLOAD_mtcdt += " \
+ ${DRIVER_LOAD_ALL_MACHINES} \
+ g_serial \
+"
+
+
+# Is atmel_usba_udc needed for mtcap?
+KERNEL_MODULE_AUTOLOAD_mtcap += "${DRIVER_LOAD_ALL_MACHINES}"
+
+KERNEL_MODULE_AUTOLOAD_mtrv1 += "${DRIVER_LOAD_ALL_MACHINES}"
+
+KERNEL_MODULE_AUTOLOAD_mtr += "${DRIVER_LOAD_ALL_MACHINES}"
diff --git a/recipes-kernel/linux/linux-3.12.70/bluetooth_l2cap.patch b/recipes-kernel/linux/linux-3.12.70/bluetooth_l2cap.patch
new file mode 100644
index 0000000..c6bfdf7
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.12.70/bluetooth_l2cap.patch
@@ -0,0 +1,357 @@
+From e860d2c904d1a9f38a24eb44c9f34b8f915a6ea3 Mon Sep 17 00:00:00 2001
+From: Ben Seri <ben@armis.com>
+Date: Sat, 9 Sep 2017 23:15:59 +0200
+Subject: Bluetooth: Properly check L2CAP config option output buffer length
+
+Validate the output buffer length for L2CAP config requests and responses
+to avoid overflowing the stack buffer used for building the option blocks.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Ben Seri <ben@armis.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+---
+ net/bluetooth/l2cap_core.c | 80 +++++++++++++++++++++++++---------------------
+ 1 file changed, 43 insertions(+), 37 deletions(-)
+
+diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
+index 303c779..43ba91c 100644
+--- a/net/bluetooth/l2cap_core.c
++++ b/net/bluetooth/l2cap_core.c
+@@ -58,7 +58,7 @@ static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
+ u8 code, u8 ident, u16 dlen, void *data);
+ static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
+ void *data);
+-static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
++static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size);
+ static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
+
+ static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
+@@ -1473,7 +1473,7 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
+
+ set_bit(CONF_REQ_SENT, &chan->conf_state);
+ l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
+- l2cap_build_conf_req(chan, buf), buf);
++ l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
+ chan->num_conf_req++;
+ }
+
+@@ -2987,12 +2987,15 @@ static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
+ return len;
+ }
+
+-static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
++static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val, size_t size)
+ {
+ struct l2cap_conf_opt *opt = *ptr;
+
+ BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
+
++ if (size < L2CAP_CONF_OPT_SIZE + len)
++ return;
++
+ opt->type = type;
+ opt->len = len;
+
+@@ -3017,7 +3020,7 @@ static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
+ *ptr += L2CAP_CONF_OPT_SIZE + len;
+ }
+
+-static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
++static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan, size_t size)
+ {
+ struct l2cap_conf_efs efs;
+
+@@ -3045,7 +3048,7 @@ static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
+ }
+
+ l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
+- (unsigned long) &efs);
++ (unsigned long) &efs, size);
+ }
+
+ static void l2cap_ack_timeout(struct work_struct *work)
+@@ -3191,11 +3194,12 @@ static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
+ chan->ack_win = chan->tx_win;
+ }
+
+-static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
++static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
+ {
+ struct l2cap_conf_req *req = data;
+ struct l2cap_conf_rfc rfc = { .mode = chan->mode };
+ void *ptr = req->data;
++ void *endptr = data + data_size;
+ u16 size;
+
+ BT_DBG("chan %p", chan);
+@@ -3220,7 +3224,7 @@ static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
+
+ done:
+ if (chan->imtu != L2CAP_DEFAULT_MTU)
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu, endptr - ptr);
+
+ switch (chan->mode) {
+ case L2CAP_MODE_BASIC:
+@@ -3239,7 +3243,7 @@ done:
+ rfc.max_pdu_size = 0;
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
+- (unsigned long) &rfc);
++ (unsigned long) &rfc, endptr - ptr);
+ break;
+
+ case L2CAP_MODE_ERTM:
+@@ -3259,21 +3263,21 @@ done:
+ L2CAP_DEFAULT_TX_WINDOW);
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
+- (unsigned long) &rfc);
++ (unsigned long) &rfc, endptr - ptr);
+
+ if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
+- l2cap_add_opt_efs(&ptr, chan);
++ l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
+
+ if (test_bit(FLAG_EXT_CTRL, &chan->flags))
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
+- chan->tx_win);
++ chan->tx_win, endptr - ptr);
+
+ if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
+ if (chan->fcs == L2CAP_FCS_NONE ||
+ test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
+ chan->fcs = L2CAP_FCS_NONE;
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
+- chan->fcs);
++ chan->fcs, endptr - ptr);
+ }
+ break;
+
+@@ -3291,17 +3295,17 @@ done:
+ rfc.max_pdu_size = cpu_to_le16(size);
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
+- (unsigned long) &rfc);
++ (unsigned long) &rfc, endptr - ptr);
+
+ if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
+- l2cap_add_opt_efs(&ptr, chan);
++ l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
+
+ if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
+ if (chan->fcs == L2CAP_FCS_NONE ||
+ test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
+ chan->fcs = L2CAP_FCS_NONE;
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
+- chan->fcs);
++ chan->fcs, endptr - ptr);
+ }
+ break;
+ }
+@@ -3312,10 +3316,11 @@ done:
+ return ptr - data;
+ }
+
+-static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
++static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
+ {
+ struct l2cap_conf_rsp *rsp = data;
+ void *ptr = rsp->data;
++ void *endptr = data + data_size;
+ void *req = chan->conf_req;
+ int len = chan->conf_len;
+ int type, hint, olen;
+@@ -3417,7 +3422,7 @@ done:
+ return -ECONNREFUSED;
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
+- (unsigned long) &rfc);
++ (unsigned long) &rfc, endptr - ptr);
+ }
+
+ if (result == L2CAP_CONF_SUCCESS) {
+@@ -3430,7 +3435,7 @@ done:
+ chan->omtu = mtu;
+ set_bit(CONF_MTU_DONE, &chan->conf_state);
+ }
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
+
+ if (remote_efs) {
+ if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
+@@ -3444,7 +3449,7 @@ done:
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
+ sizeof(efs),
+- (unsigned long) &efs);
++ (unsigned long) &efs, endptr - ptr);
+ } else {
+ /* Send PENDING Conf Rsp */
+ result = L2CAP_CONF_PENDING;
+@@ -3477,7 +3482,7 @@ done:
+ set_bit(CONF_MODE_DONE, &chan->conf_state);
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
+- sizeof(rfc), (unsigned long) &rfc);
++ sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
+
+ if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
+ chan->remote_id = efs.id;
+@@ -3491,7 +3496,7 @@ done:
+ le32_to_cpu(efs.sdu_itime);
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
+ sizeof(efs),
+- (unsigned long) &efs);
++ (unsigned long) &efs, endptr - ptr);
+ }
+ break;
+
+@@ -3505,7 +3510,7 @@ done:
+ set_bit(CONF_MODE_DONE, &chan->conf_state);
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
+- (unsigned long) &rfc);
++ (unsigned long) &rfc, endptr - ptr);
+
+ break;
+
+@@ -3527,10 +3532,11 @@ done:
+ }
+
+ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+- void *data, u16 *result)
++ void *data, size_t size, u16 *result)
+ {
+ struct l2cap_conf_req *req = data;
+ void *ptr = req->data;
++ void *endptr = data + size;
+ int type, olen;
+ unsigned long val;
+ struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
+@@ -3548,13 +3554,13 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+ chan->imtu = L2CAP_DEFAULT_MIN_MTU;
+ } else
+ chan->imtu = val;
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu, endptr - ptr);
+ break;
+
+ case L2CAP_CONF_FLUSH_TO:
+ chan->flush_to = val;
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
+- 2, chan->flush_to);
++ 2, chan->flush_to, endptr - ptr);
+ break;
+
+ case L2CAP_CONF_RFC:
+@@ -3568,13 +3574,13 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+ chan->fcs = 0;
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
+- sizeof(rfc), (unsigned long) &rfc);
++ sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
+ break;
+
+ case L2CAP_CONF_EWS:
+ chan->ack_win = min_t(u16, val, chan->ack_win);
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
+- chan->tx_win);
++ chan->tx_win, endptr - ptr);
+ break;
+
+ case L2CAP_CONF_EFS:
+@@ -3587,7 +3593,7 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+ return -ECONNREFUSED;
+
+ l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
+- (unsigned long) &efs);
++ (unsigned long) &efs, endptr - ptr);
+ break;
+
+ case L2CAP_CONF_FCS:
+@@ -3692,7 +3698,7 @@ void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
+ return;
+
+ l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
+- l2cap_build_conf_req(chan, buf), buf);
++ l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
+ chan->num_conf_req++;
+ }
+
+@@ -3900,7 +3906,7 @@ sendresp:
+ u8 buf[128];
+ set_bit(CONF_REQ_SENT, &chan->conf_state);
+ l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
+- l2cap_build_conf_req(chan, buf), buf);
++ l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
+ chan->num_conf_req++;
+ }
+
+@@ -3978,7 +3984,7 @@ static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
+ break;
+
+ l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
+- l2cap_build_conf_req(chan, req), req);
++ l2cap_build_conf_req(chan, req, sizeof(req)), req);
+ chan->num_conf_req++;
+ break;
+
+@@ -4090,7 +4096,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
+ }
+
+ /* Complete config. */
+- len = l2cap_parse_conf_req(chan, rsp);
++ len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
+ if (len < 0) {
+ l2cap_send_disconn_req(chan, ECONNRESET);
+ goto unlock;
+@@ -4124,7 +4130,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
+ if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
+ u8 buf[64];
+ l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
+-