kern/85320: possible depletion of kernel stack in ip_gre.c when
net.isr.enable = 1
Ming Fu
fming at borderware.com
Fri Aug 26 15:00:25 GMT 2005
>Number: 85320
>Category: kern
>Synopsis: possible depletion of kernel stack in ip_gre.c when net.isr.enable = 1
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Aug 26 15:00:23 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Ming Fu
>Release: FreeBSD 5.x
>Organization:
Borderware Technologies Inc
>Environment:
FreeBSD home.borderware.com 5.4-RELEASE FreeBSD 5.4-RELEASE #1: Tue May 31 10:17:34 EDT 2005 fming at home.borderware.com
>Description:
when net.isr.enable = 1 and a GRE packet gets into the ip_gre2(), its gre header is stripped and sent to netisr_dispatch() for ip_input() processing again. As the net.isr.enable is 1, the packet will be delivered to ip_input directly instead of put in the queue.
If someone create a packet consists of repeated ip and gre header,
ip hdr : gre hdr : ip hdr : gre hdr : ...... repeat a few hundred times.
it can cause a loop around ip_gre->ip_gre2->netisr_dispatch->ip_input->ip_gre ..., and deplete the kernel stack.
>How-To-Repeat:
send a packet with a few hundred repeated IP and GRE header to a freebsd 5.x with gre configured.
>Fix:
Index: ip_gre.c
===================================================================
RCS file: /usr/cvsroot/freebsd/src/sys/netinet/ip_gre.c,v
retrieving revision 1.20
diff -u -r1.20 ip_gre.c
--- ip_gre.c 1 Aug 2005 08:14:21 -0000 1.20
+++ ip_gre.c 26 Aug 2005 14:40:32 -0000
@@ -223,7 +223,7 @@
m->m_pkthdr.rcvif = GRE2IFP(sc);
- netisr_dispatch(isr, m);
+ netisr_queue(isr, m);
return (1); /* packet is done, no further processing needed */
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list