[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XEN PATCH v2 RESEND 1/1] tools/libxl: search PATH for QEMU if `QEMU_XEN_PATH` is not absolute


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Hongbo <hehongbo@xxxxxxxx>
  • Date: Sat, 5 Apr 2025 19:10:55 +0800
  • Cc: Hongbo <hehongbo@xxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>
  • Delivery-date: Sat, 05 Apr 2025 11:11:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Ui-outboundreport: notjunk:1;M01:P0:sXq0PRCMVHw=;XodLUuNKekH1mSifk9Iw/Wq4cSV ekkC5IY8IXYFqcY2DdTBk4rCBYA5KDzKchjXVA3yFGRMQMz5kJALxneSpfAKCXe8zSCCAbXN2 FbLy87chDaKDrhABgHsIgTon95CWZuHHV+jWbDgFImwZXZdIhekua/WEvq5SlPchPwIVVPHPn ihKd79r/Lx8ifVHa61iL2Mn2HmrWK8Jd1l1OCRx9aKk10iQRmxwvXvfxtP8LkyEztyHroKcXJ VIRkpzj0e5oaWWCnBdF4eVDtEc8AAwD5ypU8y4KegHtVfT4eVxXyMa8hZZQ6DznL7Ga+1wL+s 9whZ5D2uRJ1jmY/qcbA/uDKq5m69u+/1HyLDTuROBfpO/AxGqEFKsEKO8rdhv+g5wuzI3DBUu XMdqbSrTCUMZJUwsV0KlvUZ1qjDvXEdB3HR5fpDJzN77hDaNCcvuj+RHT4ZG/u2GIVzsuu28M TbyLDlHyHxxWwOw54uBSPuwJK2Z0fMwUOShKbPsQX9uLJM64kl0S/IGH51Fqvzz1AJUv1B+sU 4MVCiVCI/FLbFMbW5spZcRPQz6G//m1NHIXsdXmd+t5zk07tlN79NyeVawTCyLTuk0giN6Kzh HjP2/7BJRDq395YniXZIWVZp5Mpzfgg7Wp0ARxEX9ENN0mQ4VIHofIq2b0EDZ2a8HcHhMg8Vn TiHGRqzkxzzOaPhNLpizzVpeopnvLkoQWja+7e2fJC3UbWwNmIzRNXzCOF1Spk/KAupzg/e8B EIDkj0tOuajoI5j7KgoGKggOKjndqhHODram2KHL9vbJ1ii2IOYWF6cLWvEc9FDi1cadw67U+ mtR7DQ/mbwECfOmFaZdklHI+2N3Ru7fkLl98z5is5IgsS40+C+EMBIVBVmMdyo1Fo0KpG0UAQ 5np5FRA3q2gXzAWTarX+XM5zeNheqcfaVZdcVM0x67rmKxAkU7PPGAZKc/hUDIYRvwvT11Q9E GDb6TD7lbDHusSzaER5YGybvQrumlvrQToKoQJFVcLedvRZwIZ8jLsHPuyeTnyXP5oZT7Ku9R g1iscUEhedeSBQVXNp/mfg8wjUTDz+vh98wNb7FImwPQc2GG7PFIkeQvvz4rpoH2S2RizBEaU b9YHM7sLh5sKuFlqu61Hy0x4NvEs0V39uQFbs6ld4owI0wo6TaQPSNWZzhJnFi8EPZaTnyg93 qfzot8AW1FxNH+UshlDBcAdyBTMvo/xOqd3YgkgGpAAXrAcMD+4ojrAGiZqU3MX5AgygmUjzP s3ZT6Tc5/dnLl3vgnsRcXdxowv30yeeWiD/9Rc2uH+c9aGnuJK11G3gbPpbQZ9qBo+OnB/ep3 fUN20UIjuPy9QKk8RI7/JB8gf3FzCXoyIUFOUncv9PuTZGI0xBkbnSW1IGOEsdn7FkG/PJgWJ lhnWWEQ7l7sr1ZGbJ+hcYflwt7nqRP3HHyb0nTmnTlBBa+vF0x0hA4lWWPamTOhF3JbtR1gwD jmWO0ys47BJ/OQMfirr7QVmP2a60=

`QEMU_XEN_PATH` will be configured as `qemu-system-i386` with no clue where, if
`--with-system-qemu` is set without giving a path (as matched in the case `yes`
but not `*`). However, the existence of the executable is checked by `access()`,
that will not look for anywhere in $PATH but the current directory. And since it
is possible for `qemu-system-i386` (or any other configured values) to be
executed from PATH later, we'd better find that in PATH and return the full path
for the caller to check against.

Signed-off-by: Hongbo <hehongbo@xxxxxxxx>
Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
No changes since v2. Resending to add `Reviewed-by` from Anthony PERARD.

Best regards,
Hongbo
---
CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
CC: Juergen Gross <jgross@xxxxxxxx>
---
 tools/libs/light/libxl_dm.c | 38 +++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index b193a5dc37..8f0bbd5d64 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -331,9 +331,43 @@ const char *libxl__domain_device_model(libxl__gc *gc,
         case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
             dm = libxl__abs_path(gc, "qemu-dm", libxl__private_bindir_path());
             break;
-        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
-            dm = qemu_xen_path(gc);
+        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: {
+            const char *configured_dm = qemu_xen_path(gc);
+            if (configured_dm[0] == '/')
+            {
+                dm = configured_dm;
+            }
+            else
+            {
+                const char *path_env = getenv("PATH");
+                if (!path_env)
+                {
+                    dm = configured_dm;
+                }
+                else
+                {
+                    char *path_dup = libxl__strdup(gc, path_env);
+                    char *saveptr;
+
+                    char *path = strtok_r(path_dup, ":", &saveptr);
+                    dm = NULL;
+                    while (path)
+                    {
+                        char *candidate = libxl__abs_path(gc, configured_dm, 
path);
+                        if (access(candidate, X_OK) == 0)
+                        {
+                            dm = candidate;
+                            break;
+                        }
+                        path = strtok_r(NULL, ":", &saveptr);
+                    }
+
+                    if (!dm)
+                        dm = configured_dm;
+                }
+            }
             break;
+        }
         default:
             LOG(ERROR, "invalid device model version %d",
                 info->device_model_version);
--
2.39.5 (Apple Git-154)




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.