diff mbox series

qemu-helper-native: Correctly pass program name as argv[0]

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

Commit Message

Joshua Watt Nov. 16, 2022, 6:49 p.m. UTC
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(-)

Comments

Khem Raj Nov. 17, 2022, 12:31 a.m. UTC | #1
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]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Joshua Watt Nov. 21, 2022, 4:27 p.m. UTC | #2
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 mbox series

Patch

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;