Date: Wed, 4 Oct 2000 00:44:03 +0200 From: Kalou <pb@hert.org> To: FreeBSD-gnats-submit@freebsd.org Subject: kern/21737: EINVAL with sendto(), IP_HDRINCL, and IPPROTO_RAW Message-ID: <20001004004403.A44296@eclipse.home>
next in thread | raw e-mail | index | archive | help
>Number: 21737
>Category: kern
>Synopsis: sendto returns systematically EINVAL with HDRINCL raw socks.
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Oct 03 15:50:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Pascal Bouchareine
>Release: FreeBSD 4.1-RELEASE i386 and 4.0-RELEASE alpha
>Organization:
hert
>Environment:
a lot..
>Description:
An IPPROTO_RAW socket, set with IP_HDRINCL option via setsockopt,
won't let any raw packet out and return EINVAL. This is due to the
fact that FreeBSD kernel uses flipped ip_len to speed up handling,
where the user just supplied a htons'ed one.
Then, a check in rip_output() forbids the case where :
ip->ip_len < m->m_pkthdr.len
A user supplied IP header is seen as 10240 bytes long and denied.
Is this a kernel bug or a documented feature of the IPPROTO_RAW
layer ?
>How-To-Repeat:
Well the code is rather heavy so i won't post there in.
Just compile and run freebsd-spoof.c or any raw ip utility
using IP_HDRINCL or mail me back for an example..
>Fix:
Against version 1.64.2.1 of sys/netinet/raw_ip.c :
--- raw_ip.c Sat Jul 15 09:14:31 2000
+++ /sys/netinet/raw_ip.c Wed Oct 4 02:45:28 2000
@@ -210,7 +210,16 @@
m_freem(m);
return(EMSGSIZE);
}
+
ip = mtod(m, struct ip *);
+
+ /* user supplied packet is supposed to be sent
+ ** as is. Since we work with flipped ip_len until
+ ** the packet is sent, fixup user input :)
+ */
+
+ ip->ip_len = ntohs(ip->ip_len);
+
/* don't allow both user specified and setsockopt options,
and don't allow packet length sizes that will crash */
if (((IP_VHL_HL(ip->ip_vhl) != (sizeof (*ip) >> 2))
--
pub 1024D/98F6C473 2000-08-14 Pascal Bouchareine (kalou) <pb@hert.org>
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001004004403.A44296>
