diff options
| author | Zygmunt Krynicki <me@zygoon.pl> | 2026-05-04 13:13:24 +0200 |
|---|---|---|
| committer | John Johansen <john.johansen@canonical.com> | 2026-06-13 20:14:08 -0700 |
| commit | 7306c41672487a6c28430714be063bc6942c28f2 (patch) | |
| tree | 67db6e93f58c0e86169c0e8ed2bde993ff0c0dbb /security | |
| parent | 45cf568241048e560a81aa2053f06a62069f5640 (diff) | |
| download | linux-7306c41672487a6c28430714be063bc6942c28f2.tar.gz linux-7306c41672487a6c28430714be063bc6942c28f2.zip | |
apparmor: release exe file resources on path failure
get_current_exe_path() takes both an exe_file reference and a path
reference before resolving the path name. If aa_path_name() failed, it
returned immediately and leaked both references.
Route the failure through the common cleanup path so fput() and path_put()
always run after the references are acquired.
Fixes: 8d34e16f7f2b ("apparmor: userns: Add support for execpath in userns")
Reviewed-by: Ryan Lee <ryan.lee@canonical.com>
Signed-off-by: Zygmunt Krynicki <me@zygoon.pl>
Signed-off-by: John Johansen <john.johansen@canonical.com>
Diffstat (limited to 'security')
| -rw-r--r-- | security/apparmor/task.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/security/apparmor/task.c b/security/apparmor/task.c index 0db0e81b4600..6445cb5f8526 100644 --- a/security/apparmor/task.c +++ b/security/apparmor/task.c @@ -313,9 +313,12 @@ static const char *get_current_exe_path(char *buffer, int buffer_size) p = exe_file->f_path; path_get(&p); - if (aa_path_name(&p, FLAG_VIEW_SUBNS, buffer, &path_str, NULL, NULL)) - return ERR_PTR(-ENOMEM); + if (aa_path_name(&p, FLAG_VIEW_SUBNS, buffer, &path_str, NULL, NULL)) { + path_str = ERR_PTR(-ENOMEM); + goto out; + } +out: fput(exe_file); path_put(&p); |
