[PATCH] ppc64: allow ptrace to set TM bits
Cyril Bur
cyrilbur at gmail.com
Mon Aug 22 11:01:06 AEST 2016
On Tue, 2016-08-02 at 13:43 +0800, Simon Guo wrote:
> Hi Laurent,
> On Fri, Jul 29, 2016 at 11:51:22AM +0200, Laurent Dufour wrote:
> >
> > static int set_user_msr(struct task_struct *task, unsigned long
> > msr)
> > {
> > +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> > + if (!(task->thread.regs->msr & MSR_TM)) {
> > + /* If TM is not available, discard TM bits changes
> > */
> > + msr &= ~(MSR_TM | MSR_TS_MASK);
> > + }
> > +#endif
>
> I am not sure whether following is an issue:
> Per PowerISA, any exception/interrupt will disable MSR[TM] bit
> automatically and mark MSR_TS to be suspended when it is
> transactional. It is possible that MSR[TM] = 0 and MSR[MSR_TS] != 0
> (suspended).
>
> Will set_user_msr() be able to escape from the above?
> For example, one user space application encountered
> page fault during transaction, its task->thread.regs->msr & MSR_TM ==
> 0
> and MSR[MSR_TS] == suspended. Then it is being traced and
> set_user_msr() is invoked on it. I think it will be incorrect to
> clear its MSR_TS_MASK bits.....
>
> (suspended).ible that MSRTM] = 0 and MSR[MSR_TS] != 0> (suspended).
> Please correct me if I am wrong.
I'm not very familiar with ptracing and exactly what can happen but I
agree with Simon. Trying to change an MSR with that possible condition
stated ("It is possible that MSR[TM] = 0 and MSR[MSR_TS] !=
0> (suspended)") to MSR_TS and MSR_TS_MASK bits all 0 will cause a Bad
Thing.
Cyril
>
> Thanks,
> - Simon
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
More information about the Linuxppc-dev
mailing list