| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Nicolas Pitre <nicolas.pitre@linaro.org> |
| Date: Thu, 15 Mar 2018 16:56:20 -0400 |
| Subject: kbuild: make scripts/adjust_autoksyms.sh robust against timestamp races |
| |
| From: Nicolas Pitre <nicolas.pitre@linaro.org> |
| |
| [ Upstream commit 825d487583089f9a33d31650c9c41f6474aab7fc ] |
| |
| Some filesystems have timestamps with coarse precision that may allow |
| for a recently built object file to have the same timestamp as the |
| updated time on one of its dependency files. When that happens, the |
| object file doesn't get rebuilt as it should. |
| |
| This is especially the case on filesystems that don't have sub-second |
| time precision, such as ext3 or Ext4 with 128B inodes. |
| |
| Let's prevent that by making sure updated dependency files have a newer |
| timestamp than the first file we created (i.e. autoksyms.h.tmpnew). |
| |
| Reported-by: Thomas Lindroth <thomas.lindroth@gmail.com> |
| Signed-off-by: Nicolas Pitre <nico@linaro.org> |
| Tested-by: Thomas Lindroth <thomas.lindroth@gmail.com> |
| Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| scripts/adjust_autoksyms.sh | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/scripts/adjust_autoksyms.sh |
| +++ b/scripts/adjust_autoksyms.sh |
| @@ -83,6 +83,13 @@ while read sympath; do |
| depfile="include/config/ksym/${sympath}.h" |
| mkdir -p "$(dirname "$depfile")" |
| touch "$depfile" |
| + # Filesystems with coarse time precision may create timestamps |
| + # equal to the one from a file that was very recently built and that |
| + # needs to be rebuild. Let's guard against that by making sure our |
| + # dep files are always newer than the first file we created here. |
| + while [ ! "$depfile" -nt "$new_ksyms_file" ]; do |
| + touch "$depfile" |
| + done |
| echo $((count += 1)) |
| done | tail -1 ) |
| changed=${changed:-0} |