Messages in this thread | | | From | Szabolcs Nagy <> | Subject | Re: [RFC PATCH for 4.21 01/16] rseq/selftests: Add reference counter to coexist with glibc | Date | Thu, 11 Oct 2018 10:37:25 +0000 |
| |
On 10/10/18 20:19, Mathieu Desnoyers wrote: > In order to integrate rseq into user-space applications, add a reference > counter field after the struct rseq TLS ABI so many rseq users can be > linked into the same application (e.g. librseq and glibc). The > reference count ensures that rseq syscall registration/unregistration > happens only for the most early/late user for each thread, thus ensuring > that rseq is registered across the lifetime of all rseq users for a > given thread. ... > +__attribute__((visibility("hidden"))) __thread > +volatile struct libc_rseq __lib_rseq_abi = { ... > +extern __attribute__((weak, alias("__lib_rseq_abi"))) __thread > +volatile struct rseq __rseq_abi; ... > @@ -70,7 +86,7 @@ int rseq_register_current_thread(void) > sigset_t oldset; > > signal_off_save(&oldset); > - if (refcount++) > + if (__lib_rseq_abi.refcount++) > goto end; > rc = sys_rseq(&__rseq_abi, sizeof(struct rseq), 0, RSEQ_SIG);
why do you use a local refcounter instead of the __rseq_abi one?
what prevents calling rseq_register_current_thread more than 4G times?
why cant the kernel see that the same address is registered again and succeed?
| |