Exit exec in child process if setup fails

This commit is contained in:
zhangyaqi 2024-05-22 16:05:57 +08:00
parent c8f6f13e1f
commit b8f04d568f
2 changed files with 67 additions and 1 deletions

View File

@ -0,0 +1,58 @@
From 70ba338cd8314410380b8bdae9e5f302e8e98039 Mon Sep 17 00:00:00 2001
From: Yedaya Katsman <yedaya.ka@gmail.com>
Date: Tue, 23 Apr 2024 21:38:20 +0300
Subject: ip: Exit exec in child process if setup fails
Reference: https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=70ba338cd8314410380b8bdae9e5f302e8e98039
If we forked, returning from the function will make the calling code to
continue in both the child and parent process. Make cmd_exec exit if
setup failed and it forked already.
An example of issues this causes, where a failure in setup causes
multiple unnecessary tries:
```
$ ip netns
ef
ab
$ ip -all netns exec ls
netns: ef
setting the network namespace "ef" failed: Operation not permitted
netns: ab
setting the network namespace "ab" failed: Operation not permitted
netns: ab
setting the network namespace "ab" failed: Operation not permitted
```
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/exec.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/exec.c b/lib/exec.c
index 9b1c8f4..5bd3e2d 100644
--- a/lib/exec.c
+++ b/lib/exec.c
@@ -36,8 +36,13 @@ int cmd_exec(const char *cmd, char **argv, bool do_fork,
}
}
- if (setup && setup(arg))
+ if (setup && setup(arg)) {
+ if (do_fork) {
+ /* In child, nothing to do */
+ _exit(1);
+ }
return -1;
+ }
if (execvp(cmd, argv) < 0)
fprintf(stderr, "exec of \"%s\" failed: %s\n",
--
2.27.0

View File

@ -2,7 +2,7 @@
Name: iproute Name: iproute
Version: 6.6.0 Version: 6.6.0
Epoch: 1 Epoch: 1
Release: 2 Release: 3
Summary: Linux network configuration utilities Summary: Linux network configuration utilities
License: GPLv2+ and Public Domain License: GPLv2+ and Public Domain
URL: https://kernel.org/pub/linux/utils/net/iproute2/ URL: https://kernel.org/pub/linux/utils/net/iproute2/
@ -14,6 +14,8 @@ Patch2: bugfix-iproute2-change-proc-to-ipnetnsproc-which-is-private.patc
patch6000: backport-rdma-Update-uapi-headers.patch patch6000: backport-rdma-Update-uapi-headers.patch
patch6001: backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch patch6001: backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch
patch6002: backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch patch6002: backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch
patch6003: backport-exit-exec-in-child-process-if-setup-fails.patch
# https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=70ba338cd8314410380b8bdae9e5f302e8e98039
Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
@ -91,6 +93,12 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
%{_mandir}/* %{_mandir}/*
%changelog %changelog
* Wed May 22 2024 zhangyaqi <zhangyaqi@kylinos.cn> - 1:6.6.0-3
- Type:feature
- ID:NA
- SUG:NA
- DESC:Exit exec in child process if setup fails
* Mon Feb 26 2024 Ran Zhou <zhouran10@h-partners.com> - 1:6.6.0-2 * Mon Feb 26 2024 Ran Zhou <zhouran10@h-partners.com> - 1:6.6.0-2
- Type:feature - Type:feature
- ID:NA - ID:NA