mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
namespace: Fix extension release memory leak
In apply_one_mount(), in the MOUNT_EXTENSION_DIRECTORY case, char **extension_release was used as a return pointer twice but only cleaned up once in the end. Fix it by removing duplicate code that was causing this issue. Fixes issue introduced in55ea4ef096
. (cherry picked from commit010ea061fc
)
This commit is contained in:
parent
54c6907e95
commit
83f3094173
@ -1565,12 +1565,24 @@ static int apply_one_mount(
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to extract extension name from %s: %m", mount_entry_source(m));
|
||||
|
||||
r = load_extension_release_pairs(mount_entry_source(m), IMAGE_SYSEXT, extension_name, /* relax_extension_release_check= */ false, &extension_release);
|
||||
r = load_extension_release_pairs(
|
||||
mount_entry_source(m),
|
||||
IMAGE_SYSEXT,
|
||||
extension_name,
|
||||
/* relax_extension_release_check= */ false,
|
||||
&extension_release);
|
||||
if (r == -ENOENT) {
|
||||
r = load_extension_release_pairs(mount_entry_source(m), IMAGE_CONFEXT, extension_name, /* relax_extension_release_check= */ false, &extension_release);
|
||||
r = load_extension_release_pairs(
|
||||
mount_entry_source(m),
|
||||
IMAGE_CONFEXT,
|
||||
extension_name,
|
||||
/* relax_extension_release_check= */ false,
|
||||
&extension_release);
|
||||
if (r >= 0)
|
||||
class = IMAGE_CONFEXT;
|
||||
}
|
||||
if (r == -ENOENT && m->ignore)
|
||||
return 0;
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to acquire 'extension-release' data of extension tree %s: %m", mount_entry_source(m));
|
||||
|
||||
@ -1585,12 +1597,6 @@ static int apply_one_mount(
|
||||
if (isempty(host_os_release_id))
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "'ID' field not found or empty in 'os-release' data of OS tree '%s'.", empty_to_root(root_directory));
|
||||
|
||||
r = load_extension_release_pairs(mount_entry_source(m), class, extension_name, /* relax_extension_release_check= */ false, &extension_release);
|
||||
if (r == -ENOENT && m->ignore)
|
||||
return 0;
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to parse directory %s extension-release metadata: %m", extension_name);
|
||||
|
||||
r = extension_release_validate(
|
||||
extension_name,
|
||||
host_os_release_id,
|
||||
|
Loading…
Reference in New Issue
Block a user