From daisu-mi@iplab.aist-nara.ac.jp  Thu Feb 15 10:29:53 2001
Return-Path: <daisu-mi@iplab.aist-nara.ac.jp>
Received: from iplab.aist-nara.ac.jp (iplab.aist-nara.ac.jp [163.221.52.80])
	by hub.freebsd.org (Postfix) with ESMTP id E87BA37B491
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 15 Feb 2001 10:29:52 -0800 (PST)
Received: (from daisu-mi@localhost)
	by iplab.aist-nara.ac.jp (8.9.3/8.9.3) id DAA12798;
	Fri, 16 Feb 2001 03:32:52 +0900 (JST)
	(envelope-from daisu-mi)
Message-Id: <200102151832.DAA12798@iplab.aist-nara.ac.jp>
Date: Fri, 16 Feb 2001 03:32:52 +0900 (JST)
From: daisu-mi@is.aist-nara.ac.jp
Reply-To: daisu-mi@is.aist-nara.ac.jp
To: FreeBSD-gnats-submit@freebsd.org
Subject: ICMP Destination Port Unreachable Error Message is wrong.
X-Send-Pr-Version: 3.2

>Number:         25117
>Category:       kern
>Synopsis:       ICMP Destination Port Unreachable Error Message is wrong.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    ru
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Thu Feb 15 10:30:00 PST 2001
>Closed-Date:    Mon May 14 11:27:01 PDT 2001
>Last-Modified:  Mon May 14 11:28:47 PDT 2001
>Originator:     Daisuke Miyamoto
>Release:        FreeBSD 4.2-RELEASE i386
>Organization:
Computer Language Labo / Nara Institute of Science and Technology
>Environment:

 Pentium2 300MHz and 15GB HDD and 128MB RAM. (any environments)

>Description:

 ICMP Destination Port Unreachable Error Message was wrong. This ICMP
Datagram does NOT contain the checksum value of the original UDP datagram.
It is ocurred filled in original UDP datagram by 0 when calculate UDP
checksum. Does it agree with RFC ? Does it only help NMAP to detect OS ?

>How-To-Repeat:

 Anytime.
 
>Fix:
--- sys/netinet/udp_usrreq.c.orig    Thu Nov  2 02:08:50 2000
+++ sys/netinet/udp_usrreq.c    Wed Jan 17 00:20:25 2001
@@ -162,6 +162,8 @@
        struct ip save_ip;
        struct sockaddr *append_sa;
 
+       u_short osum;
+
        udpstat.udps_ipackets++;
 
        /*
@@ -214,6 +216,7 @@
        /*
         * Checksum extended UDP header and data.
         */
+       osum = uh->uh_sum;
        if (uh->uh_sum) {
                if (m->m_pkthdr.csum_flags & CSUM_DATA_VALID) {
                        if (m->m_pkthdr.csum_flags & CSUM_PSEUDO_HDR)
@@ -234,6 +237,9 @@
                        return;
                }
        }
+
+       /* restore original datagram */
+       uh->uh_sum = osum;
 
        if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) ||
            in_broadcast(ip->ip_dst, m->m_pkthdr.rcvif)) {


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback 
State-Changed-By: ru 
State-Changed-When: Tue Mar 13 09:20:49 PST 2001 
State-Changed-Why:  
Believed to be fixed in ip_output,v 1.124. 


Responsible-Changed-From-To: freebsd-bugs->ru 
Responsible-Changed-By: ru 
Responsible-Changed-When: Tue Mar 13 09:20:49 PST 2001 
Responsible-Changed-Why:  
MFC reminder. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=25117 
State-Changed-From-To: feedback->closed 
State-Changed-By: ru 
State-Changed-When: Mon May 14 11:27:01 PDT 2001 
State-Changed-Why:  
Fixed in 4.3-STABLE: ip_output,v 1.99.2.14. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=25117 
>Unformatted:
