Commit Graph

26597 Commits

Author SHA1 Message Date
Luiz Augusto von Dentz
bbeabca44a gap: Don't attempt to read the appearance if already set
Devices are unlikely to change appearance over time which is the reason
why we cache then on the storage so this skips reading it on every
reconnection.
2022-04-04 13:15:18 -07:00
Ildar Kamaletdinov
3627eddea1 gatt: Fix double free and freed memory dereference
If device is no longer exists or not paired when notifications send it
is possible to get double free and dereference of already freed memory.

To avoid this we need to recheck the state of device after sending
notification.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:42:00 -07:00
Ildar Kamaletdinov
4afbef7790 device: Limit width of fields in sscanf
In src/device.c few sscanf does not limit width of uuid field. This
could lead to static overflow and stack corruption.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:41:59 -07:00
Ildar Kamaletdinov
1e664b9838 tools: Limit width of fields in sscanf
In tools/btmgmt.c and tools/hex2hcd.c few sscanf does not limit width
of fields. This could lead to static overflow and stack corruption.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:41:59 -07:00
Ildar Kamaletdinov
497a0b220d tools: Fix signed integer overflow in btsnoop.c
If malformed packet is proceed with zero 'size' field we will face with
wrong behaviour of write() call. Value 'toread - 1' gives wrong sign
for value 'written' (-1) in write() call. To prevent this we should
check that 'toread' is not equal to zero.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:41:59 -07:00
Ildar Kamaletdinov
d328abaa17 tools: Fix buffer overflow in hciattach_tialt.c
Array 'c_brf_chip' of size 8 could be accessed by index > 7. We should
limit array access like in previous check at line 221.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:41:58 -07:00
Ildar Kamaletdinov
7fdfb67284 monitor: Fix out-of-bound read in print_le_states
Accessing le_states_desc_table array with value 15 can cause
out-of-bound read because current size of array is 14.

Currently this cannot lead to any problems becase we do no have such
state in le_states_comb_table but this could be changed in future and
raise described problem.

Found by Linux Verification Center (linuxtesting.org) with the SVACE
static analysis tool.
2022-04-04 09:41:58 -07:00
Frédéric Danis
0f382885d4 tools: Fix g_dbus_setup_private connection check in mpris-proxy 2022-04-04 09:41:22 -07:00
Luiz Augusto von Dentz
234d60423c shared/gatt-db: Fix gatt_db_attribute_get_index
gatt_db_attribute_get_index was calculating the index based on
attrib->handle - service->attributes[0]->handle which doesn't work when
there are gaps in between handles.

Fixes: https://github.com/bluez/bluez/issues/326
2022-04-01 16:25:00 -07:00
Luiz Augusto von Dentz
6d15315570 btdev: Check parameter for CIG related commands
This checks if the parameters given to Set CIG Parameters and Remove CIG
are in the valid range.
2022-04-01 16:24:55 -07:00
Inga Stotland
ff35b1d2e9 mesh: use explicit uint32_t when bit shifting left
This addresses a situation when a boolean type is represented by
an integer and performing a left shift on a boolean causes
an integer overflow.

This fixes the following runtime error:
"left shift of 1 by 31 places cannot be represented in type 'int'"
2022-03-31 11:21:56 -07:00
Frédéric Danis
4a06a31be0 a2dp: Fix crash when SEP codec has not been initialized
If SEP has not been properly discovered avdtp_get_codec may return NULL
thus causing crashes such as when running AVRCP/TG/VLH/BI-01-C after
AVRCP/TG/RCR/BV-04-C.

Prevent remote endpoint registration if its codec is not available.

Remove queue_isempty check from store_remote_seps since that prevents
cleaning up if no seps could be registered.
2022-03-30 12:54:54 -07:00
Luiz Augusto von Dentz
d204e84c06 client: Add support for player submenu
This moves adds the functionality of bluetooth-player into
bluetoothctl.
2022-03-30 12:54:29 -07:00
Luiz Augusto von Dentz
0cc480a546 shell: Make bt_shell_add_submenu set main menu if none has been set
If not main menu has been set when calling bt_shell_add_submenu then
turns it on it main menu.
2022-03-30 12:54:24 -07:00
Luiz Augusto von Dentz
6cb6e2ddf4 mgmt: Remove mgmt_set_verbose
The likes of btmon already decode the commands/events so there is no
need to have the code hexdump their contents.
2022-03-28 10:51:27 -07:00
Luiz Augusto von Dentz
62e591578e a2dp: Always invalidate the cache if its configuration fails
When a configuration had been restored from last_used cache but it
fails invalidate it so another sep can be used.

Fixes: https://github.com/bluez/bluez/issues/313
2022-03-28 10:51:27 -07:00
Luiz Augusto von Dentz
18fc3abad2 a2dp: Don't initialize a2dp_sep->destroy until properly registered
On a2dp_add_sep if the record cannot be properly registred
a2dp_unregister_sep would be called which would attempt to destroy the
user_data causing the following backtrace:

Invalid write of size 8
   at 0x2F41EB: endpoint_init_a2dp_source (media.c:687)
   by 0x2F41EB: media_endpoint_create (media.c:1030)
   by 0x2F6713: register_endpoint (media.c:1155)
   by 0x46983F: process_message (object.c:246)
   by 0x4A574A8: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.19.14)
   by 0x45F0BF: message_dispatch (mainloop.c:59)
   by 0x495239A: ??? (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x495605E: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x49AB2A7: ??? (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x4955772: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x4CA924: mainloop_run (mainloop-glib.c:66)
   by 0x4CAE1B: mainloop_run_with_signal (mainloop-notify.c:188)
   by 0x2AE791: main (main.c:1258)
 Address 0x6e47a30 is 0 bytes inside a block of size 112 free'd
   at 0x48470E4: free (vg_replace_malloc.c:872)
   by 0x4957CDC: g_free (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x2C2D57: a2dp_unregister_sep (a2dp.c:2588)
   by 0x2D124C: a2dp_add_sep (a2dp.c:2697)
   by 0x2F41D5: endpoint_init_a2dp_source (media.c:687)
   by 0x2F41D5: media_endpoint_create (media.c:1030)
   by 0x2F6713: register_endpoint (media.c:1155)
   by 0x46983F: process_message (object.c:246)
   by 0x4A574A8: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.19.14)
   by 0x45F0BF: message_dispatch (mainloop.c:59)
   by 0x495239A: ??? (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x495605E: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.7000.4)
   by 0x49AB2A7: ??? (in /usr/lib64/libglib-2.0.so.0.7000.4)
2022-03-28 10:51:27 -07:00
Luiz Augusto von Dentz
4fefa24097 adapter: Fix adding SDP records when operating on LE only mode
If mode is set to BT_MODE_LE SDP protocol won't be operational so it is
useless to attempt to add records.
2022-03-28 10:51:27 -07:00
Inga Stotland
2a2b027176 mesh: Fix address overrun error in rx filter
This fixes the following error for invalid read access when registering
filter for incoming messages:

140632==ERROR: AddressSanitizer: stack-buffer-overflow on address...
 #0 0x7f60c185741d in MemcmpInterceptorCommon(...
    #1 0x7f60c1857af8 in __interceptor_memcmp (/lib64/libasan.so...
    #2 0x55a10101536e in find_by_filter mesh/mesh-io-unit.c:494
    #3 0x55a1010d8c46 in l_queue_remove_if ell/queue.c:517
    #4 0x55a101014ebd in recv_register mesh/mesh-io-unit.c:506
    #5 0x55a10102946f in mesh_net_attach mesh/net.c:2885
    #6 0x55a101086f64 in send_reply mesh/dbus.c:153
    #7 0x55a101124c3d in handle_method_return ell/dbus.c:216
    #8 0x55a10112c8ef in message_read_handler ell/dbus.c:276
    #9 0x55a1010dae20 in io_callback ell/io.c:120
    #10 0x55a1010dff7e in l_main_iterate ell/main.c:478
    #11 0x55a1010e06e3 in l_main_run ell/main.c:525
    #12 0x55a1010e06e3 in l_main_run ell/main.c:507
    #13 0x55a1010e0bfc in l_main_run_with_signal ell/main.c:647
    #14 0x55a10100316e in main mesh/main.c:292
    #15 0x7f60c0c6855f in __libc_start_call_main (/lib64/libc.so.6+...
    #16 0x7f60c0c6860b in __libc_start_main_alias_1 (/lib64/libc.so.6+...
    #17 0x55a101003ce4 in _start (/home/istotlan/bluez/mesh/bluetooth-m...
2022-03-26 09:48:58 -07:00
Luiz Augusto von Dentz
71cec503c8 device: Don't use DBG in gatt_debug
gatt_debug callback is used to print debug strings from bt_att which
includes the file and function names so using DBG would add yet another
set of file and function prefixes which makes the logs confusing.
2022-03-23 15:39:45 -07:00
Luiz Augusto von Dentz
e1b808c128 att: Rename att_debug and att_verbose to DBG and VERBOSE
att_debug and att_verbose are macros which are more common to be
used as uppercase, this also change them to use DBG like other parts of
the code.
2022-03-23 15:39:41 -07:00
Luiz Augusto von Dentz
55c25d91e4 gatt-server: Add DBG macro
This adds gatt_log wrapper for util_debug and DBG so file and function
names are printed with the logs.
2022-03-23 15:39:38 -07:00
Luiz Augusto von Dentz
e0870ce5e1 gatt-client: Add DBG macro
This adds gatt_log wrapper for util_debug and DBG macro so file and
function names are printed which is more consistent with other parts of
the daemon code.
2022-03-23 15:39:36 -07:00
Luiz Augusto von Dentz
8039d42687 att: Log file and function names
This adds logging of file and function names.
2022-03-23 15:39:33 -07:00
Luiz Augusto von Dentz
62c6037ea0 adapter: Don't use DBG in mgmt_debug
mgmt_debug callback is used to print debug strings from mgmt instances
which includes the file and function names so using DBG would add yet
another set of file and function prefixes which makes the logs
confusing.
2022-03-23 15:39:29 -07:00
Luiz Augusto von Dentz
b7c807269f mgmt: Introduce mgmt_set_verbose
This introduces mgmt_set_verbose which can be used to enable printing
the the likes hexdump of packets, by default it is disabled since in
most cases the hexdump is not very useful and there are better tools
to collect the hexdumo like btmon.
2022-03-23 15:39:23 -07:00
Luiz Augusto von Dentz
f9cb7c802f mgmt: Add DBG macro
This adds mgmt_log wrapper for util_debug and DBG so file and function
names are printed with the logs.
2022-03-23 15:39:20 -07:00
Luiz Augusto von Dentz
a3c9409035 log: Don't log __FILE__ and __func__ with DBG_IDX
This removes __FILE__ and __func__ from DBG_IDX since users of it may
already contain such information embedded in the format.
2022-03-23 15:39:01 -07:00
Marcel Holtmann
41f8c466f3 Release 5.64 2022-03-16 16:04:29 +01:00
Luiz Augusto von Dentz
411d63ec33 gatt-db: Fix gatt_db_attribute_notify
gatt_db_attribute_notify was only accepting passing the Characteristic
Declaration instead of accepting its value as well,
gatt_db_service_foreach_desc also have similar limitation so both have
been updated to allow working with both value and declaration.
2022-03-14 14:47:02 -07:00
Luiz Augusto von Dentz
8fb8f9e73f gatt: Print error if gatt_db_attribut_notify fails
This prints an error if gatt_db_attribut_notify fails.
2022-03-14 14:46:21 -07:00
Luiz Augusto von Dentz
42e9937158 test-runner: Update help information
This updates usage so it list -l/--emulator properly:

test-runner - Automated test execution utility
Usage:
	test-runner [options] [--] <command> [args]
Options:
	-a, --auto             Find tests and run them
	-d, --dbus             Start D-Bus daemon
	-m, --monitor          Start btmon
	-l, --emulator         Start btvirt
	-u, --unix [path]      Provide serial device
	-q, --qemu <path>      QEMU binary
	-k, --kernel <image>   Kernel image (bzImage)
	-h, --help             Show help options
2022-03-08 18:07:06 -08:00
Luiz Augusto von Dentz
55888bfd62 test-runner: Fix -l/--emulator
This fixes -l/--emulator not able to start depending on what parameters
are given as it was not setting the directory properly.
2022-03-08 18:00:49 -08:00
Luiz Augusto von Dentz
8e1892cc92 btdev: Fix response to LE Set Extended Advertising Parameters
The response should both the status and TX Power regardless if the
command succeeds or not.
2022-03-08 17:58:40 -08:00
Yun-Hao Chung
b69b5736c8 audio: Fix crash in a2dp_discover
Sample stack trace:
0x0000567c394e4c6b (bluetoothd - a2dp.c: 270) setup_cb_free
0x0000567c394e4a94 (bluetoothd - a2dp.c: 2884) a2dp_discover
0x0000567c394e3c03 (bluetoothd - sink.c: 275) sink_setup_stream
0x0000567c394e3d4f (bluetoothd - sink.c: 299) sink_connect
0x0000567c39535183 (bluetoothd - service.c: 294) btd_service_connect
0x0000567c39539f68 (bluetoothd - device.c: 2006) connect_next
0x0000567c3954086d (bluetoothd - device.c: 2060) service_state_changed
0x0000567c39534efb (bluetoothd - service.c: 111) change_state
0x0000567c3953559c (bluetoothd - service.c: 0)
btd_service_connecting_complete
0x0000567c39534a5c (bluetoothd - profile.c: 1641) record_cb
0x0000567c395197cd (bluetoothd - sdp-client.c: 298) connect_watch
0x00007b14bc8034f6 (libglib-2.0.so.0 - gmain.c: 3337)
g_main_context_dispatch
0x00007b14bc803801 (libglib-2.0.so.0 - gmain.c: 4131)
g_main_context_iterate
0x00007b14bc803a7d (libglib-2.0.so.0 - gmain.c: 4329) g_main_loop_run
0x0000567c39566af1 (bluetoothd - mainloop-glib.c: 79) mainloop_run
0x0000567c39566ddb (bluetoothd - mainloop-notify.c: 201)
mainloop_run_with_signal
0x0000567c3954bf4c (bluetoothd - main.c: 1222) main
0x00007b14bc579797 (libc.so.6 - libc-start.c: 332) __libc_start_main
0x0000567c394df449 (bluetoothd) _start
0x00007ffd70145737

This could be triggered from a2dp_discover -> avdtp_discover ->
send_request -> send_req -> l2cap_connect (return error) ->
avdtp_set_state (to disconnect state)-> channel_remove -> channel_free
-> finalize_setup_errno (discover cb is freed) -> error handling all
the way back to a2dp_discover -> a2dp_discover (discover cb is freed
again, crashed!).

The fix is to attach cb with setup after avdtp_discover success.

Suggested-by: luiz.dentz@gmail.com
Reviewed-by: Archie Pusaka <apusaka@chromium.org>
2022-03-08 11:22:50 -08:00
Luiz Augusto von Dentz
554fcb7d89 bthost: Add support for Create BIG
This adds bthost_create_big
2022-03-07 17:21:57 -08:00
Luiz Augusto von Dentz
f040ba43d1 bthost: Add support for Periodic Advertising
This adds bthost_set_pa_params and bthost_set_pa_enable.
2022-03-07 17:21:57 -08:00
Luiz Augusto von Dentz
a473a5a47c bthost: Add support for BT_H4_ISO_PKT
This adds sending and receiving BT_H4_ISO_PKT packets.
2022-03-07 17:21:56 -08:00
Luiz Augusto von Dentz
9cbc6fc1b2 btdev: Implements BT_HCI_CMD_LE_BIG_TERM_SYNC
This sends BT_HCI_EVT_DISCONNECT_COMPLETE when handling
BT_HCI_CMD_LE_BIG_TERM_SYNC.
2022-03-07 17:18:39 -08:00
Luiz Augusto von Dentz
40bacfff0c btdev: Implements BT_HCI_CMD_LE_BIG_CREATE_SYNC
This sends BT_HCI_EVT_LE_BIG_SYNC_ESTABLISHED when handling
BT_HCI_CMD_LE_BIG_CREATE_SYNC.
2022-03-07 17:18:38 -08:00
Luiz Augusto von Dentz
9d7f4405df monitor: Rename Periodic Advertising terms to PA/pa
This renames the use of Periodic Advertising in the API to just PA.
2022-03-07 17:18:38 -08:00
Luiz Augusto von Dentz
306bc0ca76 btdev: Send BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED if remote start pa
This sends BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED if remote device start
to periodic advertise when BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC is
pending.
2022-03-07 17:18:37 -08:00
Luiz Augusto von Dentz
d07185ff4e btdev: Send BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED when scan is initiated
This sends BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED if scan is initiated
while BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC is pending.
2022-03-07 17:18:37 -08:00
Luiz Augusto von Dentz
942a73daca btdev: Implement BT_HCI_CMD_LE_PERIODIC_ADV_TERM_SYNC
This adds implementation of BT_HCI_CMD_LE_PERIODIC_ADV_TERM_SYNC.
2022-03-07 17:18:37 -08:00
Luiz Augusto von Dentz
3250d7f938 btdev: Implement BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL
This adds implementation of
BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL generating
BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED if necessary.
2022-03-07 17:18:37 -08:00
Luiz Augusto von Dentz
ea501af91c btdev: Implement BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC
This adds implementation of BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC
generating BT_HCI_EVT_LE_PER_SYNC_ESTABLISHED and
BT_HCI_EVT_LE_PER_ADV_REPORT.
2022-03-07 17:18:36 -08:00
Luiz Augusto von Dentz
b5ab5eee3a monitor: Fix Create BIG PDU
The PDU of Create BIG is actually fixed size as the num_bis is
related to the number of indexes to be connected and not the BIS
parameters.
2022-03-07 17:18:36 -08:00
ihsinme
2f4368de81 device: Fix writing out of bounds array
%32s expect a buffer of at least 33 bytes since it is a string it needs
to be NULL terminated.
2022-03-07 16:14:23 -08:00
Andreas Kemnade
5e9342ee34 gatt: sanitize input at profile registration
Check whether type of UUIDs property of GattProfile1 object
is correct.
2022-03-07 16:12:35 -08:00
Luiz Augusto von Dentz
18af5f4faf client: Add support for scan <le/bredr>
This adds support for entering the transport directly as an scan
argument rather than having to first set it scan.transport.
2022-03-02 16:30:11 -08:00