Thread (13 messages) 13 messages, 2 authors, 2025-01-08

Re: [PATCH v3 2/5] tracing: Use __free() in trace_probe for cleanup

From: Steven Rostedt <rostedt@goodmis.org>
Date: 2025-01-08 01:33:05
Also in: lkml

On Wed, 8 Jan 2025 09:38:43 +0900
Masami Hiramatsu (Google) [off-list ref] wrote:
quoted
I don't get this? You are telling the compiler not to free tmp, because you
decided to free it yourself? Why not just remove the kfree() here altogether?  
In the for-loop block, the __free() work only when we exit the loop, not
each iteration. In each iteration, kstrdup() is assigned to the 'tmp',
so we need to kfree() each time.
Really? It doesn't trigger for each iteration? That's rather unintuitive. :-/
And sounds buggy, as wouldn't that then cause a memory leak?

I would say not to use __free() for tmp at all. Because now it's just
getting confusing.

-- Steve

Hmm, maybe this is a sign that I should not use __free() for the 'tmp',
or I should call kfree(tmp) right before kstrdup(), like below.

 	for (i = 0; i < argc; i++) {
		char *tmp __free(kfree) = NULL;
		...
		kfree(tmp);
		tmp = kstrdup(argv[i], GFP_KERNEL);
	}

Does this make sense?
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help