summaryrefslogtreecommitdiffstats
path: root/main/libnet/libnet-1.1.2.1-fix-chksum.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/libnet/libnet-1.1.2.1-fix-chksum.patch')
-rw-r--r--main/libnet/libnet-1.1.2.1-fix-chksum.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/main/libnet/libnet-1.1.2.1-fix-chksum.patch b/main/libnet/libnet-1.1.2.1-fix-chksum.patch
new file mode 100644
index 000000000..e6f9bbc6d
--- /dev/null
+++ b/main/libnet/libnet-1.1.2.1-fix-chksum.patch
@@ -0,0 +1,27 @@
+Fix a bug in chksum calculation for odd sized UDP packets.
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=284729
+
+--- libnet-1.1.2.1/src/libnet_checksum.c
++++ libnet-1.1.2.1/src/libnet_checksum.c
+@@ -42,8 +42,10 @@
+ libnet_in_cksum(u_int16_t *addr, int len)
+ {
+ int sum;
++ u_int16_t last_byte;
+
+ sum = 0;
++ last_byte = 0;
+
+ while (len > 1)
+ {
+@@ -52,7 +54,8 @@
+ }
+ if (len == 1)
+ {
+- sum += *(u_int16_t *)addr;
++ *(u_int8_t*)&last_byte = *(u_int8_t*)addr;
++ sum += last_byte;
+ }
+
+ return (sum);