[LLVMdev] [llvm-commits] Dealing with a corrupted /proc/self/exe link

Benjamin Kramer benny.kra at gmail.com
Fri Jul 13 12:17:52 PDT 2012


On 13.07.2012, at 09:46, Gabor Greif <gabor.greif at alcatel-lucent.com> wrote:

> Hi all,
> 
> I am in charge of the controlled introduction of clang into
> our builds at my workplace. Since all our tools must run from
> a ClearCase view for automatic dependency tracking, we have been
> biten by a Linux bug, and readlink("/proc/self/exe", ...) gives
> nonsensical results. So we need to introduce a configure option
> for disallowing this method of executable discovery (the other
> one works well).

Interesting, can you describe the linux bug? Are the kernel devs aware of it?

We often had reports about /proc/self/exe not working (and thus clang crashing)
in chrooted environments. It is possible to mount /proc into the chroot but this
seems to be missing from many setups. The code in LLVM that uses /proc/self/exe
returns an empty string on error which confuses clang.

I don't really like having an autoconf switch for this as long as you can determine
whether the result from /proc/self/exe is valid. When you're adding a fallback to
Path.inc anyways, why not just try reading /proc/self/exe first, and if it fails, use
your fallback? That would also fix the chroot problem.

- Ben

> 
> Here is the patch:
> 
> 
> 
> Index: autoconf/configure.ac
> ===================================================================
> --- autoconf/configure.ac       (revision 160127)
> +++ autoconf/configure.ac       (working copy)
> @@ -647,6 +647,20 @@
> AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
>                    [Define if timestamp information (e.g., __DATE__) is allowed])
> 
> +dnl Enable reading of the "/proc/self/exe" link.
> +AC_ARG_ENABLE(proc-self-exe,
> +  AS_HELP_STRING([--enable-proc-self-exe],
> +                 [Enable reading of the "/proc/self/exe" link (default is YES)]),,
> +                 enableval=default)
> +case "$enableval" in
> +  yes) AC_SUBST(ENABLE_PROC_SELF_EXE,[1]) ;;
> +  no)  AC_SUBST(ENABLE_PROC_SELF_EXE,[0]) ;;
> +  default) AC_SUBST(ENABLE_PROC_SELF_EXE,[1]) ;;
> +  *) AC_MSG_ERROR([Invalid setting for --enable-proc-self-exe. Use "yes" or "no"]) ;;
> +esac
> +AC_DEFINE_UNQUOTED([ENABLE_PROC_SELF_EXE],$ENABLE_PROC_SELF_EXE,
> +                   [Define if reading of the "/proc/self/exe" link is allowed])
> +
> dnl Allow specific targets to be specified for building (or not)
> TARGETS_TO_BUILD=""
> AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
> 
> 
> I'll commit after a LGTM.
> 
> However before tweaking lib/Support/Unix/Path.inc I have to add a cmake
> modification, which can be simply <always on>. Hints how to do this are
> welcome, but I guess I'll figure it out.
> 
> So what do you think?
> 
> Cheers,
> 
> 	Gabor
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-dev mailing list