Re: [PATCH 1/5] glibc: Perform rseq(2) registration at C startup and thread creation (v10)

2 messages, 2 authors, 2019-06-14 · open the first message on its own page

Re: [PATCH 1/5] glibc: Perform rseq(2) registration at C startup and thread creation (v10)

From: Florian Weimer <hidden>
Date: 2019-06-14 13:53:34

* Mathieu Desnoyers:
----- On Jun 14, 2019, at 3:42 PM, Florian Weimer fweimer@redhat.com wrote:
quoted
* Mathieu Desnoyers:
quoted
+  /* Publicize rseq registration ownership.  This must be performed
+     after rtld re-relocation, before invoking constructors of
+     preloaded libraries.  */
+  rseq_init ();
Please add a comment that IFUNC resolvers do not see the initialized
value.  I think this is okay because we currently do not support access
to extern variables in IFUNC resolvers.
Do IFUNC resolvers happen to observe the __rseq_handled address that
was internal to ld.so ?
They should observe the correct address, but they can access the
variable before initialization.  An initializer in ld.so will not have
an effect if an interposed definition initalized the variable to
something else.
If so, we could simply initialize __rseq_handled twice: early before calling
IFUNC resolvers, and after ld.so re-relocation.
No, I don't think this will make a difference.

Thanks,
Florian

Re: [PATCH 1/5] glibc: Perform rseq(2) registration at C startup and thread creation (v10)

From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date: 2019-06-14 13:59:08

----- On Jun 14, 2019, at 3:53 PM, Florian Weimer fweimer@redhat.com wrote:
* Mathieu Desnoyers:
quoted
----- On Jun 14, 2019, at 3:42 PM, Florian Weimer fweimer@redhat.com wrote:
quoted
* Mathieu Desnoyers:
quoted
+  /* Publicize rseq registration ownership.  This must be performed
+     after rtld re-relocation, before invoking constructors of
+     preloaded libraries.  */
+  rseq_init ();
Please add a comment that IFUNC resolvers do not see the initialized
value.  I think this is okay because we currently do not support access
to extern variables in IFUNC resolvers.
Do IFUNC resolvers happen to observe the __rseq_handled address that
was internal to ld.so ?
They should observe the correct address, but they can access the
variable before initialization.  An initializer in ld.so will not have
an effect if an interposed definition initalized the variable to
something else.
quoted
If so, we could simply initialize __rseq_handled twice: early before calling
IFUNC resolvers, and after ld.so re-relocation.
No, I don't think this will make a difference.
So comment it is:

  /* Publicize rseq registration ownership.  This must be performed
     after rtld re-relocation, before invoking constructors of
     preloaded libraries. IFUNC resolvers are called before this
     initialization, so they may not observe the initialized state.  */
  rseq_init ();

Thanks,

Mathieu


-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help