Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F156832467
D1388.id2902.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D1388.id2902.diff
View Options
Index: sys/netinet6/frag6.c
===================================================================
--- sys/netinet6/frag6.c
+++ sys/netinet6/frag6.c
@@ -63,7 +63,7 @@
static void frag6_deq(struct ip6asfrag *);
static void frag6_insque(struct ip6q *, struct ip6q *);
static void frag6_remque(struct ip6q *);
-static void frag6_freef(struct ip6q *);
+static void frag6_freef(struct ip6q *, int);
static struct mtx ip6qlock;
/*
@@ -159,7 +159,7 @@
int fragoff, frgpartlen; /* must be larger than u_int16_t */
struct ifnet *dstifp;
u_int8_t ecn, ecn0;
-#if 0
+#if 1
char ip6buf[INET6_ADDRSTRLEN];
#endif
@@ -453,24 +453,26 @@
i = af6->ip6af_up->ip6af_off + af6->ip6af_up->ip6af_frglen
- ip6af->ip6af_off;
if (i > 0) {
-#if 0 /* suppress the noisy log */
+#if 1 /* suppress the noisy log */
log(LOG_ERR, "%d bytes of a fragment from %s "
"overlaps the previous fragment\n",
i, ip6_sprintf(ip6buf, &q6->ip6q_src));
#endif
free(ip6af, M_FTABLE);
+ frag6_freef(q6, 0);
goto dropfrag;
}
}
if (af6 != (struct ip6asfrag *)q6) {
i = (ip6af->ip6af_off + ip6af->ip6af_frglen) - af6->ip6af_off;
if (i > 0) {
-#if 0 /* suppress the noisy log */
+#if 1 /* suppress the noisy log */
log(LOG_ERR, "%d bytes of a fragment from %s "
"overlaps the succeeding fragment",
i, ip6_sprintf(ip6buf, &q6->ip6q_src));
#endif
free(ip6af, M_FTABLE);
+ frag6_freef(q6, 0);
goto dropfrag;
}
}
@@ -603,7 +605,7 @@
* associated datagrams.
*/
void
-frag6_freef(struct ip6q *q6)
+frag6_freef(struct ip6q *q6, int sendicmp)
{
struct ip6asfrag *af6, *down6;
@@ -620,7 +622,7 @@
* Return ICMP time exceeded error for the 1st fragment.
* Just free other fragments.
*/
- if (af6->ip6af_off == 0) {
+ if (af6->ip6af_off == 0 && sendicmp == 1) {
struct ip6_hdr *ip6;
/* adjust pointer */
@@ -719,7 +721,7 @@
if (q6->ip6q_prev->ip6q_ttl == 0) {
IP6STAT_INC(ip6s_fragtimeout);
/* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
- frag6_freef(q6->ip6q_prev);
+ frag6_freef(q6->ip6q_prev, 1);
}
}
/*
@@ -731,7 +733,7 @@
V_ip6q.ip6q_prev) {
IP6STAT_INC(ip6s_fragoverflow);
/* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
- frag6_freef(V_ip6q.ip6q_prev);
+ frag6_freef(V_ip6q.ip6q_prev, 1);
}
CURVNET_RESTORE();
}
@@ -757,7 +759,7 @@
while (V_ip6q.ip6q_next != &V_ip6q) {
IP6STAT_INC(ip6s_fragdropped);
/* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
- frag6_freef(V_ip6q.ip6q_next);
+ frag6_freef(V_ip6q.ip6q_next, 1);
}
CURVNET_RESTORE();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, May 17, 7:04 PM (20 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33203706
Default Alt Text
D1388.id2902.diff (2 KB)
Attached To
Mode
D1388: IP6: Turned on verbose logging for fragment handling code
Attached
Detach File
Event Timeline
Log In to Comment