public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ipt_TOS fix.
@ 2001-01-29  7:55 Rusty Russell
  0 siblings, 0 replies; only message in thread
From: Rusty Russell @ 2001-01-29  7:55 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel, netfilter

Linus, please apply v2.4.0.

ipt_TOS checksum calculations were completely broken, causing bad csum
packets.  Whoever implemented it didn't understand the code it was
copied from.

This fixes the problem (tested in userspace against all TOS changes).

Rusty.
--
Premature optmztion is rt of all evl. --DK

diff -urN -I \$.*\$ -X /tmp/kerndiff.ZtZl97 --minimal linux-2.4.0-official/net/ipv4/netfilter/ipt_TOS.c working-2.4.0/net/ipv4/netfilter/ipt_TOS.c
--- linux-2.4.0-official/net/ipv4/netfilter/ipt_TOS.c	Fri Apr 28 08:43:15 2000
+++ working-2.4.0/net/ipv4/netfilter/ipt_TOS.c	Mon Jan 29 18:40:37 2001
@@ -19,11 +19,11 @@
 	const struct ipt_tos_target_info *tosinfo = targinfo;
 
 	if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) {
-		u_int8_t diffs[2];
+		u_int16_t diffs[2];
 
-		diffs[0] = iph->tos;
+		diffs[0] = htons(iph->tos) ^ 0xFFFF;
 		iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos;
-		diffs[1] = iph->tos;
+		diffs[1] = htons(iph->tos);
 		iph->check = csum_fold(csum_partial((char *)diffs,
 		                                    sizeof(diffs),
 		                                    iph->check^0xFFFF));
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-01-29  7:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-01-29  7:55 [PATCH] ipt_TOS fix Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox