From 5d497826f92c2000e68a706a87276432890a1fab Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 25 Apr 2014 19:46:24 -0700 Subject: [PATCH] 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 --- src/mds/MDS.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 1d9015a22eb61..4509cea214e8b 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; -- 2.39.5