|
@@ -1071,6 +1071,21 @@ void set_task_comm(struct task_struct *tsk, char *buf)
|
|
|
perf_event_comm(tsk);
|
|
|
}
|
|
|
|
|
|
+static void filename_to_taskname(char *tcomm, const char *fn, unsigned int len)
|
|
|
+{
|
|
|
+ int i, ch;
|
|
|
+
|
|
|
+ /* Copies the binary name from after last slash */
|
|
|
+ for (i = 0; (ch = *(fn++)) != '\0';) {
|
|
|
+ if (ch == '/')
|
|
|
+ i = 0; /* overwrite what we wrote */
|
|
|
+ else
|
|
|
+ if (i < len - 1)
|
|
|
+ tcomm[i++] = ch;
|
|
|
+ }
|
|
|
+ tcomm[i] = '\0';
|
|
|
+}
|
|
|
+
|
|
|
int flush_old_exec(struct linux_binprm * bprm)
|
|
|
{
|
|
|
int retval;
|
|
@@ -1085,6 +1100,7 @@ int flush_old_exec(struct linux_binprm * bprm)
|
|
|
|
|
|
set_mm_exe_file(bprm->mm, bprm->file);
|
|
|
|
|
|
+ filename_to_taskname(bprm->tcomm, bprm->filename, sizeof(bprm->tcomm));
|
|
|
/*
|
|
|
* Release all of the old mmap stuff
|
|
|
*/
|
|
@@ -1116,10 +1132,6 @@ EXPORT_SYMBOL(would_dump);
|
|
|
|
|
|
void setup_new_exec(struct linux_binprm * bprm)
|
|
|
{
|
|
|
- int i, ch;
|
|
|
- const char *name;
|
|
|
- char tcomm[sizeof(current->comm)];
|
|
|
-
|
|
|
arch_pick_mmap_layout(current->mm);
|
|
|
|
|
|
/* This is the point of no return */
|
|
@@ -1130,18 +1142,7 @@ void setup_new_exec(struct linux_binprm * bprm)
|
|
|
else
|
|
|
set_dumpable(current->mm, suid_dumpable);
|
|
|
|
|
|
- name = bprm->filename;
|
|
|
-
|
|
|
- /* Copies the binary name from after last slash */
|
|
|
- for (i=0; (ch = *(name++)) != '\0';) {
|
|
|
- if (ch == '/')
|
|
|
- i = 0; /* overwrite what we wrote */
|
|
|
- else
|
|
|
- if (i < (sizeof(tcomm) - 1))
|
|
|
- tcomm[i++] = ch;
|
|
|
- }
|
|
|
- tcomm[i] = '\0';
|
|
|
- set_task_comm(current, tcomm);
|
|
|
+ set_task_comm(current, bprm->tcomm);
|
|
|
|
|
|
/* Set the new mm task size. We have to do that late because it may
|
|
|
* depend on TIF_32BIT which is only updated in flush_thread() on
|