diff options
author | Keith Packard <keithp@keithp.com> | 2014-12-09 09:31:00 -0800 |
---|---|---|
committer | Julien Cristau <jcristau@debian.org> | 2014-12-09 20:54:12 +0100 |
commit | f7ff55a374d91f8b513159809ed41c3e029a6074 (patch) | |
tree | a19749fa35998c69ca65824713c0c39c868b6c58 | |
parent | 8e7c4380a56ab05412f630e9b6e02580cb04a804 (diff) |
dix: GetHosts bounds check using wrong pointer value [CVE-2014-8092 pt. 6]
GetHosts saves the pointer to allocated memory in *data, and then
wants to bounds-check writes to that region, but was mistakenly using
a bare 'data' instead of '*data'. Also, data is declared as void **,
so we need a cast to turn it into a byte pointer so we can actually do
pointer comparisons.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
(cherry picked from commit 1559a94395258fd73e369f1a2c98a44bfe21a486)
Signed-off-by: Julien Cristau <jcristau@debian.org>
-rw-r--r-- | os/access.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/os/access.c b/os/access.c index e5a067220..61624fdf7 100644 --- a/os/access.c +++ b/os/access.c @@ -1335,7 +1335,7 @@ GetHosts(void **data, int *pnHosts, int *pLen, BOOL * pEnabled) } for (host = validhosts; host; host = host->next) { len = host->len; - if ((ptr + sizeof(xHostEntry) + len) > (data + n)) + if ((ptr + sizeof(xHostEntry) + len) > ((unsigned char *) *data + n)) break; ((xHostEntry *) ptr)->family = host->family; ((xHostEntry *) ptr)->length = len; |