lkml.org 
[lkml]   [2012]   [Jan]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [Patch] lkdtm: avoid calling lkdtm_do_action() with spin lock held
On 01/31/2012 04:54 AM, Andrew Morton wrote:
>
> lkdtm_handler() can be called from module IRQ handlers, so perhaps the
> same problems can still happen. The patch does improve things though ;)
>

Yeah, what do you think about patch below (untested)?

---

Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c
index 28adefe..5cbd740 100644
--- a/drivers/misc/lkdtm.c
+++ b/drivers/misc/lkdtm.c
@@ -315,7 +315,7 @@ static void lkdtm_do_action(enum ctype which)
}
case CT_OVERWRITE_ALLOCATION: {
size_t len = 1020;
- u32 *data = kmalloc(len, GFP_KERNEL);
+ u32 *data = kmalloc(len, GFP_ATOMIC);

data[1024 / sizeof(u32)] = 0x12345678;
kfree(data);
@@ -323,14 +323,16 @@ static void lkdtm_do_action(enum ctype which)
}
case CT_WRITE_AFTER_FREE: {
size_t len = 1024;
- u32 *data = kmalloc(len, GFP_KERNEL);
+ u32 *data = kmalloc(len, GFP_ATOMIC);

kfree(data);
- schedule();
+ udelay(100);
memset(data, 0x78, len);
break;
}
case CT_SOFTLOCKUP:
+ if (in_interrupt())
+ break;
preempt_disable();
for (;;)
cpu_relax();
@@ -341,6 +343,8 @@ static void lkdtm_do_action(enum ctype which)
cpu_relax();
break;
case CT_HUNG_TASK:
+ if (in_interrupt())
+ break;
set_current_state(TASK_UNINTERRUPTIBLE);
schedule();
break;
\
 
 \ /
  Last update: 2012-01-31 14:27    [W:0.050 / U:0.924 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site