* [PATCH V2 1/4] mm/kasan: Rename kasan_enabled to kasan_report_enabled
@ 2015-09-07 8:28 Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Aneesh Kumar K.V @ 2015-09-07 8:28 UTC (permalink / raw)
To: akpm, ryabinin.a.a; +Cc: linux-mm, linux-kernel, Aneesh Kumar K.V
The function only disable/enable reporting. In the later patch
we will be adding a kasan early enable/disable. Rename kasan_enabled
to properly reflect its function.
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
mm/kasan/kasan.h | 2 +-
mm/kasan/report.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h
index c242adf6bc85..a6b46cc94907 100644
--- a/mm/kasan/kasan.h
+++ b/mm/kasan/kasan.h
@@ -63,7 +63,7 @@ static inline const void *kasan_shadow_to_mem(const void *shadow_addr)
<< KASAN_SHADOW_SCALE_SHIFT);
}
-static inline bool kasan_enabled(void)
+static inline bool kasan_report_enabled(void)
{
return !current->kasan_depth;
}
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index e07c94fbd0ac..6c3f82b0240b 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -220,7 +220,7 @@ void kasan_report(unsigned long addr, size_t size,
{
struct kasan_access_info info;
- if (likely(!kasan_enabled()))
+ if (likely(!kasan_report_enabled()))
return;
info.access_addr = (void *)addr;
--
2.5.0
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs
2015-09-07 8:28 [PATCH V2 1/4] mm/kasan: Rename kasan_enabled to kasan_report_enabled Aneesh Kumar K.V
@ 2015-09-07 8:28 ` Aneesh Kumar K.V
2015-09-08 12:45 ` Andrey Ryabinin
2015-09-07 8:28 ` [PATCH V2 3/4] mm/kasan: Don't use kasan shadow pointer in generic functions Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 4/4] mm/kasan: Prevent deadlock in kasan reporting Aneesh Kumar K.V
2 siblings, 1 reply; 5+ messages in thread
From: Aneesh Kumar K.V @ 2015-09-07 8:28 UTC (permalink / raw)
To: akpm, ryabinin.a.a; +Cc: linux-mm, linux-kernel, Aneesh Kumar K.V
Use is_module_address instead
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
mm/kasan/report.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index 6c3f82b0240b..d269f2087faf 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -22,6 +22,7 @@
#include <linux/string.h>
#include <linux/types.h>
#include <linux/kasan.h>
+#include <linux/module.h>
#include <asm/sections.h>
@@ -85,9 +86,11 @@ static void print_error_description(struct kasan_access_info *info)
static inline bool kernel_or_module_addr(const void *addr)
{
- return (addr >= (void *)_stext && addr < (void *)_end)
- || (addr >= (void *)MODULES_VADDR
- && addr < (void *)MODULES_END);
+ if (addr >= (void *)_stext && addr < (void *)_end)
+ return true;
+ if (is_module_address((unsigned long)addr))
+ return true;
+ return false;
}
static inline bool init_task_stack_addr(const void *addr)
--
2.5.0
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH V2 3/4] mm/kasan: Don't use kasan shadow pointer in generic functions
2015-09-07 8:28 [PATCH V2 1/4] mm/kasan: Rename kasan_enabled to kasan_report_enabled Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
@ 2015-09-07 8:28 ` Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 4/4] mm/kasan: Prevent deadlock in kasan reporting Aneesh Kumar K.V
2 siblings, 0 replies; 5+ messages in thread
From: Aneesh Kumar K.V @ 2015-09-07 8:28 UTC (permalink / raw)
To: akpm, ryabinin.a.a; +Cc: linux-mm, linux-kernel, Aneesh Kumar K.V
We can't use generic functions like print_hex_dump to access kasan
shadow region. This require us to setup another kasan shadow region
for the address passed (kasan shadow address). Some architectures won't
be able to do that. Hence make a copy of the shadow region row and
pass that to generic functions.
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
mm/kasan/report.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index d269f2087faf..c5367089703c 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -164,14 +164,20 @@ static void print_shadow_for_address(const void *addr)
for (i = -SHADOW_ROWS_AROUND_ADDR; i <= SHADOW_ROWS_AROUND_ADDR; i++) {
const void *kaddr = kasan_shadow_to_mem(shadow_row);
char buffer[4 + (BITS_PER_LONG/8)*2];
+ char shadow_buf[SHADOW_BYTES_PER_ROW];
snprintf(buffer, sizeof(buffer),
(i == 0) ? ">%p: " : " %p: ", kaddr);
-
+ /*
+ * We should not pass a shadow pointer to generic
+ * function, because generic functions may try to
+ * access kasan mapping for the passed address.
+ */
kasan_disable_current();
+ memcpy(shadow_buf, shadow_row, SHADOW_BYTES_PER_ROW);
print_hex_dump(KERN_ERR, buffer,
DUMP_PREFIX_NONE, SHADOW_BYTES_PER_ROW, 1,
- shadow_row, SHADOW_BYTES_PER_ROW, 0);
+ shadow_buf, SHADOW_BYTES_PER_ROW, 0);
kasan_enable_current();
if (row_is_guilty(shadow_row, shadow))
--
2.5.0
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH V2 4/4] mm/kasan: Prevent deadlock in kasan reporting
2015-09-07 8:28 [PATCH V2 1/4] mm/kasan: Rename kasan_enabled to kasan_report_enabled Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 3/4] mm/kasan: Don't use kasan shadow pointer in generic functions Aneesh Kumar K.V
@ 2015-09-07 8:28 ` Aneesh Kumar K.V
2 siblings, 0 replies; 5+ messages in thread
From: Aneesh Kumar K.V @ 2015-09-07 8:28 UTC (permalink / raw)
To: akpm, ryabinin.a.a; +Cc: linux-mm, linux-kernel, Aneesh Kumar K.V
When we end up calling kasan_report in real mode, our shadow mapping
for the spinlock variable will show poisoned. This will result
in us calling kasan_report_error with lock_report spin lock held.
To prevent this disable kasan reporting when we are priting
error w.r.t kasan.
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
mm/kasan/report.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index c5367089703c..7833f074ede8 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -173,12 +173,10 @@ static void print_shadow_for_address(const void *addr)
* function, because generic functions may try to
* access kasan mapping for the passed address.
*/
- kasan_disable_current();
memcpy(shadow_buf, shadow_row, SHADOW_BYTES_PER_ROW);
print_hex_dump(KERN_ERR, buffer,
DUMP_PREFIX_NONE, SHADOW_BYTES_PER_ROW, 1,
shadow_buf, SHADOW_BYTES_PER_ROW, 0);
- kasan_enable_current();
if (row_is_guilty(shadow_row, shadow))
pr_err("%*c\n",
@@ -195,6 +193,10 @@ void kasan_report_error(struct kasan_access_info *info)
{
unsigned long flags;
+ /*
+ * Make sure we don't end up in loop.
+ */
+ kasan_disable_current();
spin_lock_irqsave(&report_lock, flags);
pr_err("================================="
"=================================\n");
@@ -204,12 +206,17 @@ void kasan_report_error(struct kasan_access_info *info)
pr_err("================================="
"=================================\n");
spin_unlock_irqrestore(&report_lock, flags);
+ kasan_enable_current();
}
void kasan_report_user_access(struct kasan_access_info *info)
{
unsigned long flags;
+ /*
+ * Make sure we don't end up in loop.
+ */
+ kasan_disable_current();
spin_lock_irqsave(&report_lock, flags);
pr_err("================================="
"=================================\n");
@@ -222,6 +229,7 @@ void kasan_report_user_access(struct kasan_access_info *info)
pr_err("================================="
"=================================\n");
spin_unlock_irqrestore(&report_lock, flags);
+ kasan_enable_current();
}
void kasan_report(unsigned long addr, size_t size,
--
2.5.0
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs
2015-09-07 8:28 ` [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
@ 2015-09-08 12:45 ` Andrey Ryabinin
0 siblings, 0 replies; 5+ messages in thread
From: Andrey Ryabinin @ 2015-09-08 12:45 UTC (permalink / raw)
To: Aneesh Kumar K.V, akpm; +Cc: linux-mm, linux-kernel
On 09/07/2015 11:28 AM, Aneesh Kumar K.V wrote:
> Use is_module_address instead
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-09-08 12:45 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-07 8:28 [PATCH V2 1/4] mm/kasan: Rename kasan_enabled to kasan_report_enabled Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 2/4] mm/kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
2015-09-08 12:45 ` Andrey Ryabinin
2015-09-07 8:28 ` [PATCH V2 3/4] mm/kasan: Don't use kasan shadow pointer in generic functions Aneesh Kumar K.V
2015-09-07 8:28 ` [PATCH V2 4/4] mm/kasan: Prevent deadlock in kasan reporting Aneesh Kumar K.V
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).