Fix dirfd crash issue in property service

In "init: harden property service" patch, dirfd() is invoked
without checking whether opendir() return successfully. It may
fail if load_persistent_properties() is invoked before userdata
partition is mounted; then dirfd(NULL) will make init crash.
This may happen if "is_charger" is true.

Change-Id: I216fb743a3c9fa050f92fcb31b62e766346d84bb
Signed-off-by: Yi-wei Zhao <gbjc64@motorola.com>
This commit is contained in:
Yi-wei Zhao 2012-10-23 21:09:56 +08:00
parent 3e5e9e9ee2
commit e41bc31555

View file

@ -510,13 +510,14 @@ static void load_properties_from_file(const char *fn)
static void load_persistent_properties()
{
DIR* dir = opendir(PERSISTENT_PROPERTY_DIR);
int dir_fd = dirfd(dir);
int dir_fd;
struct dirent* entry;
char value[PROP_VALUE_MAX];
int fd, length;
struct stat sb;
if (dir) {
dir_fd = dirfd(dir);
while ((entry = readdir(dir)) != NULL) {
if (strncmp("persist.", entry->d_name, strlen("persist.")))
continue;