From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shuah Khan Subject: Re: [PATCH for 5.5 2/2] rseq/selftests: Clarify rseq_prepare_unload() helper requirements Date: Fri, 20 Dec 2019 13:27:29 -0700 Message-ID: <2ad7d561-2cbc-09c2-2806-97c3be3727e2@linuxfoundation.org> References: <20191220201207.17389-1-mathieu.desnoyers@efficios.com> <20191220201207.17389-2-mathieu.desnoyers@efficios.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20191220201207.17389-2-mathieu.desnoyers@efficios.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Mathieu Desnoyers , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , "Paul E . McKenney" , Boqun Feng , "H . Peter Anvin" , Paul Turner , linux-api@vger.kernel.org, stable@vger.kernel.org, Florian Weimer , Dmitry Vyukov , "skh >> Shuah Khan" List-Id: linux-api@vger.kernel.org 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 > Signed-off-by: Mathieu Desnoyers > Cc: Shuah Khan > Cc: Florian Weimer > Cc: Thomas Gleixner > Cc: Peter Zijlstra (Intel) > Cc: "Paul E. McKenney" > Cc: Boqun Feng > Cc: "H . Peter Anvin" > Cc: Paul Turner > Cc: Dmitry Vyukov > --- > 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 > + * 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