Merge "ashmem: Ensure all memfds have non-executable permissions by default" into main
This commit is contained in:
commit
445d2e0025
1 changed files with 14 additions and 2 deletions
|
|
@ -114,8 +114,14 @@ static bool __has_memfd_support() {
|
||||||
// Check if kernel support exists, otherwise fall back to ashmem.
|
// Check if kernel support exists, otherwise fall back to ashmem.
|
||||||
// This code needs to build on old API levels, so we can't use the libc
|
// This code needs to build on old API levels, so we can't use the libc
|
||||||
// wrapper.
|
// wrapper.
|
||||||
|
//
|
||||||
|
// MFD_NOEXEC_SEAL is used to match the semantics of the ashmem device,
|
||||||
|
// which did not have executable permissions. This also seals the executable
|
||||||
|
// permissions of the buffer (i.e. they cannot be changed by fchmod()).
|
||||||
|
//
|
||||||
|
// MFD_NOEXEC_SEAL implies MFD_ALLOW_SEALING.
|
||||||
android::base::unique_fd fd(
|
android::base::unique_fd fd(
|
||||||
syscall(__NR_memfd_create, "test_android_memfd", MFD_CLOEXEC | MFD_ALLOW_SEALING));
|
syscall(__NR_memfd_create, "test_android_memfd", MFD_CLOEXEC | MFD_NOEXEC_SEAL));
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
ALOGE("memfd_create failed: %s, no memfd support.\n", strerror(errno));
|
ALOGE("memfd_create failed: %s, no memfd support.\n", strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -289,7 +295,13 @@ int ashmem_valid(int fd)
|
||||||
static int memfd_create_region(const char* name, size_t size) {
|
static int memfd_create_region(const char* name, size_t size) {
|
||||||
// This code needs to build on old API levels, so we can't use the libc
|
// This code needs to build on old API levels, so we can't use the libc
|
||||||
// wrapper.
|
// wrapper.
|
||||||
android::base::unique_fd fd(syscall(__NR_memfd_create, name, MFD_CLOEXEC | MFD_ALLOW_SEALING));
|
//
|
||||||
|
// MFD_NOEXEC_SEAL to match the semantics of the ashmem device, which did
|
||||||
|
// not have executable permissions. This also seals the executable
|
||||||
|
// permissions of the buffer (i.e. they cannot be changed by fchmod()).
|
||||||
|
//
|
||||||
|
// MFD_NOEXEC_SEAL implies MFD_ALLOW_SEALING.
|
||||||
|
android::base::unique_fd fd(syscall(__NR_memfd_create, name, MFD_CLOEXEC | MFD_NOEXEC_SEAL));
|
||||||
|
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
ALOGE("memfd_create(%s, %zd) failed: %s\n", name, size, strerror(errno));
|
ALOGE("memfd_create(%s, %zd) failed: %s\n", name, size, strerror(errno));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue