• Marcel Holtmann's avatar
    Bluetooth: Fix bug with filter in service discovery optimization · ea8ae251
    Marcel Holtmann authored
    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: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
    ea8ae251
mgmt.c 172 KB