Skip to content

Commit

Permalink
Bluetooth: Fix the creation of hdev->name
Browse files Browse the repository at this point in the history
commit 103a2f3 upstream.

Set a size limit of 8 bytes of the written buffer to "hdev->name"
including the terminating null byte, as the size of "hdev->name" is 8
bytes. If an id value which is greater than 9999 is allocated,
then the "snprintf(hdev->name, sizeof(hdev->name), "hci%d", id)"
function call would lead to a truncation of the id value in decimal
notation.

Set an explicit maximum id parameter in the id allocation function call.
The id allocation function defines the maximum allocated id value as the
maximum id parameter value minus one. Therefore, HCI_MAX_ID is defined
as 10000.

Signed-off-by: Itay Iellin <ieitayie@gmail.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Itay Iellin authored and gregkh committed May 15, 2022
1 parent 7651bb7 commit 8ceac92
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
3 changes: 3 additions & 0 deletions include/net/bluetooth/hci_core.h
Expand Up @@ -36,6 +36,9 @@
/* HCI priority */
#define HCI_PRIO_MAX 7

/* HCI maximum id value */
#define HCI_MAX_ID 10000

/* HCI Core structures */
struct inquiry_data {
bdaddr_t bdaddr;
Expand Down
6 changes: 3 additions & 3 deletions net/bluetooth/hci_core.c
Expand Up @@ -2554,10 +2554,10 @@ int hci_register_dev(struct hci_dev *hdev)
*/
switch (hdev->dev_type) {
case HCI_PRIMARY:
id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
break;
case HCI_AMP:
id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
break;
default:
return -EINVAL;
Expand All @@ -2566,7 +2566,7 @@ int hci_register_dev(struct hci_dev *hdev)
if (id < 0)
return id;

sprintf(hdev->name, "hci%d", id);
snprintf(hdev->name, sizeof(hdev->name), "hci%d", id);
hdev->id = id;

BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
Expand Down

0 comments on commit 8ceac92

Please sign in to comment.