diff options
| -rw-r--r-- | fs/binfmt_flat.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c index 697f6b5f1313..e92f229e3c6e 100644 --- a/fs/binfmt_flat.c +++ b/fs/binfmt_flat.c | |||
| @@ -828,15 +828,22 @@ static int load_flat_shared_library(int id, struct lib_info *libs) | |||
| 828 | if (IS_ERR(bprm.file)) | 828 | if (IS_ERR(bprm.file)) |
| 829 | return res; | 829 | return res; |
| 830 | 830 | ||
| 831 | bprm.cred = prepare_exec_creds(); | ||
| 832 | res = -ENOMEM; | ||
| 833 | if (!bprm.cred) | ||
| 834 | goto out; | ||
| 835 | |||
| 831 | res = prepare_binprm(&bprm); | 836 | res = prepare_binprm(&bprm); |
| 832 | 837 | ||
| 833 | if (res <= (unsigned long)-4096) | 838 | if (res <= (unsigned long)-4096) |
| 834 | res = load_flat_file(&bprm, libs, id, NULL); | 839 | res = load_flat_file(&bprm, libs, id, NULL); |
| 835 | if (bprm.file) { | 840 | |
| 836 | allow_write_access(bprm.file); | 841 | abort_creds(bprm.cred); |
| 837 | fput(bprm.file); | 842 | |
| 838 | bprm.file = NULL; | 843 | out: |
| 839 | } | 844 | allow_write_access(bprm.file); |
| 845 | fput(bprm.file); | ||
| 846 | |||
| 840 | return(res); | 847 | return(res); |
| 841 | } | 848 | } |
| 842 | 849 | ||
