* [PATCH] rtla: fix double free
@ 2022-07-25 13:10 Andreas Schwab
2022-07-25 13:34 ` Daniel Bristot de Oliveira
0 siblings, 1 reply; 8+ messages in thread
From: Andreas Schwab @ 2022-07-25 13:10 UTC (permalink / raw)
To: Daniel Bristot de Oliveira
Cc: Steven Rostedt, linux-trace-devel, linux-kernel
Don't call trace_instance_destroy in trace_instance_init when it fails,
this is done by the caller.
Signed-off-by: Andreas Schwab <schwab@suse.de>
---
tools/tracing/rtla/src/trace.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/tools/tracing/rtla/src/trace.c b/tools/tracing/rtla/src/trace.c
index 5784c9f9e570..7c27fc2a52cb 100644
--- a/tools/tracing/rtla/src/trace.c
+++ b/tools/tracing/rtla/src/trace.c
@@ -179,7 +179,6 @@ int trace_instance_init(struct trace_instance *trace, char *tool_name)
return 0;
out_err:
- trace_instance_destroy(trace);
return 1;
}
--
2.37.1
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] rtla: fix double free
2022-07-25 13:10 [PATCH] rtla: fix double free Andreas Schwab
@ 2022-07-25 13:34 ` Daniel Bristot de Oliveira
2022-07-25 13:46 ` Andreas Schwab
0 siblings, 1 reply; 8+ messages in thread
From: Daniel Bristot de Oliveira @ 2022-07-25 13:34 UTC (permalink / raw)
To: Andreas Schwab; +Cc: Steven Rostedt, linux-trace-devel, linux-kernel
Hi Andreas
On 7/25/22 15:10, Andreas Schwab wrote:
> Don't call trace_instance_destroy in trace_instance_init when it fails,
> this is done by the caller.
Regarding the Subject, are you seeing a double-free error, or it is just an
optimization?
AFAICS, trace_instance_destroy() checks the pointers before calling free().
Why am I asking? because if it is a double-free bug, we need to add the "Fixes:"
tag, otherwise, we can think about a Subject that better describes the patch, like:
"rtla: Do not call trace_instance_destroy() twice on error"
Also, after the "subsystem:," i.e., "rlta:" we need to use capital: e.g.,
"rtla: Fix double free"
Anyways, I see that the code makes sense. I am just trying to improve the
description.
Thanks!
-- Daniel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] rtla: fix double free
2022-07-25 13:34 ` Daniel Bristot de Oliveira
@ 2022-07-25 13:46 ` Andreas Schwab
2022-07-25 14:56 ` Steven Rostedt
0 siblings, 1 reply; 8+ messages in thread
From: Andreas Schwab @ 2022-07-25 13:46 UTC (permalink / raw)
To: Daniel Bristot de Oliveira
Cc: Steven Rostedt, linux-trace-devel, linux-kernel
On Jul 25 2022, Daniel Bristot de Oliveira wrote:
> Hi Andreas
>
> On 7/25/22 15:10, Andreas Schwab wrote:
>> Don't call trace_instance_destroy in trace_instance_init when it fails,
>> this is done by the caller.
>
> Regarding the Subject, are you seeing a double-free error, or it is just an
> optimization?
A double free nowadays is almost always an error, due to better malloc
checking.
> AFAICS, trace_instance_destroy() checks the pointers before calling free().
That doesn't help when the pointer is not cleared afterwards. Do you
prefer that?
> Why am I asking? because if it is a double-free bug, we need to add the "Fixes:"
> tag,
It's the first time I tried running rtla, so I don't know whether it is
a regression, but from looking at the history it appears to have been
introduced already in commit 0605bf009f18 ("rtla: Add osnoise tool")
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] rtla: fix double free
2022-07-25 13:46 ` Andreas Schwab
@ 2022-07-25 14:56 ` Steven Rostedt
2022-07-25 15:12 ` [PATCH v2] rtla: Fix " Andreas Schwab
2022-07-25 15:22 ` [PATCH] rtla: fix " Daniel Bristot de Oliveira
0 siblings, 2 replies; 8+ messages in thread
From: Steven Rostedt @ 2022-07-25 14:56 UTC (permalink / raw)
To: Andreas Schwab
Cc: Daniel Bristot de Oliveira, linux-trace-devel, linux-kernel
On Mon, 25 Jul 2022 15:46:40 +0200
Andreas Schwab <schwab@suse.de> wrote:
> On Jul 25 2022, Daniel Bristot de Oliveira wrote:
>
> > Hi Andreas
> >
> > On 7/25/22 15:10, Andreas Schwab wrote:
> >> Don't call trace_instance_destroy in trace_instance_init when it fails,
> >> this is done by the caller.
> >
> > Regarding the Subject, are you seeing a double-free error, or it is just an
> > optimization?
>
> A double free nowadays is almost always an error, due to better malloc
> checking.
>
> > AFAICS, trace_instance_destroy() checks the pointers before calling free().
>
> That doesn't help when the pointer is not cleared afterwards. Do you
> prefer that?
>
> > Why am I asking? because if it is a double-free bug, we need to add the "Fixes:"
> > tag,
>
> It's the first time I tried running rtla, so I don't know whether it is
> a regression, but from looking at the history it appears to have been
> introduced already in commit 0605bf009f18 ("rtla: Add osnoise tool")
>
I think the real fix is to make trace_instance_destroy() be able to be
called more than once.
void trace_instance_destroy(struct trace_instance *trace)
{
if (trace->inst) {
disable_tracer(trace->inst);
destroy_instance(trace->inst);
trace->inst = NULL;
}
if (trace->seq) {
free(trace->seq);
trace->seq = NULL;
}
if (trace->tep) {
tep_free(trace->tep);
trace->tep = NULL;
}
}
As trace_instance_init() is doing the above allocations, it should clean it
up on error. But I also agree, this will lead to double free without
changing trace_instance_destroy() to be the above and then calling it twice.
-- Steve
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2] rtla: Fix double free
2022-07-25 14:56 ` Steven Rostedt
@ 2022-07-25 15:12 ` Andreas Schwab
2022-07-25 15:18 ` Andreas Schwab
2022-07-25 15:23 ` Daniel Bristot de Oliveira
2022-07-25 15:22 ` [PATCH] rtla: fix " Daniel Bristot de Oliveira
1 sibling, 2 replies; 8+ messages in thread
From: Andreas Schwab @ 2022-07-25 15:12 UTC (permalink / raw)
To: Steven Rostedt
Cc: Daniel Bristot de Oliveira, linux-trace-devel, linux-kernel
Avoid double free by making trace_instance_destroy indempotent. When
trace_instance_init fails, it calls trace_instance_destroy, but its only
caller osnoise_destroy_tool calls it again.
Fixes: 0605bf009f18 ("rtla: Add osnoise tool")
Signed-off-by: Andreas Schwab <schwab@suse.de>
---
tools/tracing/rtla/src/trace.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/tracing/rtla/src/trace.c b/tools/tracing/rtla/src/trace.c
index 5784c9f9e570..e1ba6d9f4265 100644
--- a/tools/tracing/rtla/src/trace.c
+++ b/tools/tracing/rtla/src/trace.c
@@ -134,13 +134,18 @@ void trace_instance_destroy(struct trace_instance *trace)
if (trace->inst) {
disable_tracer(trace->inst);
destroy_instance(trace->inst);
+ trace->inst = NULL;
}
- if (trace->seq)
+ if (trace->seq) {
free(trace->seq);
+ trace->seq = NULL;
+ }
- if (trace->tep)
+ if (trace->tep) {
tep_free(trace->tep);
+ trace->tep = NULL;
+ }
}
/*
--
2.37.1
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2] rtla: Fix double free
2022-07-25 15:12 ` [PATCH v2] rtla: Fix " Andreas Schwab
@ 2022-07-25 15:18 ` Andreas Schwab
2022-07-25 15:23 ` Daniel Bristot de Oliveira
1 sibling, 0 replies; 8+ messages in thread
From: Andreas Schwab @ 2022-07-25 15:18 UTC (permalink / raw)
To: Steven Rostedt
Cc: Daniel Bristot de Oliveira, linux-trace-devel, linux-kernel
On Jul 25 2022, Andreas Schwab wrote:
> Avoid double free by making trace_instance_destroy indempotent. When
s/indempotent/idempotent/
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] rtla: Fix double free
2022-07-25 15:12 ` [PATCH v2] rtla: Fix " Andreas Schwab
2022-07-25 15:18 ` Andreas Schwab
@ 2022-07-25 15:23 ` Daniel Bristot de Oliveira
1 sibling, 0 replies; 8+ messages in thread
From: Daniel Bristot de Oliveira @ 2022-07-25 15:23 UTC (permalink / raw)
To: Andreas Schwab, Steven Rostedt; +Cc: linux-trace-devel, linux-kernel
On 7/25/22 17:12, Andreas Schwab wrote:
> Avoid double free by making trace_instance_destroy indempotent. When
> trace_instance_init fails, it calls trace_instance_destroy, but its only
> caller osnoise_destroy_tool calls it again.
>
> Fixes: 0605bf009f18 ("rtla: Add osnoise tool")
> Signed-off-by: Andreas Schwab <schwab@suse.de>
Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Thanks!
-- Daniel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] rtla: fix double free
2022-07-25 14:56 ` Steven Rostedt
2022-07-25 15:12 ` [PATCH v2] rtla: Fix " Andreas Schwab
@ 2022-07-25 15:22 ` Daniel Bristot de Oliveira
1 sibling, 0 replies; 8+ messages in thread
From: Daniel Bristot de Oliveira @ 2022-07-25 15:22 UTC (permalink / raw)
To: Steven Rostedt, Andreas Schwab; +Cc: linux-trace-devel, linux-kernel
On 7/25/22 16:56, Steven Rostedt wrote:
> On Mon, 25 Jul 2022 15:46:40 +0200
> Andreas Schwab <schwab@suse.de> wrote:
>
>> On Jul 25 2022, Daniel Bristot de Oliveira wrote:
>>
>>> Hi Andreas
>>>
>>> On 7/25/22 15:10, Andreas Schwab wrote:
>>>> Don't call trace_instance_destroy in trace_instance_init when it fails,
>>>> this is done by the caller.
>>>
>>> Regarding the Subject, are you seeing a double-free error, or it is just an
>>> optimization?
>>
>> A double free nowadays is almost always an error, due to better malloc
>> checking.
>>
>>> AFAICS, trace_instance_destroy() checks the pointers before calling free().
>>
>> That doesn't help when the pointer is not cleared afterwards. Do you
>> prefer that?
>>
>>> Why am I asking? because if it is a double-free bug, we need to add the "Fixes:"
>>> tag,
>>
>> It's the first time I tried running rtla, so I don't know whether it is
>> a regression, but from looking at the history it appears to have been
>> introduced already in commit 0605bf009f18 ("rtla: Add osnoise tool")
>>
>
> I think the real fix is to make trace_instance_destroy() be able to be
> called more than once.
>
> void trace_instance_destroy(struct trace_instance *trace)
> {
> if (trace->inst) {
> disable_tracer(trace->inst);
> destroy_instance(trace->inst);
> trace->inst = NULL
ah! right, it was missing this... ^^^
-- Daniel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-07-25 15:23 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-25 13:10 [PATCH] rtla: fix double free Andreas Schwab
2022-07-25 13:34 ` Daniel Bristot de Oliveira
2022-07-25 13:46 ` Andreas Schwab
2022-07-25 14:56 ` Steven Rostedt
2022-07-25 15:12 ` [PATCH v2] rtla: Fix " Andreas Schwab
2022-07-25 15:18 ` Andreas Schwab
2022-07-25 15:23 ` Daniel Bristot de Oliveira
2022-07-25 15:22 ` [PATCH] rtla: fix " Daniel Bristot de Oliveira
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).