diff options
author | Dimitry Ivanov <dimitry@google.com> | 2017-04-21 13:12:05 -0700 |
---|---|---|
committer | Dimitry Ivanov <dimitry@google.com> | 2017-04-21 14:37:00 -0700 |
commit | bb8b22a087db32773f1a9cd3473061f3ad714afc (patch) | |
tree | fa6f779e0a0edafab547490feb59ece32c54a733 /linker/linker.cpp | |
parent | 07e75fe9a1cbf323b5de168448583ed66211efe0 (diff) |
loader: enable loading libraries from tmpfs
This change adds two tests for dlopen from temporary files.
1. One Uses memfd_create() can be used to load libraries directly
from memory. This requires relaxing namespace accessibility check
in order to make this work in isolated namespaces.
2. Another checks that open with O_TMPFILE works.
Bug: http://b/37245203
Test: bionic-unit-tests --gtest_filter=dl*:Dl*
Change-Id: I3be1d7198ca17e7f1ba022a0d86c64d59a493506
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r-- | linker/linker.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index 66bec58af..53f0608b5 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -36,6 +36,7 @@ #include <string.h> #include <sys/mman.h> #include <sys/param.h> +#include <sys/vfs.h> #include <unistd.h> #include <new> @@ -1191,7 +1192,15 @@ static bool load_library(android_namespace_t* ns, return false; } - if (!ns->is_accessible(realpath)) { + struct statfs fs_stat; + if (TEMP_FAILURE_RETRY(fstatfs(task->get_fd(), &fs_stat)) != 0) { + DL_ERR("unable to fstatfs file for the library \"%s\": %s", name, strerror(errno)); + return false; + } + + // do not check accessibility using realpath if fd is located on tmpfs + // this enables use of memfd_create() for apps + if ((fs_stat.f_type != TMPFS_MAGIC) && (!ns->is_accessible(realpath))) { // TODO(dimitry): workaround for http://b/26394120 - the grey-list // TODO(dimitry) before O release: add a namespace attribute to have this enabled |