From: Sage Weil Date: Sat, 26 Apr 2014 02:46:24 +0000 (-0700) Subject: mds: terminate readlink result in resapwn X-Git-Tag: v0.80~13^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F1729%2Fhead;p=ceph.git mds: terminate readlink result in resapwn readlink(2) does not null terminate the buffer; we need to do that. Fixes: #7966 Signed-off-by: Sage Weil --- diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 1d9015a22eb..4509cea214e 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1702,8 +1702,9 @@ void MDS::respawn() /* Determine the path to our executable, try to read * linux-specific /proc/ path first */ char exe_path[PATH_MAX]; - ssize_t exe_path_bytes = readlink("/proc/self/exe", exe_path, sizeof(exe_path)); - if (exe_path_bytes == -1) { + ssize_t exe_path_bytes = readlink("/proc/self/exe", exe_path, + sizeof(exe_path) - 1); + if (exe_path_bytes < 0) { /* Print CWD for the user's interest */ char buf[PATH_MAX]; char *cwd = getcwd(buf, sizeof(buf)); @@ -1712,6 +1713,8 @@ void MDS::respawn() /* Fall back to a best-effort: just running in our CWD */ strncpy(exe_path, orig_argv[0], sizeof(exe_path) - 1); + } else { + exe_path[exe_path_bytes] = '\0'; } dout(1) << " exe_path " << exe_path << dendl;