lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAOxq_8NbmOtvyH6Q=AVeOUAj7DoFO8cnVUQA5sgyEG7jEJXpHA@mail.gmail.com> Date: Thu, 6 Dec 2012 16:55:00 -0800 From: Ani Sinha <ani@...stanetworks.com> To: "Eric W. Biederman" <ebiederm@...ssion.com> Cc: Michael Richardson <mcr@...delman.ca>, tcpdump-workers@...ts.tcpdump.org, netdev@...r.kernel.org, Francesco Ruggeri <fruggeri@...stanetworks.com> Subject: Re: [tcpdump-workers] vlan tagged packets and libpcap breakage On Thu, Dec 6, 2012 at 2:19 PM, Eric W. Biederman <ebiederm@...ssion.com> wrote: > Ani Sinha <ani@...stanetworks.com> writes: >>> >> >> May be this? > > Two things. > > - TP_STATUS_VLAN_VALID lives in the tp_status field not the tp_vlan_tci field. > - To work on older kernels with binaries compiled with newer headers you > first want to test for tp_vlan_tci == 0 and then look at the status field for > TP_STATUS_VALID. trying again : pcap-linux.c | 50 +++++++++++++++++++++++++++++++------------------- 1 files changed, 31 insertions(+), 19 deletions(-) diff --git a/pcap-linux.c b/pcap-linux.c index a42c3ac..8e355d3 100644 --- a/pcap-linux.c +++ b/pcap-linux.c @@ -133,6 +133,7 @@ static const char rcsid[] _U_ = #include <sys/utsname.h> #include <sys/mman.h> #include <linux/if.h> +#include <linux/if_packet.h> #include <netinet/in.h> #include <linux/if_ether.h> #include <net/if_arp.h> @@ -1543,7 +1544,13 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata) continue; aux = (struct tpacket_auxdata *)CMSG_DATA(cmsg); - if (aux->tp_vlan_tci == 0) +#if defined(TP_STATUS_VLAN_VALID) + if ((aux->tp_vlan_tci == 0) || !(aux->tp_status & TP_STATUS_VLAN_VALID)) +#else + if (aux->tp_vlan_tci == 0) /* this is ambigious but without the + TP_STATUS_VLAN_VALID flag, there is + nothing that we can do */ +#endif continue; len = packet_len > iov.iov_len ? iov.iov_len : packet_len; @@ -3936,7 +3926,12 @@ pcap_read_linux_mmap(pcap_t *handle, int max_packets, pcap_handler callback, } #ifdef HAVE_TPACKET2 - if (handle->md.tp_version == TPACKET_V2 && h.h2->tp_vlan_tci && + if ((handle->md.tp_version == TPACKET_V2) && +#if defined(TP_STATUS_VLAN_VALID) + (h.h2->tp_vlan_tci || (h.h2->tp_status & TP_STATUS_VLAN_VALID)) && +#else + h.h2->tp_vlan_tci && +#endif handle->md.vlan_offset != -1 && tp_snaplen >= (unsigned int) handle->md.vlan_offset) { struct vlan_tag *tag; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists