aboutsummaryrefslogtreecommitdiffstats
path: root/libselinux/src/label_file.c
diff options
context:
space:
mode:
authorRichard Haines <richard_c_haines@btinternet.com>2015-09-15 14:33:05 +0100
committerStephen Smalley <sds@tycho.nsa.gov>2015-09-15 10:30:37 -0400
commit5d19497b5c30bcab9e5e60ac73df5fc3da4e0466 (patch)
tree7b68782888faf3927756a5c929ba826e3ae519b8 /libselinux/src/label_file.c
parent1e50aefea595b27860791aa2200be6c04d7eeaf9 (diff)
downloadandroid_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.c12
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)