* [PATCH 1/2] monitor: Fix use of uninitialized variable @ 2015-11-21 20:09 Szymon Janc 2015-11-21 20:09 ` [PATCH 2/2] monitor: Fix possible crash on unknown LE Meta Event Szymon Janc 2015-11-24 19:57 ` [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc 0 siblings, 2 replies; 3+ messages in thread From: Szymon Janc @ 2015-11-21 20:09 UTC (permalink / raw) To: linux-bluetooth; +Cc: Szymon Janc subevent code was never set in vendor_evt() resulting in printing random stack data as subevent opcode in print_subevent(). --- monitor/packet.c | 1 + 1 file changed, 1 insertion(+) diff --git a/monitor/packet.c b/monitor/packet.c index 4c18cb2..70bd153 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -8471,6 +8471,7 @@ static void vendor_evt(const void *data, uint8_t size) vendor_data.str = vendor_str; } else vendor_data.str = vnd->str; + vendor_data.subevent = subevent; vendor_data.func = vnd->evt_func; vendor_data.size = vnd->evt_size; vendor_data.fixed = vnd->evt_fixed; -- 2.6.2 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] monitor: Fix possible crash on unknown LE Meta Event 2015-11-21 20:09 [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc @ 2015-11-21 20:09 ` Szymon Janc 2015-11-24 19:57 ` [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc 1 sibling, 0 replies; 3+ messages in thread From: Szymon Janc @ 2015-11-21 20:09 UTC (permalink / raw) To: linux-bluetooth; +Cc: Szymon Janc For unknown LE Meta Event subevent_data passed to print_subevent is NULL. This results in NULL pointer dereference when subeven code is printed. Fix that by making print_subevent expect always valid subevent_data and handle unknown event in caller. --- monitor/packet.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/monitor/packet.c b/monitor/packet.c index 70bd153..322bba6 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -8375,23 +8375,17 @@ struct subevent_data { static void print_subevent(const struct subevent_data *subevent_data, const void *data, uint8_t size) { - const char *subevent_color, *subevent_str; + const char *subevent_color; - if (subevent_data) { - if (subevent_data->func) - subevent_color = COLOR_HCI_EVENT; - else - subevent_color = COLOR_HCI_EVENT_UNKNOWN; - subevent_str = subevent_data->str; - } else { + if (subevent_data->func) + subevent_color = COLOR_HCI_EVENT; + else subevent_color = COLOR_HCI_EVENT_UNKNOWN; - subevent_str = "Unknown"; - } - print_indent(6, subevent_color, "", subevent_str, COLOR_OFF, + print_indent(6, subevent_color, "", subevent_data->str, COLOR_OFF, " (0x%2.2x)", subevent_data->subevent); - if (!subevent_data || !subevent_data->func) { + if (!subevent_data->func) { packet_hexdump(data, size); return; } @@ -8442,9 +8436,16 @@ static const struct subevent_data le_meta_event_table[] = { static void le_meta_event_evt(const void *data, uint8_t size) { uint8_t subevent = *((const uint8_t *) data); - const struct subevent_data *subevent_data = NULL; + struct subevent_data unknown; + const struct subevent_data *subevent_data = &unknown; int i; + unknown.subevent = subevent; + unknown.str = "Unknown"; + unknown.func = NULL; + unknown.size = 0; + unknown.fixed = true; + for (i = 0; le_meta_event_table[i].str; i++) { if (le_meta_event_table[i].subevent == subevent) { subevent_data = &le_meta_event_table[i]; -- 2.6.2 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] monitor: Fix use of uninitialized variable 2015-11-21 20:09 [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc 2015-11-21 20:09 ` [PATCH 2/2] monitor: Fix possible crash on unknown LE Meta Event Szymon Janc @ 2015-11-24 19:57 ` Szymon Janc 1 sibling, 0 replies; 3+ messages in thread From: Szymon Janc @ 2015-11-24 19:57 UTC (permalink / raw) To: linux-bluetooth On Saturday 21 November 2015 21:09:03 Szymon Janc wrote: > subevent code was never set in vendor_evt() resulting in printing > random stack data as subevent opcode in print_subevent(). > --- > monitor/packet.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/monitor/packet.c b/monitor/packet.c > index 4c18cb2..70bd153 100644 > --- a/monitor/packet.c > +++ b/monitor/packet.c > @@ -8471,6 +8471,7 @@ static void vendor_evt(const void *data, uint8_t size) > vendor_data.str = vendor_str; > } else > vendor_data.str = vnd->str; > + vendor_data.subevent = subevent; > vendor_data.func = vnd->evt_func; > vendor_data.size = vnd->evt_size; > vendor_data.fixed = vnd->evt_fixed; Applied. -- pozdrawiam Szymon Janc ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-11-24 19:57 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-11-21 20:09 [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc 2015-11-21 20:09 ` [PATCH 2/2] monitor: Fix possible crash on unknown LE Meta Event Szymon Janc 2015-11-24 19:57 ` [PATCH 1/2] monitor: Fix use of uninitialized variable Szymon Janc
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).