diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2016-10-11 16:55:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-11 18:06:33 -0400 |
commit | 9099daed9c6991a512c1f74b92ec49daf9408cda (patch) | |
tree | 9ebac94f168a0d5d843b715c1d19708d12a1c8c0 /Documentation/dev-tools | |
parent | 0549a3c02efb350776bc869685a361045efd3a29 (diff) |
mm: kmemleak: avoid using __va() on addresses that don't have a lowmem mapping
Some of the kmemleak_*() callbacks in memblock, bootmem, CMA convert a
physical address to a virtual one using __va(). However, such physical
addresses may sometimes be located in highmem and using __va() is
incorrect, leading to inconsistent object tracking in kmemleak.
The following functions have been added to the kmemleak API and they take
a physical address as the object pointer. They only perform the
corresponding action if the address has a lowmem mapping:
kmemleak_alloc_phys
kmemleak_free_part_phys
kmemleak_not_leak_phys
kmemleak_ignore_phys
The affected calling places have been updated to use the new kmemleak
API.
Link: http://lkml.kernel.org/r/1471531432-16503-1-git-send-email-catalin.marinas@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Reported-by: Vignesh R <vigneshr@ti.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/dev-tools')
-rw-r--r-- | Documentation/dev-tools/kmemleak.rst | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Documentation/dev-tools/kmemleak.rst b/Documentation/dev-tools/kmemleak.rst index 1788722d5495..b2391b829169 100644 --- a/Documentation/dev-tools/kmemleak.rst +++ b/Documentation/dev-tools/kmemleak.rst | |||
@@ -162,6 +162,15 @@ See the include/linux/kmemleak.h header for the functions prototype. | |||
162 | - ``kmemleak_alloc_recursive`` - as kmemleak_alloc but checks the recursiveness | 162 | - ``kmemleak_alloc_recursive`` - as kmemleak_alloc but checks the recursiveness |
163 | - ``kmemleak_free_recursive`` - as kmemleak_free but checks the recursiveness | 163 | - ``kmemleak_free_recursive`` - as kmemleak_free but checks the recursiveness |
164 | 164 | ||
165 | The following functions take a physical address as the object pointer | ||
166 | and only perform the corresponding action if the address has a lowmem | ||
167 | mapping: | ||
168 | |||
169 | - ``kmemleak_alloc_phys`` | ||
170 | - ``kmemleak_free_part_phys`` | ||
171 | - ``kmemleak_not_leak_phys`` | ||
172 | - ``kmemleak_ignore_phys`` | ||
173 | |||
165 | Dealing with false positives/negatives | 174 | Dealing with false positives/negatives |
166 | -------------------------------------- | 175 | -------------------------------------- |
167 | 176 | ||