diff options
Diffstat (limited to 'fs/compat.c')
| -rw-r--r-- | fs/compat.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/fs/compat.c b/fs/compat.c index 94502dab972a..6d6f98fe64a0 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
| @@ -1485,20 +1485,15 @@ int compat_do_execve(char * filename, | |||
| 1485 | if (!bprm) | 1485 | if (!bprm) |
| 1486 | goto out_files; | 1486 | goto out_files; |
| 1487 | 1487 | ||
| 1488 | retval = -ERESTARTNOINTR; | 1488 | retval = prepare_bprm_creds(bprm); |
| 1489 | if (mutex_lock_interruptible(¤t->cred_guard_mutex)) | 1489 | if (retval) |
| 1490 | goto out_free; | 1490 | goto out_free; |
| 1491 | current->in_execve = 1; | ||
| 1492 | |||
| 1493 | retval = -ENOMEM; | ||
| 1494 | bprm->cred = prepare_exec_creds(); | ||
| 1495 | if (!bprm->cred) | ||
| 1496 | goto out_unlock; | ||
| 1497 | 1491 | ||
| 1498 | retval = check_unsafe_exec(bprm); | 1492 | retval = check_unsafe_exec(bprm); |
| 1499 | if (retval < 0) | 1493 | if (retval < 0) |
| 1500 | goto out_unlock; | 1494 | goto out_free; |
| 1501 | clear_in_exec = retval; | 1495 | clear_in_exec = retval; |
| 1496 | current->in_execve = 1; | ||
| 1502 | 1497 | ||
| 1503 | file = open_exec(filename); | 1498 | file = open_exec(filename); |
| 1504 | retval = PTR_ERR(file); | 1499 | retval = PTR_ERR(file); |
| @@ -1547,7 +1542,6 @@ int compat_do_execve(char * filename, | |||
| 1547 | /* execve succeeded */ | 1542 | /* execve succeeded */ |
| 1548 | current->fs->in_exec = 0; | 1543 | current->fs->in_exec = 0; |
| 1549 | current->in_execve = 0; | 1544 | current->in_execve = 0; |
| 1550 | mutex_unlock(¤t->cred_guard_mutex); | ||
| 1551 | acct_update_integrals(current); | 1545 | acct_update_integrals(current); |
| 1552 | free_bprm(bprm); | 1546 | free_bprm(bprm); |
| 1553 | if (displaced) | 1547 | if (displaced) |
| @@ -1567,10 +1561,7 @@ out_file: | |||
| 1567 | out_unmark: | 1561 | out_unmark: |
| 1568 | if (clear_in_exec) | 1562 | if (clear_in_exec) |
| 1569 | current->fs->in_exec = 0; | 1563 | current->fs->in_exec = 0; |
| 1570 | |||
| 1571 | out_unlock: | ||
| 1572 | current->in_execve = 0; | 1564 | current->in_execve = 0; |
| 1573 | mutex_unlock(¤t->cred_guard_mutex); | ||
| 1574 | 1565 | ||
| 1575 | out_free: | 1566 | out_free: |
| 1576 | free_bprm(bprm); | 1567 | free_bprm(bprm); |
