summaryrefslogtreecommitdiffstats
path: root/init/property_service.c
diff options
context:
space:
mode:
authorBrian Swetland <swetland@google.com>2010-07-13 16:43:56 -0700
committerBrian Swetland <swetland@google.com>2010-07-13 16:43:56 -0700
commit25b15be9120bcdaa0aba622c67ad2c835d9e91ca (patch)
tree8ac46d2a948e3eefa9a8f5451a58b593ce5bf4b2 /init/property_service.c
parent63e5205cd2f693bbfa54411f2dd20354bd30ffd8 (diff)
downloadsystem_core-25b15be9120bcdaa0aba622c67ad2c835d9e91ca.zip
system_core-25b15be9120bcdaa0aba622c67ad2c835d9e91ca.tar.gz
system_core-25b15be9120bcdaa0aba622c67ad2c835d9e91ca.tar.bz2
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 <swetland@google.com>
Diffstat (limited to 'init/property_service.c')
-rw-r--r--init/property_service.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/init/property_service.c b/init/property_service.c
index e35cd38..d8fea56 100644
--- a/init/property_service.c
+++ b/init/property_service.c
@@ -27,7 +27,6 @@
#include <cutils/misc.h>
#include <cutils/sockets.h>
-#include <cutils/ashmem.h>
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
#include <sys/_system_properties.h>
@@ -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: