Exit exec in child process if setup fails
This commit is contained in:
parent
c8f6f13e1f
commit
b8f04d568f
58
backport-exit-exec-in-child-process-if-setup-fails.patch
Normal file
58
backport-exit-exec-in-child-process-if-setup-fails.patch
Normal 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
|
||||
|
||||
10
iproute.spec
10
iproute.spec
@ -2,7 +2,7 @@
|
||||
Name: iproute
|
||||
Version: 6.6.0
|
||||
Epoch: 1
|
||||
Release: 2
|
||||
Release: 3
|
||||
Summary: Linux network configuration utilities
|
||||
License: GPLv2+ and Public Domain
|
||||
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
|
||||
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
|
||||
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
|
||||
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
|
||||
@ -91,6 +93,12 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
|
||||
%{_mandir}/*
|
||||
|
||||
%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
|
||||
- Type:feature
|
||||
- ID:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user