tomoyo: remove a temporary output file

Message ID 20230109091919.3160916-1-masahiroy@kernel.org
State New
Headers
Series tomoyo: remove a temporary output file |

Commit Message

Masahiro Yamada Jan. 9, 2023, 9:19 a.m. UTC
  Commit 8ab5bc40aad4 ("tomoyo: Omit use of bin2c") was locally modified
on top of the patch I submitted.

I recommend writing to the target directly.

If the recipe command fails, Kbuild will automatically delete the target
because scripts/Kbuild.include defines .DELETE_ON_ERROR.

If the recipe command is interrupted, GNU Make will automatically
delete the target if it has been partially updated. There was a corner
case where the target was not cleaned up, but it was fixed by Commit
a7f3257da8a8 ("kbuild: remove the target in signal traps when
interrupted").

Since this is a general problem, you can leave it to Kbuild instead
of introducing unneeded complexity.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

If it is not too late, please squash this.

 security/tomoyo/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Tetsuo Handa Jan. 9, 2023, 10:01 a.m. UTC | #1
On 2023/01/09 18:19, Masahiro Yamada wrote:
> Since this is a general problem, you can leave it to Kbuild instead
> of introducing unneeded complexity.

> If it is not too late, please squash this.

It is not too late to apply. But how do you handle a case where
the process who is responsible for deleting incomplete file was
killed by e.g. OOM-killer?
  
Masahiro Yamada Jan. 9, 2023, 11:35 a.m. UTC | #2
On Mon, Jan 9, 2023 at 7:01 PM Tetsuo Handa
<penguin-kernel@i-love.sakura.ne.jp> wrote:
>
> On 2023/01/09 18:19, Masahiro Yamada wrote:
> > Since this is a general problem, you can leave it to Kbuild instead
> > of introducing unneeded complexity.
>
> > If it is not too late, please squash this.
>
> It is not too late to apply. But how do you handle a case where
> the process who is responsible for deleting incomplete file was
> killed by e.g. OOM-killer?
>


Good point.
That is a rare case that Kbuild cannot handle.

One idea is to make if_changed to write the command to *.cmd.tmp
and rename it to *.cmd after everything succeeds.
So, it is a similar approach, but the difference is that
it is done in the Kbuild core scripts instead of every command.
I will consider it.


--
Best Regards

Masahiro Yamada
  
Tetsuo Handa Jan. 9, 2023, 12:59 p.m. UTC | #3
On 2023/01/09 20:35, Masahiro Yamada wrote:
> One idea is to make if_changed to write the command to *.cmd.tmp
> and rename it to *.cmd after everything succeeds.
> So, it is a similar approach, but the difference is that
> it is done in the Kbuild core scripts instead of every command.
> I will consider it.

I see. Applied as
https://osdn.net/projects/tomoyo/scm/git/tomoyo-test1/commits/80f8be7af03ffe90dc4df998b16bfa212afbdde9 .

Thank you.
  

Patch

diff --git a/security/tomoyo/Makefile b/security/tomoyo/Makefile
index 458cf5e2fa25..884ff155edc3 100644
--- a/security/tomoyo/Makefile
+++ b/security/tomoyo/Makefile
@@ -9,7 +9,7 @@  quiet_cmd_policy = POLICY  $@
 	printf 'static char tomoyo_builtin_$x[] __initdata =\n'; \
 	sed -e 's/\\/\\\\/g' -e 's/\"/\\"/g' -e 's/\(.*\)/\t"\1\\n"/' -- $(firstword $(filter %/$x.conf %/$x.conf.default, $^) /dev/null);  \
 	printf '\t"";\n';) \
-	} > $@.tmp && mv $@.tmp $@
+	} > $@
 
 $(obj)/builtin-policy.h: $(wildcard $(obj)/policy/*.conf $(srctree)/$(src)/policy/*.conf.default) FORCE
 	$(call if_changed,policy)