Changeset d247823 for lib


Ignore:
Timestamp:
07/15/11 14:56:49 (10 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
29b93a5
Parents:
8bd2bbf
Message:
  • Fixed bug in trace_get_payload_from_ip6 where we were incorrectly calculating the length of any extension headers that were present - for some silly reason, the first 8 bytes are not included in the length field. Thanks to Rong Zheng for reporting this bug (#314).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/protocols_l3.c

    r08c56ac rd247823  
    157157                        case 0: /* hop by hop options */
    158158                        case TRACE_IPPROTO_ROUTING:
    159                         case TRACE_IPPROTO_ESP:
    160159                        case TRACE_IPPROTO_AH:
    161160                        case TRACE_IPPROTO_DSTOPTS:
    162                                 {
    163                                         len=((libtrace_ip6_ext_t*)payload)->len
    164                                         +sizeof(libtrace_ip6_ext_t);
    165 
    166                                         if (remaining) {
    167                                                 if (*remaining < len) {
    168                                                         /* Snap too short */
    169                                                         *remaining = 0;
    170                                                         return NULL;
    171                                                 }
    172                                                 *remaining-=len;
     161                        {
     162                                /* Length does not include the first 8 bytes */
     163                                len=((libtrace_ip6_ext_t*)payload)->len * 8;
     164                                len += 8;
     165
     166
     167                                if (remaining) {
     168                                        if (*remaining < len) {
     169                                                /* Snap too short */
     170                                                *remaining = 0;
     171                                                return NULL;
    173172                                        }
    174 
    175                                         nxt=((libtrace_ip6_ext_t*)payload)->nxt;
    176                                         payload=(char*)payload+len;
    177                                         continue;
     173                                        *remaining-=len;
    178174                                }
     175
     176                                nxt=((libtrace_ip6_ext_t*)payload)->nxt;
     177                                payload=(char*)payload+len;
     178                                continue;
     179                        }
     180                        case TRACE_IPPROTO_ESP:
     181                        {
     182                                if (prot) *prot=TRACE_IPPROTO_ESP;
     183                                return payload;
     184                        }
    179185                        case TRACE_IPPROTO_FRAGMENT:
    180186                                {
Note: See TracChangeset for help on using the changeset viewer.