From 25b15be9120bcdaa0aba622c67ad2c835d9e91ca Mon Sep 17 00:00:00 2001 From: Brian Swetland Date: Tue, 13 Jul 2010 16:43:56 -0700 Subject: [PATCH] init: use tmpfs/ftruncate for properties backing store instead of ashmem This removes the need for ashmem for early bringup and avoids an issue with permissions enforcement. Change-Id: I405b080660934d73048c79d614b6b2ebc43ab182 Signed-off-by: Brian Swetland --- init/property_service.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/init/property_service.c b/init/property_service.c index e35cd387d..d8fea56e0 100644 --- a/init/property_service.c +++ b/init/property_service.c @@ -27,7 +27,6 @@ #include #include -#include #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ #include @@ -110,21 +109,31 @@ static int init_workspace(workspace *w, size_t size) void *data; int fd; - fd = ashmem_create_region("system_properties", size); - if(fd < 0) + /* dev is a tmpfs that we can use to carve a shared workspace + * out of, so let's do that... + */ + fd = open("/dev/__properties__", O_RDWR | O_CREAT, 0600); + if (fd < 0) return -1; + if (ftruncate(fd, size) < 0) + goto out; + data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(data == MAP_FAILED) goto out; - /* allow the wolves we share with to do nothing but read */ - ashmem_set_prot_region(fd, PROT_READ); + close(fd); + + fd = open("/dev/__properties__", O_RDONLY); + if (fd < 0) + return -1; + + unlink("/dev/__properties__"); w->data = data; w->size = size; w->fd = fd; - return 0; out: