WPS: Avoid undefined behavior in pointer arithmetic

Reorder terms in a way that no invalid pointers are generated with
pos+len operations. end-pos is always defined (with a valid pos pointer)
while pos+len could end up pointing beyond the end pointer which would
be undefined behavior.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2015-10-18 01:42:03 +03:00
parent bf0ec17a51
commit 625745c297

View file

@ -83,10 +83,10 @@ static int wps_parse_vendor_ext_wfa(struct wps_parse_attr *attr, const u8 *pos,
const u8 *end = pos + len; const u8 *end = pos + len;
u8 id, elen; u8 id, elen;
while (pos + 2 <= end) { while (end - pos >= 2) {
id = *pos++; id = *pos++;
elen = *pos++; elen = *pos++;
if (pos + elen > end) if (elen > end - pos)
break; break;
if (wps_set_vendor_ext_wfa_subelem(attr, id, elen, pos) < 0) if (wps_set_vendor_ext_wfa_subelem(attr, id, elen, pos) < 0)
return -1; return -1;