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 <jsafrane@redhat.com>
*/
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)