Message ID | 20221116184919.2085915-1-JPEWhacker@gmail.com |
---|---|
State | Accepted, archived |
Commit | 6edf38add3c20c44efe0588e2815bb280d22e0c4 |
Headers | show |
Series | qemu-helper-native: Correctly pass program name as argv[0] | expand |
On Wed, Nov 16, 2022 at 10:49 AM Joshua Watt <JPEWhacker@gmail.com> wrote: > > The previous version of this wasn't correctly passing the program name > as argv[0], and was also over-complicated anyway because argv[] is > guaranteed to be terminated with a NULL pointer, so it can be passed > directly to the execv'd process without needing to be copied. > > Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> > --- > .../qemu/qemu-helper/qemu-oe-bridge-helper.c | 15 ++++----------- > 1 file changed, 4 insertions(+), 11 deletions(-) > > diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > index cadf2a012ac..9434e1d2699 100644 > --- a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > +++ b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > @@ -8,6 +8,7 @@ > > #include <stdio.h> > #include <unistd.h> > +#include <stdlib.h> why do we need stdlib.h header ? > > void try_program(char const* path, char** args) { > if (access(path, X_OK) == 0) { > @@ -18,22 +19,14 @@ void try_program(char const* path, char** args) { > int main(int argc, char** argv) { > char* var; > > - /* Copy arguments so that they are a NULL terminated list, skipping argv[0] > - * since it is this program name */ > - char** args = malloc(argc * sizeof(char*)); > - for (int i = 0; i < argc - 1; i++) { > - args[i] = argv[i + 1]; > - } > - args[argc - 1] = NULL; > - > var = getenv("QEMU_BRIDGE_HELPER"); > if (var && var[0] != '\0') { > - execvp(var, args); > + execvp(var, argv); > return 1; > } > > - try_program("/usr/libexec/qemu-bridge-helper", args); > - try_program("/usr/lib/qemu/qemu-bridge-helper", args); > + try_program("/usr/libexec/qemu-bridge-helper", argv); > + try_program("/usr/lib/qemu/qemu-bridge-helper", argv); > > fprintf(stderr, "No bridge helper found\n"); > return 1; > -- > 2.33.0 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#173389): https://lists.openembedded.org/g/openembedded-core/message/173389 > Mute This Topic: https://lists.openembedded.org/mt/95073277/1997914 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Steve, Please backport this to Langdale (note you'll need the other qemu-helper-native patch first) Thanks On Wed, Nov 16, 2022 at 12:49 PM Joshua Watt <jpewhacker@gmail.com> wrote: > > The previous version of this wasn't correctly passing the program name > as argv[0], and was also over-complicated anyway because argv[] is > guaranteed to be terminated with a NULL pointer, so it can be passed > directly to the execv'd process without needing to be copied. > > Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> > --- > .../qemu/qemu-helper/qemu-oe-bridge-helper.c | 15 ++++----------- > 1 file changed, 4 insertions(+), 11 deletions(-) > > diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > index cadf2a012ac..9434e1d2699 100644 > --- a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > +++ b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c > @@ -8,6 +8,7 @@ > > #include <stdio.h> > #include <unistd.h> > +#include <stdlib.h> > > void try_program(char const* path, char** args) { > if (access(path, X_OK) == 0) { > @@ -18,22 +19,14 @@ void try_program(char const* path, char** args) { > int main(int argc, char** argv) { > char* var; > > - /* Copy arguments so that they are a NULL terminated list, skipping argv[0] > - * since it is this program name */ > - char** args = malloc(argc * sizeof(char*)); > - for (int i = 0; i < argc - 1; i++) { > - args[i] = argv[i + 1]; > - } > - args[argc - 1] = NULL; > - > var = getenv("QEMU_BRIDGE_HELPER"); > if (var && var[0] != '\0') { > - execvp(var, args); > + execvp(var, argv); > return 1; > } > > - try_program("/usr/libexec/qemu-bridge-helper", args); > - try_program("/usr/lib/qemu/qemu-bridge-helper", args); > + try_program("/usr/libexec/qemu-bridge-helper", argv); > + try_program("/usr/lib/qemu/qemu-bridge-helper", argv); > > fprintf(stderr, "No bridge helper found\n"); > return 1; > -- > 2.33.0 >
diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c index cadf2a012ac..9434e1d2699 100644 --- a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c +++ b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper.c @@ -8,6 +8,7 @@ #include <stdio.h> #include <unistd.h> +#include <stdlib.h> void try_program(char const* path, char** args) { if (access(path, X_OK) == 0) { @@ -18,22 +19,14 @@ void try_program(char const* path, char** args) { int main(int argc, char** argv) { char* var; - /* Copy arguments so that they are a NULL terminated list, skipping argv[0] - * since it is this program name */ - char** args = malloc(argc * sizeof(char*)); - for (int i = 0; i < argc - 1; i++) { - args[i] = argv[i + 1]; - } - args[argc - 1] = NULL; - var = getenv("QEMU_BRIDGE_HELPER"); if (var && var[0] != '\0') { - execvp(var, args); + execvp(var, argv); return 1; } - try_program("/usr/libexec/qemu-bridge-helper", args); - try_program("/usr/lib/qemu/qemu-bridge-helper", args); + try_program("/usr/libexec/qemu-bridge-helper", argv); + try_program("/usr/lib/qemu/qemu-bridge-helper", argv); fprintf(stderr, "No bridge helper found\n"); return 1;
The previous version of this wasn't correctly passing the program name as argv[0], and was also over-complicated anyway because argv[] is guaranteed to be terminated with a NULL pointer, so it can be passed directly to the execv'd process without needing to be copied. Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> --- .../qemu/qemu-helper/qemu-oe-bridge-helper.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)