qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/2] util/getauxval: Ensure setting errno if not found


From: Richard Henderson
Subject: Re: [PATCH 1/2] util/getauxval: Ensure setting errno if not found
Date: Tue, 23 Jul 2024 09:24:29 +1000
User-agent: Mozilla Thunderbird

On 7/21/24 19:08, Vivian Wang wrote:
Sometimes zero is a valid value for getauxval (e.g. AT_EXECFD). Make
sure that we can distinguish between a valid zero value and a not found
entry by setting errno.

Ignore getauxval from sys/auxv.h on glibc < 2.19 because it does not set
errno.

Signed-off-by: Vivian Wang <uwu@dram.page>
---
  util/getauxval.c | 14 ++++++++++++--
  1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/util/getauxval.c b/util/getauxval.c
index b124107d61..f1008bdc59 100644
--- a/util/getauxval.c
+++ b/util/getauxval.c
@@ -24,7 +24,13 @@
#include "qemu/osdep.h" -#ifdef CONFIG_GETAUXVAL
+/* If glibc < 2.19, getauxval can't be used because it does not set errno if
+   entry is not found. */
+#if defined(CONFIG_GETAUXVAL) && \
+    (!defined(__GLIBC__) \
+        || __GLIBC__ > 2 \
+        || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19))

Version 2.19 is so long ago that all supported OS releases have something newer. For Alpine Linux using musl, the first commit of getauxval had the errno setting.

Therefore we don't need this check.

@@ -95,6 +101,7 @@ unsigned long qemu_getauxval(unsigned long type)
          }
      }
+ errno = ENOENT;
      return 0;
  }

Ok.

@@ -104,7 +111,9 @@ unsigned long qemu_getauxval(unsigned long type)
  unsigned long qemu_getauxval(unsigned long type)
  {
      unsigned long aux = 0;
-    elf_aux_info(type, &aux, sizeof(aux));
+    int ret = elf_aux_info(type, &aux, sizeof(aux));
+    if (ret != 0)
+        errno = ret;

Braces required.

      return aux;
  }
@@ -112,6 +121,7 @@ unsigned long qemu_getauxval(unsigned long type) unsigned long qemu_getauxval(unsigned long type)
  {
+    errno = ENOSYS;
      return 0;
  }

Ok.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]