- tail = ofpbuf_tail(msg);
-
- while (p < tail) {
- size_t offset = (char*)p - (char*)msg->data;
- struct nlattr *nla = p;
- size_t len, aligned_len;
- uint16_t type;
-
- /* Make sure its claimed length is plausible. */
- if (nla->nla_len < NLA_HDRLEN) {
- VLOG_DBG_RL(&rl, "%zu: attr shorter than NLA_HDRLEN (%"PRIu16")",
- offset, nla->nla_len);
- return false;
- }
- len = nla->nla_len - NLA_HDRLEN;
- aligned_len = NLA_ALIGN(len);
- if (aligned_len > (char*)tail - (char*)p) {
- VLOG_DBG_RL(&rl, "%zu: attr %"PRIu16" aligned data len (%zu) "
- "> bytes left (%tu)",
- offset, nl_attr_type(nla), aligned_len,
- (char*)tail - (char*)p);
- return false;
- }