diff mbox series

package/libcap: don't overwrite 'empty' when generating loader.txt

Message ID 20210823233113.936711-1-arnout@mind.be
State Accepted
Headers show
Series package/libcap: don't overwrite 'empty' when generating loader.txt | expand

Commit Message

Arnout Vandecappelle Aug. 23, 2021, 11:31 p.m. UTC
Upstream commit [1] introduced an invocation of objcopy to generat
loader.txt. However, objcopy, if not provided with an output file, will
overwrite the input file. This is usually harmless because it will be
identical, but the timestamp is updated. This may cause 'empty' to be
newer than 'loader.txt', which causes 'loader.txt' and its dependencies
to be rebuilt during 'make install'

We provide a different set of parameters during 'make install'. In
particular, we no longer pass in HOST_CONFIGURE_OPTS, so we no longer
set LDFLAGS. Thus, there is no -Wl,rpath option that is passed in, which
causes the resulting binaries to have an incorrect RPATH.

Fix this by adding /dev/null as the output file in the objcopy
invocation.

Patch was sent upstream, but there's no mailing list, just a single
person.

Fixes: http://autobuild.buildroot.net/results/600/600aff5b839b48db80751cace5fa9670b7a3d698
(hopefully)

[1] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/commit/?id=efd293947f940180eedd8d0915b124f4aedccc08

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
Note: I tried updating to v1.2.53 first, but that failed due to [2]

[2] https://bugzilla.kernel.org/show_bug.cgi?id=214023#c16
---
 ...don-t-overwrite-empty-when-generatin.patch | 50 +++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch

Comments

Yann E. MORIN Aug. 24, 2021, 7:13 a.m. UTC | #1
Arnout, All,

On 2021-08-24 01:31 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
> Upstream commit [1] introduced an invocation of objcopy to generat
> loader.txt. However, objcopy, if not provided with an output file, will
> overwrite the input file. This is usually harmless because it will be
> identical, but the timestamp is updated. This may cause 'empty' to be
> newer than 'loader.txt', which causes 'loader.txt' and its dependencies
> to be rebuilt during 'make install'
> 
> We provide a different set of parameters during 'make install'. In
> particular, we no longer pass in HOST_CONFIGURE_OPTS, so we no longer
> set LDFLAGS. Thus, there is no -Wl,rpath option that is passed in, which
> causes the resulting binaries to have an incorrect RPATH.
> 
> Fix this by adding /dev/null as the output file in the objcopy
> invocation.
> 
> Patch was sent upstream, but there's no mailing list, just a single
> person.
> 
> Fixes: http://autobuild.buildroot.net/results/600/600aff5b839b48db80751cace5fa9670b7a3d698
> (hopefully)
> 
> [1] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/commit/?id=efd293947f940180eedd8d0915b124f4aedccc08
> 
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

Applied to master, then reverted, then applied to next, thanks.

/me goes grab a third coffee before resuming patch reviews...

Regards,
Yann E. MORIN.

> ---
> Note: I tried updating to v1.2.53 first, but that failed due to [2]
> 
> [2] https://bugzilla.kernel.org/show_bug.cgi?id=214023#c16
> ---
>  ...don-t-overwrite-empty-when-generatin.patch | 50 +++++++++++++++++++
>  1 file changed, 50 insertions(+)
>  create mode 100644 package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
> 
> diff --git a/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
> new file mode 100644
> index 0000000000..a47a2c788e
> --- /dev/null
> +++ b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
> @@ -0,0 +1,50 @@
> +From dc507a812d931c24f1ac98c811fdd29bffa21da9 Mon Sep 17 00:00:00 2001
> +From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
> +Date: Tue, 24 Aug 2021 00:36:40 +0200
> +Subject: [PATCH] libcap/Makefile: don't overwrite 'empty' when generating
> + loader.txt
> +
> +objcopy takes an input file and an output file as arguments. If the
> +output file is left out, the input file will be overwritten.
> +
> +Since the objcopy command used to generate loader.txt only does a
> +dump-section and no filtering, in practice there is no change to empty.
> +However, as a side-effect, its timestamp is updated. The timestamp of
> +empty and of loader.txt will be more or less the same; however,
> +loader.txt is closed just before the output file is closed, so it's
> +possible that the timestamp of loader.txt is just a little bit earlier.
> +If this happens, it causes loader.txt to be rebuilt later, which in turn
> +causes a number of other object files to be rebuilt.
> +
> +Usually that's harmless, but it sometimes causes the rebuild to happen
> +during 'make install'. This is particularly annoying if 'make install'
> +is done as root, since loader.txt becomes owned by root in that case.
> +
> +Fix this by specifying a harmless output file: /dev/null.
> +
> +While we're at it, take in an upstream change that removes the redundant
> +redirect.
> +
> +Fixes: ee3b25c0a877fa74d1aec88f325ac45b09963c82
> +
> +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> +---
> + libcap/Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/libcap/Makefile b/libcap/Makefile
> +index 47cf8f4..18e4f4f 100644
> +--- a/libcap/Makefile
> ++++ b/libcap/Makefile
> +@@ -105,7 +105,7 @@ empty: empty.c
> + 	$(CC) -o $@ $<
> + 
> + loader.txt: empty
> +-	$(OBJCOPY) --dump-section .interp=/dev/stdout $< > $@
> ++	$(OBJCOPY) --dump-section .interp=$@ $< /dev/null
> + 
> + cap_magic.o: execable.h execable.c loader.txt
> + 	$(CC) $(CFLAGS) $(IPATH) -DLIBRARY_VERSION=\"$(LIBTITLE)-$(VERSION).$(MINOR)\" -DSHARED_LOADER=\"$(shell cat loader.txt)\" -c execable.c -o $@
> +-- 
> +2.31.1
> +
> -- 
> 2.31.1
>
Arnout Vandecappelle Aug. 24, 2021, 8:29 a.m. UTC | #2
On 24/08/2021 09:13, Yann E. MORIN wrote:
> Arnout, All,
> 
> On 2021-08-24 01:31 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
>> Upstream commit [1] introduced an invocation of objcopy to generat
>> loader.txt. However, objcopy, if not provided with an output file, will
>> overwrite the input file. This is usually harmless because it will be
>> identical, but the timestamp is updated. This may cause 'empty' to be
>> newer than 'loader.txt', which causes 'loader.txt' and its dependencies
>> to be rebuilt during 'make install'
>>
>> We provide a different set of parameters during 'make install'. In
>> particular, we no longer pass in HOST_CONFIGURE_OPTS, so we no longer
>> set LDFLAGS. Thus, there is no -Wl,rpath option that is passed in, which
>> causes the resulting binaries to have an incorrect RPATH.
>>
>> Fix this by adding /dev/null as the output file in the objcopy
>> invocation.
>>
>> Patch was sent upstream, but there's no mailing list, just a single
>> person.
>>
>> Fixes: http://autobuild.buildroot.net/results/600/600aff5b839b48db80751cace5fa9670b7a3d698
>> (hopefully)
>>
>> [1] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/commit/?id=efd293947f940180eedd8d0915b124f4aedccc08
>>
>> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> 
> Applied to master, then reverted, then applied to next, thanks.

 Ah, sorry, I forgot to add the /next part... Well, it was already late :-)

 Regards,
 Arnout

> 
> /me goes grab a third coffee before resuming patch reviews...
> 
> Regards,
> Yann E. MORIN.
> 
>> ---
>> Note: I tried updating to v1.2.53 first, but that failed due to [2]
>>
>> [2] https://bugzilla.kernel.org/show_bug.cgi?id=214023#c16
>> ---
>>  ...don-t-overwrite-empty-when-generatin.patch | 50 +++++++++++++++++++
>>  1 file changed, 50 insertions(+)
>>  create mode 100644 package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
>>
>> diff --git a/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
>> new file mode 100644
>> index 0000000000..a47a2c788e
>> --- /dev/null
>> +++ b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
>> @@ -0,0 +1,50 @@
>> +From dc507a812d931c24f1ac98c811fdd29bffa21da9 Mon Sep 17 00:00:00 2001
>> +From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
>> +Date: Tue, 24 Aug 2021 00:36:40 +0200
>> +Subject: [PATCH] libcap/Makefile: don't overwrite 'empty' when generating
>> + loader.txt
>> +
>> +objcopy takes an input file and an output file as arguments. If the
>> +output file is left out, the input file will be overwritten.
>> +
>> +Since the objcopy command used to generate loader.txt only does a
>> +dump-section and no filtering, in practice there is no change to empty.
>> +However, as a side-effect, its timestamp is updated. The timestamp of
>> +empty and of loader.txt will be more or less the same; however,
>> +loader.txt is closed just before the output file is closed, so it's
>> +possible that the timestamp of loader.txt is just a little bit earlier.
>> +If this happens, it causes loader.txt to be rebuilt later, which in turn
>> +causes a number of other object files to be rebuilt.
>> +
>> +Usually that's harmless, but it sometimes causes the rebuild to happen
>> +during 'make install'. This is particularly annoying if 'make install'
>> +is done as root, since loader.txt becomes owned by root in that case.
>> +
>> +Fix this by specifying a harmless output file: /dev/null.
>> +
>> +While we're at it, take in an upstream change that removes the redundant
>> +redirect.
>> +
>> +Fixes: ee3b25c0a877fa74d1aec88f325ac45b09963c82
>> +
>> +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
>> +---
>> + libcap/Makefile | 2 +-
>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>> +
>> +diff --git a/libcap/Makefile b/libcap/Makefile
>> +index 47cf8f4..18e4f4f 100644
>> +--- a/libcap/Makefile
>> ++++ b/libcap/Makefile
>> +@@ -105,7 +105,7 @@ empty: empty.c
>> + 	$(CC) -o $@ $<
>> + 
>> + loader.txt: empty
>> +-	$(OBJCOPY) --dump-section .interp=/dev/stdout $< > $@
>> ++	$(OBJCOPY) --dump-section .interp=$@ $< /dev/null
>> + 
>> + cap_magic.o: execable.h execable.c loader.txt
>> + 	$(CC) $(CFLAGS) $(IPATH) -DLIBRARY_VERSION=\"$(LIBTITLE)-$(VERSION).$(MINOR)\" -DSHARED_LOADER=\"$(shell cat loader.txt)\" -c execable.c -o $@
>> +-- 
>> +2.31.1
>> +
>> -- 
>> 2.31.1
>>
>
diff mbox series

Patch

diff --git a/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
new file mode 100644
index 0000000000..a47a2c788e
--- /dev/null
+++ b/package/libcap/0001-libcap-Makefile-don-t-overwrite-empty-when-generatin.patch
@@ -0,0 +1,50 @@ 
+From dc507a812d931c24f1ac98c811fdd29bffa21da9 Mon Sep 17 00:00:00 2001
+From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
+Date: Tue, 24 Aug 2021 00:36:40 +0200
+Subject: [PATCH] libcap/Makefile: don't overwrite 'empty' when generating
+ loader.txt
+
+objcopy takes an input file and an output file as arguments. If the
+output file is left out, the input file will be overwritten.
+
+Since the objcopy command used to generate loader.txt only does a
+dump-section and no filtering, in practice there is no change to empty.
+However, as a side-effect, its timestamp is updated. The timestamp of
+empty and of loader.txt will be more or less the same; however,
+loader.txt is closed just before the output file is closed, so it's
+possible that the timestamp of loader.txt is just a little bit earlier.
+If this happens, it causes loader.txt to be rebuilt later, which in turn
+causes a number of other object files to be rebuilt.
+
+Usually that's harmless, but it sometimes causes the rebuild to happen
+during 'make install'. This is particularly annoying if 'make install'
+is done as root, since loader.txt becomes owned by root in that case.
+
+Fix this by specifying a harmless output file: /dev/null.
+
+While we're at it, take in an upstream change that removes the redundant
+redirect.
+
+Fixes: ee3b25c0a877fa74d1aec88f325ac45b09963c82
+
+Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
+---
+ libcap/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libcap/Makefile b/libcap/Makefile
+index 47cf8f4..18e4f4f 100644
+--- a/libcap/Makefile
++++ b/libcap/Makefile
+@@ -105,7 +105,7 @@ empty: empty.c
+ 	$(CC) -o $@ $<
+ 
+ loader.txt: empty
+-	$(OBJCOPY) --dump-section .interp=/dev/stdout $< > $@
++	$(OBJCOPY) --dump-section .interp=$@ $< /dev/null
+ 
+ cap_magic.o: execable.h execable.c loader.txt
+ 	$(CC) $(CFLAGS) $(IPATH) -DLIBRARY_VERSION=\"$(LIBTITLE)-$(VERSION).$(MINOR)\" -DSHARED_LOADER=\"$(shell cat loader.txt)\" -c execable.c -o $@
+-- 
+2.31.1
+