From e56dfc5c2c97e1429924c44acce56bde8486ac8b Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 2 Mar 2013 09:16:10 +0000 Subject: [PATCH] aklog: Fix improper use of readlink readlink doesn't NUL terminate its return string, so it is up to us to do so. Caught by coverity (#985739) Reviewed-on: http://gerrit.openafs.org/9347 Reviewed-by: Derrick Brashear Tested-by: BuildBot Reviewed-by: Jeffrey Altman (cherry picked from commit 2fac53522e7ef5b3a376e191bffdc1f6784e6995) Change-Id: I9d47a6a7cbc86fba3f68f7e47c5d7a0fb924781f Reviewed-on: http://gerrit.openafs.org/11035 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Chas Williams - CONTRACTOR Reviewed-by: Stephan Wiesand --- src/aklog/aklog.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/aklog/aklog.c b/src/aklog/aklog.c index c282c24712..7d3e7cd933 100644 --- a/src/aklog/aklog.c +++ b/src/aklog/aklog.c @@ -1211,12 +1211,16 @@ next_path(char *origpath) ? elast_comp - last_comp : strlen(last_comp); strncat(pathtocheck, last_comp, len); memset(linkbuf, 0, sizeof(linkbuf)); - if ((link = (readlink(pathtocheck, linkbuf, - sizeof(linkbuf)) > 0))) { + link = readlink(pathtocheck, linkbuf, sizeof(linkbuf)-1); + + if (link > 0) { + linkbuf[link] = '\0'; /* NUL terminate string */ + if (++symlinkcount > MAXSYMLINKS) { fprintf(stderr, "%s: %s\n", progname, strerror(ELOOP)); exit(AKLOG_BADPATH); } + memset(tmpbuf, 0, sizeof(tmpbuf)); if (elast_comp) strcpy(tmpbuf, elast_comp);