diff options
author | Richard Haines <richard_c_haines@btinternet.com> | 2015-09-15 14:33:05 +0100 |
---|---|---|
committer | Stephen Smalley <sds@tycho.nsa.gov> | 2015-09-15 10:30:37 -0400 |
commit | 5d19497b5c30bcab9e5e60ac73df5fc3da4e0466 (patch) | |
tree | 7b68782888faf3927756a5c929ba826e3ae519b8 /libselinux/src/label_file.c | |
parent | 1e50aefea595b27860791aa2200be6c04d7eeaf9 (diff) | |
download | android_external_selinux-5d19497b5c30bcab9e5e60ac73df5fc3da4e0466.tar.gz android_external_selinux-5d19497b5c30bcab9e5e60ac73df5fc3da4e0466.tar.bz2 android_external_selinux-5d19497b5c30bcab9e5e60ac73df5fc3da4e0466.zip |
libselinux: Fix mmap memory release for file labeling
Ensure the mmap start address and length are not modified so the memory
used can be released when selabel_close(3) is called.
Signed-off-by: Richard Haines <richard_c_haines@btinternet.com>
Diffstat (limited to 'libselinux/src/label_file.c')
-rw-r--r-- | libselinux/src/label_file.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c index 687d0a7c..bf918854 100644 --- a/libselinux/src/label_file.c +++ b/libselinux/src/label_file.c @@ -159,8 +159,8 @@ static int load_mmap(struct selabel_handle *rec, const char *path, } /* save where we mmap'd the file to cleanup on close() */ - mmap_area->addr = addr; - mmap_area->len = len; + mmap_area->addr = mmap_area->next_addr = addr; + mmap_area->len = mmap_area->next_len = len; mmap_area->next = data->mmap_areas; data->mmap_areas = mmap_area; @@ -231,7 +231,7 @@ static int load_mmap(struct selabel_handle *rec, const char *path, /* Check for stem_len wrap around. */ if (stem_len < UINT32_MAX) { - buf = (char *)mmap_area->addr; + buf = (char *)mmap_area->next_addr; /* Check if over-run before null check. */ rc = next_entry(NULL, mmap_area, (stem_len + 1)); if (rc < 0) @@ -317,7 +317,7 @@ static int load_mmap(struct selabel_handle *rec, const char *path, goto err; } - spec->regex_str = (char *)mmap_area->addr; + spec->regex_str = (char *)mmap_area->next_addr; rc = next_entry(NULL, mmap_area, entry_len); if (rc < 0) goto err; @@ -369,7 +369,7 @@ static int load_mmap(struct selabel_handle *rec, const char *path, rc = -1; goto err; } - spec->regex = (pcre *)mmap_area->addr; + spec->regex = (pcre *)mmap_area->next_addr; rc = next_entry(NULL, mmap_area, entry_len); if (rc < 0) goto err; @@ -387,7 +387,7 @@ static int load_mmap(struct selabel_handle *rec, const char *path, rc = -1; goto err; } - spec->lsd.study_data = (void *)mmap_area->addr; + spec->lsd.study_data = (void *)mmap_area->next_addr; spec->lsd.flags |= PCRE_EXTRA_STUDY_DATA; rc = next_entry(NULL, mmap_area, entry_len); if (rc < 0) |