Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Apr 1997 16:17:32 -0700 (PDT)
From:      Chris Timmons <skynyrd@opus.cts.cwu.edu>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   i386/3353: NTOHS(x) related compiler warnings and libpcap disfunction 
Message-ID:  <199704192317.QAA03006@opus.cts.cwu.edu>
Resent-Message-ID: <199704192320.QAA21804@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         3353
>Category:       i386
>Synopsis:       NTOHS(x) related compiler warnings and libpcap disfunction
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Apr 19 16:20:01 PDT 1997
>Last-Modified:
>Originator:     Chris Timmons
>Organization:
Central Washington University
>Release:        FreeBSD 3.0-CURRENT i386
>Environment:

3.0-CURRENT from today (world rebuilt)

>Description:

tcpdump(1) does not correctly process target ports for monitoring which are 
specified symbolically on the command line.  Given the command line: 

	tcpdump -d port time

the BPF packet matching code should be looking for 0x25 but instead looks 
for port 0x2500 - indicating a missed call to ntohs (on the value returned 
by getservbyname()):

        [snippet from the above tcpdump output]
	(009) jeq      #0x2500          jt 12   jf 10

tcpdump relies on pcap(3) to call getservbyname(), and coincidentally
interesting compilation warnings are issued when libpcap is built 
during make world:

/usr/src/lib/libpcap/../../contrib/libpcap/nametoaddr.c: 
    In function `pcap_nametoaddr':
/usr/src/lib/libpcap/../../contrib/libpcap/nametoaddr.c:89: 
    warning: statement with no effect

/usr/src/lib/libpcap/../../contrib/libpcap/nametoaddr.c: 
    In function `pcap_nametoport':
/usr/src/lib/libpcap/../../contrib/libpcap/nametoaddr.c:125: 
    warning: statement with no effect
/usr/src/lib/libpcap/../../contrib/libpcap/nametoaddr.c:141: 
    warning: statement with no effect


Line 125 of nametoaddr.c is a call to the NTOHS macro defined 
in sys/i386/include:

  123           sp = getservbyname(name, (char *)0);
  124           if (sp != NULL) {
  125                   NTOHS(sp->s_port);
  126                   *port = sp->s_port;


cc -E -c ../../contrib/libpcap/nametoaddr.c yields this 
(ostensibly correct per endian.h) expansion for line 125:

  (( sp->s_port ) = 
      __extension__ ({ register u_short __X = ( (u_short)( sp->s_port ) ); 
      __asm ("xchgb %h1, %b1"
           : "=q" (__X) 
           : "0" (__X));
       __X; }) ) ;


>How-To-Repeat:

I tried to reduce this to a simple test case, using NTOHS() in the same
way that libpcap does; I couldn't reproduce it.  So for now,

	cd /usr/src/lib/libpcap
	make

to get the compiler warnings, and use

	tcpdump -d udp port time to see the end result.


>Fix:
	
	unknown, but I'm going to review the #includes in 
	src/contrib/nametoaddr.c to see if there is perhaps
 	some heinous recursion or something else which might
	be confusing the compiler???   HELP!!!!
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704192317.QAA03006>