Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c17e28d1 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: use element iteration macro in parsing



Instead of open-coding the element walk, use the new macro.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 0f3b07f0
Loading
Loading
Loading
Loading
+6 −19
Original line number Diff line number Diff line
@@ -895,8 +895,7 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
			       struct ieee802_11_elems *elems,
			       u64 filter, u32 crc)
{
	size_t left = len;
	const u8 *pos = start;
	struct element *elem;
	bool calc_crc = filter != 0;
	DECLARE_BITMAP(seen_elems, 256);
	const u8 *ie;
@@ -906,18 +905,11 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
	elems->ie_start = start;
	elems->total_len = len;

	while (left >= 2) {
		u8 id, elen;
	for_each_element(elem, start, len) {
		bool elem_parse_failed;

		id = *pos++;
		elen = *pos++;
		left -= 2;

		if (elen > left) {
			elems->parse_error = true;
			break;
		}
		u8 id = elem->id;
		u8 elen = elem->datalen;
		const u8 *pos = elem->data;

		switch (id) {
		case WLAN_EID_SSID:
@@ -960,8 +952,6 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
		 */
			if (test_bit(id, seen_elems)) {
				elems->parse_error = true;
				left -= elen;
				pos += elen;
				continue;
			}
			break;
@@ -1244,12 +1234,9 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
			elems->parse_error = true;
		else
			__set_bit(id, seen_elems);

		left -= elen;
		pos += elen;
	}

	if (left != 0)
	if (!for_each_element_completed(elem, start, len))
		elems->parse_error = true;

	return crc;