From Jean-Luc.Richier@imag.fr  Sun Jul 14 09:45:02 2002
Return-Path: <Jean-Luc.Richier@imag.fr>
Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 612D937B425
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 14 Jul 2002 09:44:53 -0700 (PDT)
Received: from imag.imag.fr (imag.imag.fr [129.88.30.1])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 4B42243E42
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 14 Jul 2002 09:44:52 -0700 (PDT)
	(envelope-from Jean-Luc.Richier@imag.fr)
Received: from horus.imag.fr (horus.imag.fr [129.88.38.1])
	by imag.imag.fr (8.11.6/8.11.6) with ESMTP id g6EGipS11998
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 14 Jul 2002 18:44:51 +0200 (MEST)
Received: (from richier@localhost)
	by horus.imag.fr (8.11.6/8.11.6/Imag.pm.V2) id g6EGioM16505
	for FreeBSD-gnats-submit@freebsd.org; Sun, 14 Jul 2002 18:44:51 +0200 (MEST)
Received: from imag.imag.fr (imag.imag.fr [129.88.30.1])
	by horus.imag.fr (8.11.6/8.11.6/Imag.pm.V2) with ESMTP id g6EGgug16475
	for <richier@horus.imag.fr>; Sun, 14 Jul 2002 18:42:56 +0200 (MEST)
Received: from luna.imag.fr (luna.imag.fr [129.88.26.80])
	by imag.imag.fr (8.11.6/8.11.6) with ESMTP id g6EGgtS11982
	for <Jean-Luc.Richier@imag.fr>; Sun, 14 Jul 2002 18:42:56 +0200 (MEST)
Received: from luna.imag.fr (localhost [127.0.0.1])
	by luna.imag.fr (8.12.3/8.12.3) with ESMTP id g6EGd2Md092934;
	Sun, 14 Jul 2002 18:39:02 +0200 (CEST)
	(envelope-from richier@horus.imag.fr)
Received: (from root@localhost)
	by luna.imag.fr (8.12.3/8.12.3/Submit) id g6EGd2Jv092933;
	Sun, 14 Jul 2002 18:39:02 +0200 (CEST)
	(envelope-from richier)
Message-Id: <200207141639.g6EGd2Jv092933@luna.imag.fr>
Date: Sun, 14 Jul 2002 18:39:02 +0200 (CEST)
From: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
Reply-To: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
To: FreeBSD-gnats-submit@freebsd.org
Cc: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
Subject: UDP6 sockets do not receive responses of sendto to IPv4mapped address
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         40558
>Category:       kern
>Synopsis:       UDP6 sockets do not receive responses of sendto to IPv4mapped address
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    bms
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jul 14 09:50:01 PDT 2002
>Closed-Date:    Tue Nov 02 06:59:33 GMT 2004
>Last-Modified:  Tue Nov 02 06:59:33 GMT 2004
>Originator:     Jean-Luc Richier
>Release:        FreeBSD 4.6-RELEASE i386
>Organization:
LSR-IMAG, Grenoble, France
>Environment:
System: FreeBSD luna.imag.fr 4.6-RELEASE FreeBSD 4.6-RELEASE #6: Wed Jun 12 18:55:37 GMT 2002 richier@luna.imag.fr:/usr/src/sys/compile/VLAN i386
	also FreeBSD current (June, 24 2002)
	and KAME FreeBSD (kame-20020708-freebsd46-snap.tgz)
Description:
	An UDP PF_INET6 socket which is implicitely binded using sento to
	an IPv6 IPv4mapped address (::FFFF:x.y.z.t) will not receive the
	IPv4 packets sent in response
How-To-Repeat:
	+ On a machine with IPv4 address x.y.z.t, validate the udp4 echo service
		in /etc/inetd.conf

	+ Write and execute the following test program:
	- s = socket(PF_INET6, SOCK_DGRAM, 0);
	- getaddrinfo("0:ffff:x.y.z.t","echo", &hints, &res);
	- sento(s, "data", 4, 0, res->ai_addr, res->ai_addrlen);
	- recvfrom(s, buf, sizeof buf, 0, (struct sockaddr *)&from, &fromlen);

	The recvfrom will not receives any packet

Fix:
	The bug is the udp sendto code. INET6 sendto udp code does not set
	the INP_IPV4 flag on the inpcb of the socket. Therefore the received
	IPv4 packets are not matched against this pcb.

	To correct apply the following patch:

--- /sys/netinet6/udp6_usrreq.c.DIST	Sun Apr 28 07:40:27 2002
+++ /sys/netinet6/udp6_usrreq.c	Wed May 29 19:23:23 2002
@@ -713,6 +713,7 @@
 
 			if (sin6)
 				in6_sin6_2_sin_in_sock(addr);
+			inp->inp_vflag |= INP_IPV4;
 			pru = inetsw[ip_protox[IPPROTO_UDP]].pr_usrreqs;
 			error = ((*pru->pru_send)(so, flags, m, addr, control,
 						  p));

>Description:
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:

From: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
To: freebsd-gnats-submit@FreeBSD.org, Jean-Luc.Richier@imag.fr
Cc:  
Subject: Re: kern/40558: UDP6 sockets do not receive responses of sendto to
 IPv4mapped address
Date: Tue, 10 Sep 2002 15:09:59 +0200

 This is a multi-part message in MIME format.
 --------------060100020504080002060702
 Content-Type: text/plain; charset=us-ascii; format=flowed
 Content-Transfer-Encoding: 7bit
 
 For FreeBSD 4.6/FreeBSD4.6.2 KAME has suggested the attached patch, used 
 in kame snap distributions and in FreeBSD-5.0.
 (diff done of 4.6.2 GENERIC)
 This bug has been corrected in FreeBSD current (checked end of August 
 2002) using KAME patch.
 
 -- 
 Jean-Luc RICHIER (Jean-Luc.Richier@Imag.Fr  richier@imag.fr)
 Laboratoire Logiciels, Systemes et Reseaux (LSR-IMAG)
 IMAG-CAMPUS, BP 72, F-38402 St Martin d'Heres Cedex
 Tel : +33 4 76 82 72 32 Fax : +33 4 76 82 72 87
 
 --------------060100020504080002060702
 Content-Type: text/plain;
  name="Patch-udp"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline;
  filename="Patch-udp"
 
 --- sys/netinet6/ip6_output.c.DIST	Sun Apr 28 07:40:27 2002
 +++ sys/netinet6/ip6_output.c	Mon Sep  2 18:41:47 2002
 @@ -1369,6 +1369,10 @@
  					 */
  					OPTSET(IN6P_BINDV6ONLY);
  					OPTSET(IN6P_IPV6_V6ONLY);
 +					if (optval)
 +						in6p->in6p_vflag &= ~INP_IPV4;
 +					else
 +						in6p->in6p_vflag |= INP_IPV4;
  					break;
  				}
  				break;
 --- sys/netinet6/udp6_usrreq.c.DIST	Sun Apr 28 07:40:27 2002
 +++ sys/netinet6/udp6_usrreq.c	Mon Sep  2 18:45:44 2002
 @@ -534,6 +534,8 @@
  		return error;
  	inp = (struct inpcb *)so->so_pcb;
  	inp->inp_vflag |= INP_IPV6;
 +	if (ip6_mapped_addr_on)
 +		inp->inp_vflag |= INP_IPV4;
  	inp->in6p_hops = -1;	/* use kernel default */
  	inp->in6p_cksum = -1;	/* just to be sure */
  	/*
 
 --------------060100020504080002060702--
 
State-Changed-From-To: open->patched 
State-Changed-By: bms 
State-Changed-When: Fri Jun 18 03:26:00 GMT 2004 
State-Changed-Why:  
This has indeed been patched in -CURRENT 


Responsible-Changed-From-To: freebsd-bugs->bms 
Responsible-Changed-By: bms 
Responsible-Changed-When: Fri Jun 18 03:26:00 GMT 2004 
Responsible-Changed-Why:  
I'll take this 

http://www.freebsd.org/cgi/query-pr.cgi?pr=40558 
State-Changed-From-To: patched->closed 
State-Changed-By: bms 
State-Changed-When: Tue Nov 2 06:58:57 GMT 2004 
State-Changed-Why:  
RELENG_5 has now been branched as -STABLE 

http://www.freebsd.org/cgi/query-pr.cgi?pr=40558 
>Unformatted:
