aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.debug5
-rw-r--r--lib/checksum.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 23067ab1a73c..4c32b1a1a06e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -340,8 +340,6 @@ config DEBUG_KMEMLEAK
340 bool "Kernel memory leak detector" 340 bool "Kernel memory leak detector"
341 depends on DEBUG_KERNEL && EXPERIMENTAL && (X86 || ARM) && \ 341 depends on DEBUG_KERNEL && EXPERIMENTAL && (X86 || ARM) && \
342 !MEMORY_HOTPLUG 342 !MEMORY_HOTPLUG
343 select DEBUG_SLAB if SLAB
344 select SLUB_DEBUG if SLUB
345 select DEBUG_FS if SYSFS 343 select DEBUG_FS if SYSFS
346 select STACKTRACE if STACKTRACE_SUPPORT 344 select STACKTRACE if STACKTRACE_SUPPORT
347 select KALLSYMS 345 select KALLSYMS
@@ -355,6 +353,9 @@ config DEBUG_KMEMLEAK
355 allocations. See Documentation/kmemleak.txt for more 353 allocations. See Documentation/kmemleak.txt for more
356 details. 354 details.
357 355
356 Enabling DEBUG_SLAB or SLUB_DEBUG may increase the chances
357 of finding leaks due to the slab objects poisoning.
358
358 In order to access the kmemleak file, debugfs needs to be 359 In order to access the kmemleak file, debugfs needs to be
359 mounted (usually at /sys/kernel/debug). 360 mounted (usually at /sys/kernel/debug).
360 361
diff --git a/lib/checksum.c b/lib/checksum.c
index 12e5a1c91cda..b2e2fd468461 100644
--- a/lib/checksum.c
+++ b/lib/checksum.c
@@ -55,7 +55,11 @@ static unsigned int do_csum(const unsigned char *buff, int len)
55 goto out; 55 goto out;
56 odd = 1 & (unsigned long) buff; 56 odd = 1 & (unsigned long) buff;
57 if (odd) { 57 if (odd) {
58#ifdef __LITTLE_ENDIAN
58 result = *buff; 59 result = *buff;
60#else
61 result += (*buff << 8);
62#endif
59 len--; 63 len--;
60 buff++; 64 buff++;
61 } 65 }
@@ -71,7 +75,7 @@ static unsigned int do_csum(const unsigned char *buff, int len)
71 if (count) { 75 if (count) {
72 unsigned long carry = 0; 76 unsigned long carry = 0;
73 do { 77 do {
74 unsigned long w = *(unsigned long *) buff; 78 unsigned long w = *(unsigned int *) buff;
75 count--; 79 count--;
76 buff += 4; 80 buff += 4;
77 result += carry; 81 result += carry;
@@ -87,7 +91,11 @@ static unsigned int do_csum(const unsigned char *buff, int len)
87 } 91 }
88 } 92 }
89 if (len & 1) 93 if (len & 1)
94#ifdef __LITTLE_ENDIAN
95 result += *buff;
96#else
90 result += (*buff << 8); 97 result += (*buff << 8);
98#endif
91 result = from32to16(result); 99 result = from32to16(result);
92 if (odd) 100 if (odd)
93 result = ((result >> 8) & 0xff) | ((result & 0xff) << 8); 101 result = ((result >> 8) & 0xff) | ((result & 0xff) << 8);