On Wed, 8 Jan 2025 09:38:43 +0900 Masami Hiramatsu (Google) <mhira...@kernel.org> wrote:
> > 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?