Skip to content

Commit 95bbf40

Browse files
Jianpeng Changopsiff
authored andcommitted
Bluetooth: MGMT: Fix memory leak in set_ssp_complete
commit 1b9c17f upstream. Fix memory leak in set_ssp_complete() where mgmt_pending_cmd structures are not freed after being removed from the pending list. Commit 302a1f6 ("Bluetooth: MGMT: Fix possible UAFs") replaced mgmt_pending_foreach() calls with individual command handling but missed adding mgmt_pending_free() calls in both error and success paths of set_ssp_complete(). Other completion functions like set_le_complete() were fixed correctly in the same commit. This causes a memory leak of the mgmt_pending_cmd structure and its associated parameter data for each SSP command that completes. Add the missing mgmt_pending_free(cmd) calls in both code paths to fix the memory leak. Also fix the same issue in set_advertising_complete(). Fixes: 302a1f6 ("Bluetooth: MGMT: Fix possible UAFs") Signed-off-by: Jianpeng Chang <jianpeng.chang.cn@windriver.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commit d7e42dc47beb48851bc0008c1e1b79126de9d975) Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
1 parent 579c415 commit 95bbf40

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

net/bluetooth/mgmt.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1937,6 +1937,7 @@ static void set_ssp_complete(struct hci_dev *hdev, void *data, int err)
19371937
}
19381938

19391939
mgmt_cmd_status(cmd->sk, cmd->hdev->id, cmd->opcode, mgmt_err);
1940+
mgmt_pending_free(cmd);
19401941
return;
19411942
}
19421943

@@ -1955,6 +1956,7 @@ static void set_ssp_complete(struct hci_dev *hdev, void *data, int err)
19551956
sock_put(match.sk);
19561957

19571958
hci_update_eir_sync(hdev);
1959+
mgmt_pending_free(cmd);
19581960
}
19591961

19601962
static int set_ssp_sync(struct hci_dev *hdev, void *data)
@@ -6452,6 +6454,7 @@ static void set_advertising_complete(struct hci_dev *hdev, void *data, int err)
64526454
hci_dev_clear_flag(hdev, HCI_ADVERTISING);
64536455

64546456
settings_rsp(cmd, &match);
6457+
mgmt_pending_free(cmd);
64556458

64566459
new_settings(hdev, match.sk);
64576460

0 commit comments

Comments
 (0)