aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKentaro Takeda <takedakn@nttdata.co.jp>2009-02-05 03:18:11 -0500
committerJames Morris <jmorris@namei.org>2009-02-11 23:15:03 -0500
commitf9ce1f1cda8b73a36f47e424975a9dfa78b7840c (patch)
tree66138b33dbf627f99f5ec67e0e39ce15ab830080
parent523979adfa0b79d4e3aa053220c37a9233294206 (diff)
Add in_execve flag into task_struct.
This patch allows LSM modules to determine whether current process is in an execve operation or not so that they can behave differently while an execve operation is in progress. This patch is needed by TOMOYO. Please see another patch titled "LSM adapter functions." for backgrounds. Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: James Morris <jmorris@namei.org>
-rw-r--r--fs/compat.c3
-rw-r--r--fs/exec.c3
-rw-r--r--include/linux/sched.h2
3 files changed, 8 insertions, 0 deletions
diff --git a/fs/compat.c b/fs/compat.c
index 65a070e705ab..25589f8322f2 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -1402,6 +1402,7 @@ int compat_do_execve(char * filename,
1402 retval = mutex_lock_interruptible(&current->cred_exec_mutex); 1402 retval = mutex_lock_interruptible(&current->cred_exec_mutex);
1403 if (retval < 0) 1403 if (retval < 0)
1404 goto out_free; 1404 goto out_free;
1405 current->in_execve = 1;
1405 1406
1406 retval = -ENOMEM; 1407 retval = -ENOMEM;
1407 bprm->cred = prepare_exec_creds(); 1408 bprm->cred = prepare_exec_creds();
@@ -1454,6 +1455,7 @@ int compat_do_execve(char * filename,
1454 goto out; 1455 goto out;
1455 1456
1456 /* execve succeeded */ 1457 /* execve succeeded */
1458 current->in_execve = 0;
1457 mutex_unlock(&current->cred_exec_mutex); 1459 mutex_unlock(&current->cred_exec_mutex);
1458 acct_update_integrals(current); 1460 acct_update_integrals(current);
1459 free_bprm(bprm); 1461 free_bprm(bprm);
@@ -1470,6 +1472,7 @@ out_file:
1470 } 1472 }
1471 1473
1472out_unlock: 1474out_unlock:
1475 current->in_execve = 0;
1473 mutex_unlock(&current->cred_exec_mutex); 1476 mutex_unlock(&current->cred_exec_mutex);
1474 1477
1475out_free: 1478out_free:
diff --git a/fs/exec.c b/fs/exec.c
index febfd8ed6ad1..9881dc3bb488 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1278,6 +1278,7 @@ int do_execve(char * filename,
1278 retval = mutex_lock_interruptible(&current->cred_exec_mutex); 1278 retval = mutex_lock_interruptible(&current->cred_exec_mutex);
1279 if (retval < 0) 1279 if (retval < 0)
1280 goto out_free; 1280 goto out_free;
1281 current->in_execve = 1;
1281 1282
1282 retval = -ENOMEM; 1283 retval = -ENOMEM;
1283 bprm->cred = prepare_exec_creds(); 1284 bprm->cred = prepare_exec_creds();
@@ -1331,6 +1332,7 @@ int do_execve(char * filename,
1331 goto out; 1332 goto out;
1332 1333
1333 /* execve succeeded */ 1334 /* execve succeeded */
1335 current->in_execve = 0;
1334 mutex_unlock(&current->cred_exec_mutex); 1336 mutex_unlock(&current->cred_exec_mutex);
1335 acct_update_integrals(current); 1337 acct_update_integrals(current);
1336 free_bprm(bprm); 1338 free_bprm(bprm);
@@ -1349,6 +1351,7 @@ out_file:
1349 } 1351 }
1350 1352
1351out_unlock: 1353out_unlock:
1354 current->in_execve = 0;
1352 mutex_unlock(&current->cred_exec_mutex); 1355 mutex_unlock(&current->cred_exec_mutex);
1353 1356
1354out_free: 1357out_free:
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 2127e959e0f4..397c20cfb6a5 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1158,6 +1158,8 @@ struct task_struct {
1158 /* ??? */ 1158 /* ??? */
1159 unsigned int personality; 1159 unsigned int personality;
1160 unsigned did_exec:1; 1160 unsigned did_exec:1;
1161 unsigned in_execve:1; /* Tell the LSMs that the process is doing an
1162 * execve */
1161 pid_t pid; 1163 pid_t pid;
1162 pid_t tgid; 1164 pid_t tgid;
1163 1165