system_properties: do more checking of file
Check that the permissions on the properties file are exactly as we expect them to be. Make sure we close the fd if fstat fails. Refactor the code slightly. Change-Id: I5503fd58c3b8093ce7e6d05920748ed70eaf8e2c
This commit is contained in:
parent
82ef8296dc
commit
c16961b8c3
@ -69,6 +69,7 @@ static int get_fd_from_env(void)
|
||||
int __system_properties_init(void)
|
||||
{
|
||||
bool fromFile = true;
|
||||
int result = -1;
|
||||
|
||||
if(__system_property_area__ != ((void*) &dummy_props)) {
|
||||
return 0;
|
||||
@ -96,26 +97,35 @@ int __system_properties_init(void)
|
||||
|
||||
struct stat fd_stat;
|
||||
if (fstat(fd, &fd_stat) < 0) {
|
||||
return -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((fd_stat.st_uid != 0)
|
||||
|| (fd_stat.st_gid != 0)
|
||||
|| ((fd_stat.st_mode & (S_IWGRP | S_IWOTH)) != 0)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
prop_area *pa = mmap(0, fd_stat.st_size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
|
||||
if (fromFile) {
|
||||
close(fd);
|
||||
}
|
||||
|
||||
if (pa == MAP_FAILED) {
|
||||
return -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if((pa->magic != PROP_AREA_MAGIC) || (pa->version != PROP_AREA_VERSION)) {
|
||||
munmap(pa, fd_stat.st_size);
|
||||
return -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
__system_property_area__ = pa;
|
||||
return 0;
|
||||
result = 0;
|
||||
|
||||
cleanup:
|
||||
if (fromFile) {
|
||||
close(fd);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
const prop_info *__system_property_find_nth(unsigned n)
|
||||
|
Loading…
x
Reference in New Issue
Block a user