]> git.baikalelectronics.ru Git - kernel.git/commit
Bluetooth: Fix bug with filter in service discovery optimization
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 17 Dec 2014 17:18:08 +0000 (18:18 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Wed, 17 Dec 2014 20:03:49 +0000 (22:03 +0200)
commitf6c5b5583dcd83d28e1479d1b3d363a1e4128179
tree1bf4498f94dcc0e7f0cd2be486da53015c138872
parent79f5e6e697deea1b9a7527c6f6303ce4a90bd2d5
Bluetooth: Fix bug with filter in service discovery optimization

The optimization for filtering out extended inquiry results, advertising
reports or scan response data based on provided UUID list has a logic
bug. In case no match is found in the advertising data, the scan
response is ignored and not checked against the filter. This will lead
to events being filtered wrongly.

Change the code to actually only drop the events when the scan response
data is not present. If it is present, it needs to be checked against
the provided filter.

The patch is a bit more complex than it needs to be. That is because
it also fixes this compiler warning that some gcc versions produce.

  CC      net/bluetooth/mgmt.o
net/bluetooth/mgmt.c: In function ‘mgmt_device_found’:
net/bluetooth/mgmt.c:7028:7: warning: ‘match’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  bool match;
       ^

It seems that gcc can not clearly figure out the context of the match
variable. So just change the branches for the extended inquiry response
and advertising data around so that it is clear.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
net/bluetooth/mgmt.c