diff options
| author | hannes <hannes> | 2008-01-28 13:48:52 +0000 |
|---|---|---|
| committer | hannes <hannes> | 2008-01-28 13:48:52 +0000 |
| commit | fadb7dae17836754ef583191de431a925253b85f (patch) | |
| tree | f4b401fa0a67cda5567c8e5e6da1e7cb8f6e68b0 | |
| parent | f086052e8b7fa4218cfbf812654592a9050ef7ad (diff) | |
| download | tcpdump-fadb7dae17836754ef583191de431a925253b85f.tar.gz | |
bugfix: do proper padding calculation for LSPING
| -rw-r--r-- | print-lspping.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/print-lspping.c b/print-lspping.c index a96fb756..5b7117ab 100644 --- a/print-lspping.c +++ b/print-lspping.c @@ -15,7 +15,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-lspping.c,v 1.12.2.6 2006-06-23 02:07:27 hannes Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-lspping.c,v 1.12.2.7 2008-01-28 13:48:52 hannes Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -574,10 +574,11 @@ lspping_print(register const u_char *pptr, register u_int len) { lspping_tlv_type=EXTRACT_16BITS(lspping_tlv_header->type); lspping_tlv_len=EXTRACT_16BITS(lspping_tlv_header->length); - if (lspping_tlv_len == 0) + /* some little sanity checking */ + if (lspping_tlv_type == 0 || lspping_tlv_len == 0) return; - if(lspping_tlv_len % 4 || lspping_tlv_len < 4) { /* aligned to four octet boundary */ + if(lspping_tlv_len < 4) { printf("\n\t ERROR: TLV %u bogus size %u",lspping_tlv_type,lspping_tlv_len); return; } @@ -858,6 +859,12 @@ lspping_print(register const u_char *pptr, register u_int len) { print_unknown_data(tptr+sizeof(sizeof(struct lspping_tlv_header)),"\n\t ", lspping_tlv_len); + + /* All TLVs are aligned to four octet boundary */ + if (lspping_tlv_len % 4) { + lspping_tlv_len += (4 - lspping_tlv_len % 4); + } + tptr+=lspping_tlv_len+sizeof(struct lspping_tlv_header); tlen-=lspping_tlv_len+sizeof(struct lspping_tlv_header); } |
