- ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %u",
- ipaddr_string(ndo, lshp->ls_router),
- EXTRACT_BE_U_4(lshp->ls_seq),
- EXTRACT_BE_U_2(lshp->ls_age),
- EXTRACT_BE_U_2(lshp->ls_length)-(u_int)sizeof(struct lsa6_hdr));
+ ls_length = GET_BE_U_2(lshp->ls_length);
+ if (ls_length < sizeof(struct lsa_hdr)) {
+ ND_PRINT("\n\t Bogus length %u < header (%zu)", ls_length,
+ sizeof(struct lsa_hdr));
+ goto trunc;
+ }
+
+ ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %zu",
+ GET_IPADDR_STRING(lshp->ls_router),
+ GET_BE_U_4(lshp->ls_seq),
+ GET_BE_U_2(lshp->ls_age),
+ ls_length-sizeof(struct lsa6_hdr));