[Buildroot] [PATCH v2] openssl: fix race condition when symlink shared libs

Arnout Vandecappelle arnout at mind.be
Sat Nov 21 13:24:55 UTC 2015


On 20-11-15 17:23, Ryan Barnett wrote:
> The build-shared target depends on do_crypto and link-shared, which
> will be executed in parallel. do_crypto calls
> link_a.linux_shared -> link_a.gnu which does SYMLINK_SO; in parallel,
> link-shared calls symlink.linux_shared which also does SYMLINK_SO.
> Before the symlink is created, it is rm'ed, but there is a tiny chance
> that the second one is created after the rm has been called.
> 
> Fix this by using 'ln -sf' instead of 'ln -s' so the build doesn't
> error out.
> 
> Patch submitted upstream at:
>   https://bugs.gentoo.org/show_bug.cgi?id=566260

 Ahem, gentoo is not exactly upstream :-)  From [1]:

To report a bug or make an enhancement request, send email to rt at openssl.org. In
the subject line, please make sure to indicate if it's a bug or a fix, and a
brief description of the issue. In the body of your mail, please include the
versions of the operating system and OpenSSL you are using. If you have a patch
or diff, please send it as an attachment, and not inline in the message body.

 As far as I can see, this patch should still apply (in slightly adapted form)
to the real upstream.

> 
> Thanks to Arnout for explain the issue (wording used above).

 You're a native English speaker, right? explain -> explaining :-)


 Some more minor things below, but anyway more for the upstreams. So

Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>


> 
> Signed-off-by: Ryan Barnett <ryan.barnett at rockwellcollins.com>
> CC: Arnout Vandecappelle <arnout at mind.be>
> CC: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> 
> ---
> 
> Note this is a temporary fix until a gentoo maintainer weighs in and
> updates their parallel build patch.
> 
>  v1 -> v2
>    Remove the 'rm -f' since we are using 'ln -sf' (Arnout originally)
> ---
>  ...ared-fix-race-condition-when-symlinking-s.patch | 48 ++++++++++++++++++++++
>  1 file changed, 48 insertions(+)
>  create mode 100644 package/openssl/0003-makefile.shared-fix-race-condition-when-symlinking-s.patch
> 
> diff --git a/package/openssl/0003-makefile.shared-fix-race-condition-when-symlinking-s.patch b/package/openssl/0003-makefile.shared-fix-race-condition-when-symlinking-s.patch
> new file mode 100644
> index 0000000..d6672f4
> --- /dev/null
> +++ b/package/openssl/0003-makefile.shared-fix-race-condition-when-symlinking-s.patch
> @@ -0,0 +1,48 @@
> +From 878793890a9b84ff313397c56478d7c6f770b2d2 Mon Sep 17 00:00:00 2001
> +From: Ryan Barnett <ryan.barnett at rockwellcollins.com>
> +Date: Thu, 19 Nov 2015 10:47:00 -0600
> +Subject: [PATCH] makefile.shared: fix race condition when symlinking shared
> + libs
> +
> +The build-shared target depends on do_crypto and link-shared, which
> +will be executed in parallel. do_crypto calls
> +link_a.linux_shared -> link_a.gnu which does SYMLINK_SO; in parallel,
> +link-shared calls symlink.linux_shared which also does SYMLINK_SO.
> +Before the symlink is created, it is rm'ed, but there is a tiny chance
> +that the second one is created after the rm has been called.
> +
> +Fix this race condition by just using ln -sf since it will be the same
> +symlink regards and not cause the build to error out.

 regards -> regardless

> +
> +Signed-off-by: Ryan Barnett <ryan.barnett at rockwellcollins.com>
> +---
> + Makefile.shared | 8 ++++----
> + 1 file changed, 4 insertions(+), 4 deletions(-)
> +
> +diff --git a/Makefile.shared b/Makefile.shared
> +index 8d57163..8ab3d18 100644
> +--- a/Makefile.shared
> ++++ b/Makefile.shared
> +@@ -117,15 +117,15 @@ SYMLINK_SO=	\
> + 		prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
> + 		if [ -n "$$SHLIB_COMPAT" ]; then \
> + 			for x in $$SHLIB_COMPAT; do \
> +-				( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
> +-				  ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
> ++				( $(SET_X);  \
> ++				  ln -sf $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
> + 				prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
> + 			done; \
> + 		fi; \
> + 		if [ -n "$$SHLIB_SOVER" ]; then \
> + 			[ -e "$$SHLIB$$SHLIB_SUFFIX" ] || \

 This check is not really needed anymore.


 Regards,
 Arnout


[1] https://www.openssl.org/community/


> +-			( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
> +-			  ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
> ++			( $(SET_X); \
> ++			  ln -sf $$prev $$SHLIB$$SHLIB_SUFFIX ); \
> + 		fi; \
> + 	fi
> + 
> +-- 
> +1.9.1
> +
> 


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF


More information about the buildroot mailing list