* [PATCH] missing ->mmap_sem around find_vma() in swp_emulate.c
@ 2012-12-16 0:25 Al Viro
2012-12-20 7:15 ` Dirk Behme
0 siblings, 1 reply; 3+ messages in thread
From: Al Viro @ 2012-12-16 0:25 UTC (permalink / raw)
To: linux-arm-kernel
find_vma() is *not* safe when somebody else is removing vmas. Not just
the return value might get bogus just as you are getting it (this instance
doesn't try to dereference the resulting vma), the search itself can get
buggered in rather spectacular ways. IOW, ->mmap_sem really, really is
not optional here.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c
index df74518..ab1017b 100644
--- a/arch/arm/kernel/swp_emulate.c
+++ b/arch/arm/kernel/swp_emulate.c
@@ -109,10 +109,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
{
siginfo_t info;
+ down_read(¤t->mm->mmap_sem);
if (find_vma(current->mm, addr) == NULL)
info.si_code = SEGV_MAPERR;
else
info.si_code = SEGV_ACCERR;
+ up_read(¤t->mm->mmap_sem);
info.si_signo = SIGSEGV;
info.si_errno = 0;
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] missing ->mmap_sem around find_vma() in swp_emulate.c
2012-12-16 0:25 [PATCH] missing ->mmap_sem around find_vma() in swp_emulate.c Al Viro
@ 2012-12-20 7:15 ` Dirk Behme
2012-12-20 10:03 ` Russell King - ARM Linux
0 siblings, 1 reply; 3+ messages in thread
From: Dirk Behme @ 2012-12-20 7:15 UTC (permalink / raw)
To: linux-arm-kernel
Am 16.12.2012 01:25, schrieb Al Viro:
> find_vma() is *not* safe when somebody else is removing vmas. Not just
> the return value might get bogus just as you are getting it (this instance
> doesn't try to dereference the resulting vma), the search itself can get
> buggered in rather spectacular ways. IOW, ->mmap_sem really, really is
> not optional here.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
> diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c
> index df74518..ab1017b 100644
> --- a/arch/arm/kernel/swp_emulate.c
> +++ b/arch/arm/kernel/swp_emulate.c
> @@ -109,10 +109,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
> {
> siginfo_t info;
>
> + down_read(¤t->mm->mmap_sem);
> if (find_vma(current->mm, addr) == NULL)
> info.si_code = SEGV_MAPERR;
> else
> info.si_code = SEGV_ACCERR;
> + up_read(¤t->mm->mmap_sem);
>
> info.si_signo = SIGSEGV;
> info.si_errno = 0;
Any comment on this?
Thanks
Dirk
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] missing ->mmap_sem around find_vma() in swp_emulate.c
2012-12-20 7:15 ` Dirk Behme
@ 2012-12-20 10:03 ` Russell King - ARM Linux
0 siblings, 0 replies; 3+ messages in thread
From: Russell King - ARM Linux @ 2012-12-20 10:03 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Dec 20, 2012 at 08:15:47AM +0100, Dirk Behme wrote:
> Am 16.12.2012 01:25, schrieb Al Viro:
>> find_vma() is *not* safe when somebody else is removing vmas. Not just
>> the return value might get bogus just as you are getting it (this instance
>> doesn't try to dereference the resulting vma), the search itself can get
>> buggered in rather spectacular ways. IOW, ->mmap_sem really, really is
>> not optional here.
>>
>> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
>> ---
>> diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c
>> index df74518..ab1017b 100644
>> --- a/arch/arm/kernel/swp_emulate.c
>> +++ b/arch/arm/kernel/swp_emulate.c
>> @@ -109,10 +109,12 @@ static void set_segfault(struct pt_regs *regs, unsigned long addr)
>> {
>> siginfo_t info;
>>
>> + down_read(¤t->mm->mmap_sem);
>> if (find_vma(current->mm, addr) == NULL)
>> info.si_code = SEGV_MAPERR;
>> else
>> info.si_code = SEGV_ACCERR;
>> + up_read(¤t->mm->mmap_sem);
>>
>> info.si_signo = SIGSEGV;
>> info.si_errno = 0;
>
> Any comment on this?
Any comment required on this? No, it's from Al Viro, which means it's
(mostly) always correct. I'll look at merging it soon.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-12-20 10:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-16 0:25 [PATCH] missing ->mmap_sem around find_vma() in swp_emulate.c Al Viro
2012-12-20 7:15 ` Dirk Behme
2012-12-20 10:03 ` Russell King - ARM Linux
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).