From 3b937424db9009e3978fdcb1295f25088ffc48b6 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 25 Oct 2019 13:46:58 -0500 Subject: [PATCH] nl80211util: Ensure all entries are parsed The current logic did not make sure that each entry provided was actually parsed. Also add a sanity check to make sure that no duplicate parsing occurs. --- src/nl80211util.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/nl80211util.c b/src/nl80211util.c index b4c9de7e..a1e689e2 100644 --- a/src/nl80211util.c +++ b/src/nl80211util.c @@ -110,6 +110,7 @@ struct attr_entry { uint16_t type; void *data; attr_handler handler; + bool present : 1; }; int nl80211_parse_attrs(struct l_genl_msg *msg, int tag, ...) @@ -158,10 +159,28 @@ int nl80211_parse_attrs(struct l_genl_msg *msg, int tag, ...) if (!e) continue; + if (entry->present) { + ret = -EALREADY; + goto done; + } + if (!entry->handler(data, len, entry->data)) { ret = -EINVAL; goto done; } + + entry->present = true; + } + + ret = -ENOENT; + + for (e = l_queue_get_entries(entries); e; e = e->next) { + entry = e->data; + + if (entry->present) + continue; + + goto done; } ret = 0;