Re: [PATCH] MIPS: Close races in TLB modify handlers.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/30/2011 04:34 PM, Maciej W. Rozycki wrote:
Hi David,

Page table entries are made invalid by writing a zero into the the PTE
slot in a page table.  This creates a race condition with the TLB
modify handlers when they are updating the PTE.

CPU0                              CPU1

Test for _PAGE_PRESENT
.                                 set to not _PAGE_PRESENT (zero)
Set to _PAGE_VALID

So now the page not present value (zero) is suddenly valid and user
space programs have access to physical page zero.

We close the race by putting the test for _PAGE_PRESENT and setting of
_PAGE_VALID into an atomic LL/SC section.  This requires more
registers than just K0 and K1 in the handlers, so we need to save some
registers to a save area and then restore them when we are done.

  Hmm, good catch, but doesn't your change pessimise the UP case?

It may, It is really just a first version of the patch. I am looking for feedback and testing.

It looks
to me like you save&  restore the scratch registers even though the race
does not apply to UP (you can't interrupt a TLB handler, not at this
stage).

That's right. I will look at trying to generate the old code sequences for non-SMP.

Thanks,
David Daney



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux