diff mbox series

selftests/x86: Simplify the code of getting vdso base address in sgx

Message ID 20210118133321.98655-1-tianjia.zhang@linux.alibaba.com
State Superseded
Headers show
Series selftests/x86: Simplify the code of getting vdso base address in sgx | expand

Commit Message

tianjia.zhang Jan. 18, 2021, 1:33 p.m. UTC
The base address of vDSO can be obtained through the library function
`getauxval()`, so use `getauxval(AT_SYSINFO_EHDR)` instead of a custom
implementation to simplify the code.

Reported-by: Jia Zhang <zhang.jia@linux.alibaba.com>
Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
---
 tools/testing/selftests/sgx/main.c | 24 ++++--------------------
 1 file changed, 4 insertions(+), 20 deletions(-)

Comments

Jarkko Sakkinen Jan. 20, 2021, 2:34 p.m. UTC | #1
On Mon, Jan 18, 2021 at 09:33:21PM +0800, Tianjia Zhang wrote:
> The base address of vDSO can be obtained through the library function

> `getauxval()`, so use `getauxval(AT_SYSINFO_EHDR)` instead of a custom

> implementation to simplify the code.

> 

> Reported-by: Jia Zhang <zhang.jia@linux.alibaba.com>

> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>


- Remove reported-by, as there is no regression.
- Please write to the long description what the commit does.
  It's lacking that. I.e. instead of passive form: "Obtain the
  base address...".

/Jarkko

> ---

>  tools/testing/selftests/sgx/main.c | 24 ++++--------------------

>  1 file changed, 4 insertions(+), 20 deletions(-)

> 

> diff --git a/tools/testing/selftests/sgx/main.c b/tools/testing/selftests/sgx/main.c

> index 724cec700926..365d01dea67b 100644

> --- a/tools/testing/selftests/sgx/main.c

> +++ b/tools/testing/selftests/sgx/main.c

> @@ -15,6 +15,7 @@

>  #include <sys/stat.h>

>  #include <sys/time.h>

>  #include <sys/types.h>

> +#include <sys/auxv.h>

>  #include "defines.h"

>  #include "main.h"

>  #include "../kselftest.h"

> @@ -28,24 +29,6 @@ struct vdso_symtab {

>  	Elf64_Word *elf_hashtab;

>  };

>  

> -static void *vdso_get_base_addr(char *envp[])

> -{

> -	Elf64_auxv_t *auxv;

> -	int i;

> -

> -	for (i = 0; envp[i]; i++)

> -		;

> -

> -	auxv = (Elf64_auxv_t *)&envp[i + 1];

> -

> -	for (i = 0; auxv[i].a_type != AT_NULL; i++) {

> -		if (auxv[i].a_type == AT_SYSINFO_EHDR)

> -			return (void *)auxv[i].a_un.a_val;

> -	}

> -

> -	return NULL;

> -}

> -

>  static Elf64_Dyn *vdso_get_dyntab(void *addr)

>  {

>  	Elf64_Ehdr *ehdr = addr;

> @@ -162,7 +145,7 @@ static int user_handler(long rdi, long rsi, long rdx, long ursp, long r8, long r

>  	return 0;

>  }

>  

> -int main(int argc, char *argv[], char *envp[])

> +int main(int argc, char *argv[])

>  {

>  	struct sgx_enclave_run run;

>  	struct vdso_symtab symtab;

> @@ -203,7 +186,8 @@ int main(int argc, char *argv[], char *envp[])

>  	memset(&run, 0, sizeof(run));

>  	run.tcs = encl.encl_base;

>  

> -	addr = vdso_get_base_addr(envp);

> +	/* Get vDSO base address */

> +	addr = (void *)(uintptr_t)getauxval(AT_SYSINFO_EHDR);

>  	if (!addr)

>  		goto err;

>  

> -- 

> 2.19.1.3.ge56e4f7

> 

>
diff mbox series

Patch

diff --git a/tools/testing/selftests/sgx/main.c b/tools/testing/selftests/sgx/main.c
index 724cec700926..365d01dea67b 100644
--- a/tools/testing/selftests/sgx/main.c
+++ b/tools/testing/selftests/sgx/main.c
@@ -15,6 +15,7 @@ 
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
+#include <sys/auxv.h>
 #include "defines.h"
 #include "main.h"
 #include "../kselftest.h"
@@ -28,24 +29,6 @@  struct vdso_symtab {
 	Elf64_Word *elf_hashtab;
 };
 
-static void *vdso_get_base_addr(char *envp[])
-{
-	Elf64_auxv_t *auxv;
-	int i;
-
-	for (i = 0; envp[i]; i++)
-		;
-
-	auxv = (Elf64_auxv_t *)&envp[i + 1];
-
-	for (i = 0; auxv[i].a_type != AT_NULL; i++) {
-		if (auxv[i].a_type == AT_SYSINFO_EHDR)
-			return (void *)auxv[i].a_un.a_val;
-	}
-
-	return NULL;
-}
-
 static Elf64_Dyn *vdso_get_dyntab(void *addr)
 {
 	Elf64_Ehdr *ehdr = addr;
@@ -162,7 +145,7 @@  static int user_handler(long rdi, long rsi, long rdx, long ursp, long r8, long r
 	return 0;
 }
 
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
 {
 	struct sgx_enclave_run run;
 	struct vdso_symtab symtab;
@@ -203,7 +186,8 @@  int main(int argc, char *argv[], char *envp[])
 	memset(&run, 0, sizeof(run));
 	run.tcs = encl.encl_base;
 
-	addr = vdso_get_base_addr(envp);
+	/* Get vDSO base address */
+	addr = (void *)(uintptr_t)getauxval(AT_SYSINFO_EHDR);
 	if (!addr)
 		goto err;