Skip to content

Commit 93f7a6d

Browse files
b49020Daniel Thompson
authored andcommitted
kdb: Make memory allocations more robust
Currently kdb uses in_interrupt() to determine whether its library code has been called from the kgdb trap handler or from a saner calling context such as driver init. This approach is broken because in_interrupt() alone isn't able to determine kgdb trap handler entry from normal task context. This can happen during normal use of basic features such as breakpoints and can also be trivially reproduced using: echo g > /proc/sysrq-trigger We can improve this by adding check for in_dbg_master() instead which explicitly determines if we are running in debugger context. Cc: stable@vger.kernel.org Signed-off-by: Sumit Garg <sumit.garg@linaro.org> Link: https://lore.kernel.org/r/1611313556-4004-1-git-send-email-sumit.garg@linaro.org Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
1 parent 0759d80 commit 93f7a6d

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

kernel/debug/kdb/kdb_private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ extern struct task_struct *kdb_curr_task(int);
230230

231231
#define kdb_task_has_cpu(p) (task_curr(p))
232232

233-
#define GFP_KDB (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL)
233+
#define GFP_KDB (in_dbg_master() ? GFP_ATOMIC : GFP_KERNEL)
234234

235235
extern void *debug_kmalloc(size_t size, gfp_t flags);
236236
extern void debug_kfree(void *);

0 commit comments

Comments
 (0)