----- On Dec 20, 2019, at 3:27 PM, Shuah Khan skhan@xxxxxxxxxxxxxxxxxxx wrote: > Hi Mathieu, > > On 12/20/19 1:12 PM, Mathieu Desnoyers wrote: >> The rseq.h UAPI now documents that the rseq_cs field must be cleared >> before reclaiming memory that contains the targeted struct rseq_cs, but >> also that the rseq_cs field must be cleared before reclaiming memory of >> the code pointed to by the rseq_cs start_ip and post_commit_offset >> fields. >> >> While we can expect that use of dlclose(3) will typically unmap >> both struct rseq_cs and its associated code at once, nothing would >> theoretically prevent a JIT from reclaiming the code without >> reclaiming the struct rseq_cs, which would erroneously allow the >> kernel to consider new code which is not a rseq critical section >> as a rseq critical section following a code reclaim. >> >> Suggested-by: Florian Weimer <fw@xxxxxxxxxxxxx> >> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> >> Cc: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> >> Cc: Florian Weimer <fw@xxxxxxxxxxxxx> >> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> >> Cc: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> >> Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxx> >> Cc: Boqun Feng <boqun.feng@xxxxxxxxx> >> Cc: "H . Peter Anvin" <hpa@xxxxxxxxx> >> Cc: Paul Turner <pjt@xxxxxxxxxx> >> Cc: Dmitry Vyukov <dvyukov@xxxxxxxxxx> >> --- >> tools/testing/selftests/rseq/rseq.h | 12 +++++++----- >> 1 file changed, 7 insertions(+), 5 deletions(-) >> >> diff --git a/tools/testing/selftests/rseq/rseq.h >> b/tools/testing/selftests/rseq/rseq.h >> index d40d60e7499e..15cbd51d0818 100644 >> --- a/tools/testing/selftests/rseq/rseq.h >> +++ b/tools/testing/selftests/rseq/rseq.h >> @@ -149,11 +149,13 @@ static inline void rseq_clear_rseq_cs(void) >> /* >> * rseq_prepare_unload() should be invoked by each thread executing a rseq >> * critical section at least once between their last critical section and >> - * library unload of the library defining the rseq critical section >> - * (struct rseq_cs). This also applies to use of rseq in code generated by >> - * JIT: rseq_prepare_unload() should be invoked at least once by each >> - * thread executing a rseq critical section before reclaim of the memory >> - * holding the struct rseq_cs. >> + * library unload of the library defining the rseq critical section (struct >> + * rseq_cs) or the code refered to by the struct rseq_cs start_ip and > > Nit: referred instead of refered Good catch. I've done the same error in patch 1/2. I'll update both and resend. Thanks! Mathieu > >> + * post_commit_offset fields. This also applies to use of rseq in code >> + * generated by JIT: rseq_prepare_unload() should be invoked at least once by >> + * each thread executing a rseq critical section before reclaim of the memory >> + * holding the struct rseq_cs or reclaim of the code pointed to by struct >> + * rseq_cs start_ip and post_commit_offset fields. >> */ >> static inline void rseq_prepare_unload(void) >> { >> > > thanks, > -- Shuah -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com