mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
dissect-image: fix fd leak in dissected_image_acquire_metadata()
We have to go through the "finish" label to properly close all pipes in the error path, so that we don't leak them.
This commit is contained in:
@@ -3629,18 +3629,25 @@ int dissected_image_acquire_metadata(DissectedImage *m, DissectImageFlags extra_
|
||||
r = wait_for_terminate_and_check("(sd-dissect)", child, 0);
|
||||
child = 0;
|
||||
if (r < 0)
|
||||
return r;
|
||||
goto finish;
|
||||
|
||||
n = read(error_pipe[0], &v, sizeof(v));
|
||||
if (n < 0)
|
||||
return -errno;
|
||||
if (n == sizeof(v))
|
||||
return v; /* propagate error sent to us from child */
|
||||
if (n != 0)
|
||||
return -EIO;
|
||||
|
||||
if (r != EXIT_SUCCESS)
|
||||
return -EPROTO;
|
||||
if (n < 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
if (n == sizeof(v)) {
|
||||
r = v; /* propagate error sent to us from child */
|
||||
goto finish;
|
||||
}
|
||||
if (n != 0) {
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
if (r != EXIT_SUCCESS) {
|
||||
r = -EPROTO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
free_and_replace(m->hostname, hostname);
|
||||
m->machine_id = machine_id;
|
||||
|
||||
Reference in New Issue
Block a user