Changeset 1347

Show
Ignore:
Timestamp:
09/04/08 11:07:00 (9 months ago)
Author:
perry
Message:

* Add an error for an invalid snaplen
* Use packet->buffer, not packet->payload when reading from a linux native

interface

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/format_linux.c

    r1332 r1347  
    8787        FORMAT(libtrace->format_data)->fd = -1; 
    8888        FORMAT(libtrace->format_data)->promisc = -1; 
    89         FORMAT(libtrace->format_data)->snaplen = 65536
     89        FORMAT(libtrace->format_data)->snaplen = LIBTRACE_PACKET_BUFSIZE
    9090        FORMAT(libtrace->format_data)->filter = NULL; 
    9191        FORMAT(libtrace->format_data)->stats_valid = 0; 
     
    155155                mreq.mr_ifindex = addr.sll_ifindex; 
    156156                mreq.mr_type = PACKET_MR_PROMISC; 
    157                 setsockopt(FORMAT(libtrace->format_data)->fd, 
     157                if (setsockopt(FORMAT(libtrace->format_data)->fd, 
    158158                                SOL_PACKET, 
    159159                                PACKET_ADD_MEMBERSHIP, 
    160160                                &mreq, 
    161                                 socklen); 
     161                                socklen)==-1) { 
     162                        perror("setsockopt(PROMISC)"); 
     163                } 
    162164        } 
    163165 
     
    377379        if (!packet->buffer || packet->buf_control == TRACE_CTRL_EXTERNAL) { 
    378380                packet->buffer = malloc((size_t)LIBTRACE_PACKET_BUFSIZE); 
     381                if (!packet->buffer) { 
     382                        perror("Cannot allocate buffer"); 
     383                } 
    379384        } 
    380385 
     
    399404        msghdr.msg_flags = 0; 
    400405 
    401         iovec.iov_base = (void*)packet->payload
     406        iovec.iov_base = (void*)packet->buffer
    402407        iovec.iov_len = snaplen; 
    403408 
  • trunk/lib/trace.c

    r1346 r1347  
    547547                        if (trace_is_err(libtrace)) { 
    548548                                err = trace_get_err(libtrace); 
     549                        } 
     550                        if (*(int*)value<0  
     551                                || *(int*)value>LIBTRACE_PACKET_BUFSIZE) { 
     552                                trace_set_err(libtrace,TRACE_ERR_BAD_STATE, 
     553                                        "Invalid snap length"); 
    549554                        } 
    550555                        libtrace->snaplen=*(int*)value;