From: Patrick McHardy <kaber@trash.net>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Netfilter Development Mailinglist <netfilter-devel@lists.netfilter.org>
Subject: [PATCH NFSIM]: Fix invalid IP checksums on 64bit
Date: Thu, 06 Jan 2005 15:29:59 +0100 [thread overview]
Message-ID: <41DD4B67.6010205@trash.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 246 bytes --]
IP checksums are calculated wrong on 64 bit because too large types are
used.
This patch fixes them and a couple of unrelated snprintf-sizeof-warnings
in the
same file. I still get invalid TCP checksums, but couldn't locate the
problem yet.
[-- Attachment #2: 4.diff --]
[-- Type: text/x-patch, Size: 1537 bytes --]
Index: core/ipv4/ipv4.c
===================================================================
--- core/ipv4/ipv4.c (revision 3578)
+++ core/ipv4/ipv4.c (working copy)
@@ -565,7 +565,7 @@
iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
}
-static inline unsigned short from32to16(unsigned long x)
+static inline unsigned short from32to16(unsigned int x)
{
/* add up 16-bit and 16-bit for 16+c bit */
x = (x & 0xffff) + (x >> 16);
@@ -574,10 +574,10 @@
return x;
}
-static unsigned long do_csum(const unsigned char * buff, int len)
+static unsigned int do_csum(const unsigned char * buff, int len)
{
int odd, count;
- unsigned long result = 0;
+ unsigned int result = 0;
if (len <= 0)
return 0;
@@ -819,7 +819,7 @@
switch (iph->protocol) {
case IPPROTO_ICMP:
icmph = (struct icmphdr *)(iph + 1);
- ptr += sprintf(ptr, "%u %u ",
+ ptr += sprintf(ptr, "%Zu %u ",
iplen - sizeof(struct icmphdr), iph->protocol);
if (len < sizeof(struct icmphdr)) {
@@ -855,7 +855,7 @@
case IPPROTO_UDP:
udph = (struct udphdr *)(iph + 1);
- ptr += sprintf(ptr, "%u %u ",
+ ptr += sprintf(ptr, "%Zu %u ",
iplen - sizeof(struct udphdr), iph->protocol);
if (len < sizeof(struct udphdr)) {
@@ -891,7 +891,7 @@
tcph = (struct tcphdr *)(iph + 1);
if (len < sizeof(struct tcphdr)) {
/* Assume no tcp options... */
- ptr += sprintf(ptr, "%u %u ",
+ ptr += sprintf(ptr, "%Zu %u ",
iplen - sizeof(*tcph), iph->protocol);
ptr += sprintf(ptr, "-TRUNCATED-");
next reply other threads:[~2005-01-06 14:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-06 14:29 Patrick McHardy [this message]
2005-01-07 1:25 ` [PATCH NFSIM]: Fix invalid IP checksums on 64bit Patrick McHardy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41DD4B67.6010205@trash.net \
--to=kaber@trash.net \
--cc=netfilter-devel@lists.netfilter.org \
--cc=rusty@rustcorp.com.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.