]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Bluetooth: MGMT: Fix backward compatibility with userspace
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 2 Jun 2026 20:48:34 +0000 (16:48 -0400)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 3 Jun 2026 15:24:12 +0000 (11:24 -0400)
bluetoothd has a bug with makes it send extra bytes as part of
MGMT_OP_ADD_EXT_ADV_DATA which are now being checked to be the
exact the expected length, relax this so only when the expected
length is greater than the data length to cause an error since
that would result in accessing invalid memory, otherwise just
ignore the extra bytes.

Link: https://lore.kernel.org/linux-bluetooth/20260602204749.210857-1-luiz.dentz@gmail.com/T/#u
Fixes: d3f7d17960ed ("Bluetooth: MGMT: validate Add Extended Advertising Data length")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/mgmt.c

index 027b266ccc747c59917a07e956148a46acde3664..f4aa814a0397593b0f60d3932800e558092a98d0 100644 (file)
@@ -9114,8 +9114,9 @@ static int add_ext_adv_data(struct sock *sk, struct hci_dev *hdev, void *data,
 
        BT_DBG("%s", hdev->name);
 
-       expected_len = struct_size(cp, data, cp->adv_data_len + cp->scan_rsp_len);
-       if (expected_len != data_len)
+       expected_len = struct_size(cp, data, cp->adv_data_len +
+                                  cp->scan_rsp_len);
+       if (expected_len > data_len)
                return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA,
                                       MGMT_STATUS_INVALID_PARAMS);