core: fix fd leak in exec_shared_runtime_deserialize_one
The userns/netns/ipcns fdpairs were declared as plain int arrays without _cleanup_close_pair_. If exec_shared_runtime_add() fails (e.g. OOM on hashmap_ensure_put), the already-opened fds are leaked. Since exec_shared_runtime_add() uses TAKE_FD on success, the array entries are reset to -1 after ownership transfer, so adding _cleanup_close_pair_ is safe and closes the fds only when they were never consumed. Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
This commit is contained in:
+2
-1
@@ -2748,7 +2748,8 @@ int exec_shared_runtime_deserialize_compat(Unit *u, const char *key, const char
|
||||
int exec_shared_runtime_deserialize_one(Manager *m, const char *value, FDSet *fds) {
|
||||
_cleanup_free_ char *tmp_dir = NULL, *var_tmp_dir = NULL;
|
||||
char *id = NULL;
|
||||
int r, userns_fdpair[] = {-1, -1}, netns_fdpair[] = {-1, -1}, ipcns_fdpair[] = {-1, -1};
|
||||
_cleanup_close_pair_ int userns_fdpair[] = EBADF_PAIR, netns_fdpair[] = EBADF_PAIR, ipcns_fdpair[] = EBADF_PAIR;
|
||||
int r;
|
||||
const char *p, *v = ASSERT_PTR(value);
|
||||
size_t n;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user