diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Kconfig.debug | 5 | ||||
| -rw-r--r-- | lib/checksum.c | 10 |
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); |
