Skip to content
Permalink
Browse files
Merge pull request #8955 from JosJuice/android-no-ashmem
Android: Don't access /dev/ashmem on newer Android versions
  • Loading branch information
lioncash committed Jul 16, 2020
2 parents d987cf1 + 00cde7c commit c596483
Showing 1 changed file with 13 additions and 0 deletions.
@@ -23,6 +23,7 @@
#include <sys/mman.h>
#include <unistd.h>
#ifdef ANDROID
#include <dlfcn.h>
#include <linux/ashmem.h>
#include <sys/ioctl.h>
#endif
@@ -35,6 +36,18 @@ namespace Common

static int AshmemCreateFileMapping(const char* name, size_t size)
{
// ASharedMemory path - works on API >= 26 and falls through on API < 26:

// We can't call ASharedMemory_create the normal way without increasing the
// minimum version requirement to API 26, so we use dlopen/dlsym instead
static void* libandroid = dlopen("libandroid.so", RTLD_LAZY | RTLD_LOCAL);
static auto shared_memory_create =
reinterpret_cast<int (*)(const char*, size_t)>(dlsym(libandroid, "ASharedMemory_create"));
if (shared_memory_create)
return shared_memory_create(name, size);

// /dev/ashmem path - works on API < 29:

int fd, ret;
fd = open(ASHMEM_DEVICE, O_RDWR);
if (fd < 0)

0 comments on commit c596483

Please sign in to comment.