From acbed86127d5d81d082fa5b90cac13a4f84f877e Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Mon, 22 Aug 2011 10:48:58 +0200 Subject: [PATCH] cgrulesengd: Fixed processing of symlinked executables. when an executable is symlinked and the symlink is executed, /proc/PID/status contains name of the symlink, while /proc/PID/exe points to the real executable name. cgrulesengd considered this case as error and did not trigger any rule for this exec(). With this patch, cgrulesengd uses name of /proc/PID/exe as the executable in this case. Signed-off-by: Jan Safranek --- src/api.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/api.c b/src/api.c index 52d6fe70..09e6353e 100644 --- a/src/api.c +++ b/src/api.c @@ -3696,11 +3696,24 @@ int cgroup_get_procname_from_procfs(pid_t pid, char **procname) */ ret = cg_get_procname_from_proc_cmdline(pid, pname_status, &pname_cmdline); - if (!ret) + if (!ret) { *procname = pname_cmdline; + free(pname_status); + return 0; + } + /* + * The above strncmp() is not 0 also if executing a symbolic link, + * /proc/pid/exe points to real executable name then. + * Return it as the last resort. + */ free(pname_status); - return ret; + *procname = strdup(buf); + if (*procname == NULL) { + last_errno = errno; + return ECGOTHER; + } + return 0; } int cgroup_register_unchanged_process(pid_t pid, int flags) -- 2.47.2