From 4f99dd3af16939b7cd67a88d3ba6c17e58be3080 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 9 Jan 2020 14:42:32 -0800 Subject: [PATCH] libcutils: fallback to /dev/ashmem For a Q APEX built with use_vendor, rather than using AIDL to talk to ashmemd, it would directly open /dev/ashmem. R libcutils does ashmem differently, but in order to allow R-built APEXes to replace this category of APEXes, falling back to /dev/ashmem. Fixes: 147363115 Test: tested on Q in swcodec APEX Change-Id: I625e46b15fee6649251ab9be7a1bbe11c5427525 --- libcutils/ashmem-dev.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libcutils/ashmem-dev.cpp b/libcutils/ashmem-dev.cpp index 340572cca..8c232f0cd 100644 --- a/libcutils/ashmem-dev.cpp +++ b/libcutils/ashmem-dev.cpp @@ -203,19 +203,23 @@ static int __ashmem_open_locked() { static const std::string ashmem_device_path = get_ashmem_device_path(); - int ret; - struct stat st; - if (ashmem_device_path.empty()) { return -1; } int fd = TEMP_FAILURE_RETRY(open(ashmem_device_path.c_str(), O_RDWR | O_CLOEXEC)); + + // fallback for APEX w/ use_vendor on Q, which would have still used /dev/ashmem + if (fd < 0) { + fd = TEMP_FAILURE_RETRY(open("/dev/ashmem", O_RDWR | O_CLOEXEC)); + } + if (fd < 0) { return fd; } - ret = TEMP_FAILURE_RETRY(fstat(fd, &st)); + struct stat st; + int ret = TEMP_FAILURE_RETRY(fstat(fd, &st)); if (ret < 0) { int save_errno = errno; close(fd);