mirror of https://github.com/torvalds/linux.git
Iff the parent has TIF_DEBUG set, _and_ clone_flags includes CLONE_PTRACE we should set the TIF_DEBUG flag for the child and increment the ocd refcount. Otherwise, the TIF_DEBUG flag must be unset. Currently, the child inherits TIF_DEBUG from the parent before copy_thread is called, so TIF_DEBUG may be already be set before we determine whether the child is supposed to inherit debugging capabilities from the parent or not. This means that ocd_enable() won't increment the refcount, because TIF_DEBUG is already set, and that TIF_DEBUG will be set for processes that aren't being debugged. This leads to a refcounting asymmetry, which may show up as ------------[ cut here ]------------ Badness at arch/avr32/kernel/ocd.c:73 PC is at ocd_disable+0x34/0x60 LR is at put_lock_stats+0xa/0x20 as reported by David Brownell. Happens when strace'ing a process that forks a new child process, e.g. "strace mount -tjffs2 mtd1 /mnt", and subsequently killing the child process (e.g. "umount /mnt".) Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com> |
||
|---|---|---|
| .. | ||
| Makefile | ||
| asm-offsets.c | ||
| avr32_ksyms.c | ||
| cpu.c | ||
| entry-avr32b.S | ||
| head.S | ||
| init_task.c | ||
| irq.c | ||
| kprobes.c | ||
| module.c | ||
| nmi_debug.c | ||
| ocd.c | ||
| process.c | ||
| ptrace.c | ||
| semaphore.c | ||
| setup.c | ||
| signal.c | ||
| stacktrace.c | ||
| switch_to.S | ||
| sys_avr32.c | ||
| syscall-stubs.S | ||
| syscall_table.S | ||
| time.c | ||
| traps.c | ||
| vmlinux.lds.S | ||