[PATCH 15/19] perf: Fix perf_mmap() failure path

Peter Zijlstra posted 19 patches 1 year, 3 months ago
There is a newer version of this series
[PATCH 15/19] perf: Fix perf_mmap() failure path
Posted by Peter Zijlstra 1 year, 3 months ago
When f_ops->mmap() returns failure, m_ops->close() is *not* called.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 kernel/events/core.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6830,7 +6830,7 @@ static int perf_mmap(struct file *file,
 	vm_flags_set(vma, VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP);
 	vma->vm_ops = &perf_mmap_vmops;
 
-	if (event->pmu->event_mapped)
+	if (!ret && event->pmu->event_mapped)
 		event->pmu->event_mapped(event, vma->vm_mm);
 
 	return ret;
Re: [PATCH 15/19] perf: Fix perf_mmap() failure path
Posted by Ingo Molnar 11 months, 2 weeks ago
* Peter Zijlstra <peterz@infradead.org> wrote:

> When f_ops->mmap() returns failure, m_ops->close() is *not* called.
> 
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
>  kernel/events/core.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -6830,7 +6830,7 @@ static int perf_mmap(struct file *file,
>  	vm_flags_set(vma, VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP);
>  	vma->vm_ops = &perf_mmap_vmops;
>  
> -	if (event->pmu->event_mapped)
> +	if (!ret && event->pmu->event_mapped)
>  		event->pmu->event_mapped(event, vma->vm_mm);
>  
>  	return ret;

I'm wondering whether this fix is still relevant in context of this 
recent commit:

   b709eb872e19 perf: map pages in advance

Thanks,

	Ingo
Re: [PATCH 15/19] perf: Fix perf_mmap() failure path
Posted by Lorenzo Stoakes 11 months, 1 week ago
On Sat, Mar 01, 2025 at 08:17:02PM +0100, Ingo Molnar wrote:
>
> * Peter Zijlstra <peterz@infradead.org> wrote:
>
> > When f_ops->mmap() returns failure, m_ops->close() is *not* called.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> > ---
> >  kernel/events/core.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > --- a/kernel/events/core.c
> > +++ b/kernel/events/core.c
> > @@ -6830,7 +6830,7 @@ static int perf_mmap(struct file *file,
> >  	vm_flags_set(vma, VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP);
> >  	vma->vm_ops = &perf_mmap_vmops;
> >
> > -	if (event->pmu->event_mapped)
> > +	if (!ret && event->pmu->event_mapped)
> >  		event->pmu->event_mapped(event, vma->vm_mm);
> >
> >  	return ret;
>
> I'm wondering whether this fix is still relevant in context of this
> recent commit:
>
>    b709eb872e19 perf: map pages in advance

Yeah this is, as perf_mmap() will still be triggered by the mmap code when
this is mmap'd, all we do is essentially prefault the pages at this point
also.

>
> Thanks,
>
> 	Ingo
[tip: perf/core] perf/core: Fix perf_mmap() failure path
Posted by tip-bot2 for Peter Zijlstra 11 months, 1 week ago
The following commit has been merged into the perf/core branch of tip:

Commit-ID:     66477c7230eb1f9b90deb8c0f4da2bac2053c329
Gitweb:        https://git.kernel.org/tip/66477c7230eb1f9b90deb8c0f4da2bac2053c329
Author:        Peter Zijlstra <peterz@infradead.org>
AuthorDate:    Mon, 04 Nov 2024 14:39:24 +01:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Tue, 04 Mar 2025 09:43:26 +01:00

perf/core: Fix perf_mmap() failure path

When f_ops->mmap() returns failure, m_ops->close() is *not* called.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: Ravi Bangoria <ravi.bangoria@amd.com>
Link: https://lore.kernel.org/r/20241104135519.248358497@infradead.org
---
 kernel/events/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 8b2a8c3..b2334d2 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6903,7 +6903,7 @@ aux_unlock:
 	if (!ret)
 		ret = map_range(rb, vma);
 
-	if (event->pmu->event_mapped)
+	if (!ret && event->pmu->event_mapped)
 		event->pmu->event_mapped(event, vma->vm_mm);
 
 	return ret;
[tip: perf/core] perf/core: Fix perf_mmap() failure path
Posted by tip-bot2 for Peter Zijlstra 11 months, 1 week ago
The following commit has been merged into the perf/core branch of tip:

Commit-ID:     bfd33e88addda078a089657044945858a33c435e
Gitweb:        https://git.kernel.org/tip/bfd33e88addda078a089657044945858a33c435e
Author:        Peter Zijlstra <peterz@infradead.org>
AuthorDate:    Mon, 04 Nov 2024 14:39:24 +01:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Tue, 04 Mar 2025 09:39:04 +01:00

perf/core: Fix perf_mmap() failure path

When f_ops->mmap() returns failure, m_ops->close() is *not* called.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Link: https://lore.kernel.org/r/20241104135519.248358497@infradead.org
---
 kernel/events/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 8b2a8c3..b2334d2 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6903,7 +6903,7 @@ aux_unlock:
 	if (!ret)
 		ret = map_range(rb, vma);
 
-	if (event->pmu->event_mapped)
+	if (!ret && event->pmu->event_mapped)
 		event->pmu->event_mapped(event, vma->vm_mm);
 
 	return ret;