halt dynamic linker library search on errors resolving $ORIGIN in rpath
authorRich Felker <dalias@aerifal.cx>
Fri, 3 Apr 2015 20:35:43 +0000 (16:35 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 3 Apr 2015 20:35:43 +0000 (16:35 -0400)
commit2963a9f79406c829d5fd710a2e8fe510ee83c006
tree3857b91c4dcc6ccf2f6d02da5829f76890387f31
parent5e25d87b09d1dafc527833d9b4e9a6de99b79aab
halt dynamic linker library search on errors resolving $ORIGIN in rpath

this change hardens the dynamic linker against the possibility of
loading the wrong library due to inability to expand $ORIGIN in rpath.
hard failures such as excessively long paths or absence of /proc (when
resolving /proc/self/exe for the main executable's origin) do not stop
the path search, but memory allocation failures and any other
potentially transient failures do.

to implement this change, the meaning of the return value of
fixup_rpath function is changed. returning zero no longer indicates
that the dso's rpath string pointer is non-null; instead, the caller
needs to check. a return value of -1 indicates a failure that should
stop further path search.
src/ldso/dynlink.c