[PATCHv2] Add a way to bypass the PLT when calling getauxval

Message ID 1495742765-1722-1-git-send-email-tuliom@linux.vnet.ibm.com
State Committed
Delegated to: Florian Weimer
Headers

Commit Message

Tulio Magno Quites Machado Filho May 25, 2017, 8:06 p.m. UTC
  2017-05-25  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>

	* include/sys/auxv.h (__getauxval): Add a prototype and its
	libc_hidden_proto.
	* misc/getauxval.c (__getauxval): Use libc_hidden_def.
---
 include/sys/auxv.h | 7 +++++++
 misc/getauxval.c   | 1 +
 2 files changed, 8 insertions(+)
  

Comments

Tulio Magno Quites Machado Filho June 9, 2017, 1:13 p.m. UTC | #1
Ping!

Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com> writes:

> 2017-05-25  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
>
> 	* include/sys/auxv.h (__getauxval): Add a prototype and its
> 	libc_hidden_proto.
> 	* misc/getauxval.c (__getauxval): Use libc_hidden_def.
> ---
>  include/sys/auxv.h | 7 +++++++
>  misc/getauxval.c   | 1 +
>  2 files changed, 8 insertions(+)
>
> diff --git a/include/sys/auxv.h b/include/sys/auxv.h
> index dede2c3..d46008e 100644
> --- a/include/sys/auxv.h
> +++ b/include/sys/auxv.h
> @@ -1 +1,8 @@
>  #include <misc/sys/auxv.h>
> +
> +#ifndef _ISOMAC
> +
> +extern __typeof(getauxval) __getauxval;
> +libc_hidden_proto (__getauxval)
> +
> +#endif  /* !_ISOMAC */
> diff --git a/misc/getauxval.c b/misc/getauxval.c
> index c83fbce..14f4298 100644
> --- a/misc/getauxval.c
> +++ b/misc/getauxval.c
> @@ -43,3 +43,4 @@ __getauxval (unsigned long int type)
>  }
>
>  weak_alias (__getauxval, getauxval)
> +libc_hidden_def (__getauxval)
> -- 
> 2.1.0
>
  
H.J. Lu June 9, 2017, 1:29 p.m. UTC | #2
On Fri, Jun 9, 2017 at 6:13 AM, Tulio Magno Quites Machado Filho
<tuliom@linux.vnet.ibm.com> wrote:
> Ping!
>
> Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com> writes:
>
>> 2017-05-25  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
>>
>>       * include/sys/auxv.h (__getauxval): Add a prototype and its
>>       libc_hidden_proto.
>>       * misc/getauxval.c (__getauxval): Use libc_hidden_def.
>> ---
>>  include/sys/auxv.h | 7 +++++++
>>  misc/getauxval.c   | 1 +
>>  2 files changed, 8 insertions(+)
>>
>> diff --git a/include/sys/auxv.h b/include/sys/auxv.h
>> index dede2c3..d46008e 100644
>> --- a/include/sys/auxv.h
>> +++ b/include/sys/auxv.h
>> @@ -1 +1,8 @@
>>  #include <misc/sys/auxv.h>
>> +
>> +#ifndef _ISOMAC
>> +
>> +extern __typeof(getauxval) __getauxval;
>> +libc_hidden_proto (__getauxval)
>> +
>> +#endif  /* !_ISOMAC */
>> diff --git a/misc/getauxval.c b/misc/getauxval.c
>> index c83fbce..14f4298 100644
>> --- a/misc/getauxval.c
>> +++ b/misc/getauxval.c
>> @@ -43,3 +43,4 @@ __getauxval (unsigned long int type)
>>  }
>>
>>  weak_alias (__getauxval, getauxval)
>> +libc_hidden_def (__getauxval)
>> --
>> 2.1.0
>>

Which one is better?

https://sourceware.org/ml/libc-alpha/2017-06/msg00332.html
  
Florian Weimer June 9, 2017, 1:33 p.m. UTC | #3
"Tulio Magno Quites Machado Filho" <tuliom@linux.vnet.ibm.com> writes:

> +extern __typeof(getauxval) __getauxval;

Missing space before paren.

> diff --git a/misc/getauxval.c b/misc/getauxval.c
> index c83fbce..14f4298 100644
> --- a/misc/getauxval.c
> +++ b/misc/getauxval.c
> @@ -43,3 +43,4 @@ __getauxval (unsigned long int type)
>  }
>  
>  weak_alias (__getauxval, getauxval)
> +libc_hidden_def (__getauxval)

Looks good.

Thanks,
Florian
  
Florian Weimer June 9, 2017, 1:34 p.m. UTC | #4
"H.J. Lu" <hjl.tools@gmail.com> writes:

>>> diff --git a/misc/getauxval.c b/misc/getauxval.c
>>> index c83fbce..14f4298 100644
>>> --- a/misc/getauxval.c
>>> +++ b/misc/getauxval.c
>>> @@ -43,3 +43,4 @@ __getauxval (unsigned long int type)
>>>  }
>>>
>>>  weak_alias (__getauxval, getauxval)
>>> +libc_hidden_def (__getauxval)
>>> --
>>> 2.1.0
>>>
>
> Which one is better?
>
> https://sourceware.org/ml/libc-alpha/2017-06/msg00332.html

Tulio's patch is better because getauxval references could lead to
namespace violations.

Thanks,
Florian
  
Tulio Magno Quites Machado Filho June 9, 2017, 2:59 p.m. UTC | #5
Florian Weimer <fweimer@redhat.com> writes:

> "Tulio Magno Quites Machado Filho" <tuliom@linux.vnet.ibm.com> writes:
>
>> +extern __typeof(getauxval) __getauxval;
>
> Missing space before paren.

Fixed locally.

>> diff --git a/misc/getauxval.c b/misc/getauxval.c
>> index c83fbce..14f4298 100644
>> --- a/misc/getauxval.c
>> +++ b/misc/getauxval.c
>> @@ -43,3 +43,4 @@ __getauxval (unsigned long int type)
>>  }
>>  
>>  weak_alias (__getauxval, getauxval)
>> +libc_hidden_def (__getauxval)
>
> Looks good.

I'll push this patch with the fix.

Thanks!
  

Patch

diff --git a/include/sys/auxv.h b/include/sys/auxv.h
index dede2c3..d46008e 100644
--- a/include/sys/auxv.h
+++ b/include/sys/auxv.h
@@ -1 +1,8 @@ 
 #include <misc/sys/auxv.h>
+
+#ifndef _ISOMAC
+
+extern __typeof(getauxval) __getauxval;
+libc_hidden_proto (__getauxval)
+
+#endif  /* !_ISOMAC */
diff --git a/misc/getauxval.c b/misc/getauxval.c
index c83fbce..14f4298 100644
--- a/misc/getauxval.c
+++ b/misc/getauxval.c
@@ -43,3 +43,4 @@  __getauxval (unsigned long int type)
 }
 
 weak_alias (__getauxval, getauxval)
+libc_hidden_def (__getauxval)