aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2022-03-18 06:55:31 +0000
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2022-10-27 14:46:53 +0100
commitcf06645316e11077afbc9731693fd19e55619f59 (patch)
tree4b032d6f0a38d84e46e0694574dd38934e58d3f2
parent6de52d57a1dd1f85ccd9bdbb3c5231e36dd00a99 (diff)
downloadglibc-cf06645316e11077afbc9731693fd19e55619f59.tar
glibc-cf06645316e11077afbc9731693fd19e55619f59.tar.gz
glibc-cf06645316e11077afbc9731693fd19e55619f59.tar.bz2
glibc-cf06645316e11077afbc9731693fd19e55619f59.zip
cheri: fix invalid pointer use after realloc in localealias
This code updates pointers to a reallocated buffer to point to the new buffer. It is not conforming (does arithmetics with freed pointers), but it also creates invalid capabilities because the provenance is derived from the original freed pointers instead of the new buffer. Change the arithmetics so provenance is derived from the new buffer. The conformance issue is not fixed.
-rw-r--r--intl/localealias.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/intl/localealias.c b/intl/localealias.c
index b36092363a..0401f35f9d 100644
--- a/intl/localealias.c
+++ b/intl/localealias.c
@@ -340,8 +340,10 @@ read_alias_file (const char *fname, int fname_len)
for (i = 0; i < nmap; i++)
{
- map[i].alias += new_pool - string_space;
- map[i].value += new_pool - string_space;
+ map[i].alias = new_pool
+ + (map[i].alias - string_space);
+ map[i].value = new_pool
+ + (map[i].value - string_space);
}
}