|
@@ -109,10 +109,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
|
|
{
|
|
{
|
|
siginfo_t info;
|
|
siginfo_t info;
|
|
|
|
|
|
|
|
+ down_read(¤t->mm->mmap_sem);
|
|
if (find_vma(current->mm, addr) == NULL)
|
|
if (find_vma(current->mm, addr) == NULL)
|
|
info.si_code = SEGV_MAPERR;
|
|
info.si_code = SEGV_MAPERR;
|
|
else
|
|
else
|
|
info.si_code = SEGV_ACCERR;
|
|
info.si_code = SEGV_ACCERR;
|
|
|
|
+ up_read(¤t->mm->mmap_sem);
|
|
|
|
|
|
info.si_signo = SIGSEGV;
|
|
info.si_signo = SIGSEGV;
|
|
info.si_errno = 0;
|
|
info.si_errno = 0;
|