[PATCH] powerpc: Fix invalid page flags in create TLB CAM pathfor PTE_64BIT
Chen, Tiejun
Tiejun.Chen at windriver.com
Fri Sep 24 14:54:51 EST 2010
> -----Original Message-----
> From:
> linuxppc-dev-bounces+tiejun.chen=windriver.com at lists.ozlabs.or
> g
> [mailto:linuxppc-dev-bounces+tiejun.chen=windriver.com at lists.o
zlabs.org] On Behalf Of Scott Wood
> Sent: Friday, September 24, 2010 4:34 AM
> To: Gortmaker, Paul
> Cc: linuxppc-dev at lists.ozlabs.org
> Subject: Re: [PATCH] powerpc: Fix invalid page flags in
> create TLB CAM pathfor PTE_64BIT
>
> On Thu, 23 Sep 2010 16:10:15 -0400
> Paul Gortmaker <paul.gortmaker at windriver.com> wrote:
>
> > So the possibility exists to wrongly assign the user
> MAS3_U<RWX> bits
> > to kernel (PAGE_KERNEL_X) address space via the following
> code fragment:
> >
> > if (flags & _PAGE_USER) {
> > TLBCAM[index].MAS3 |= MAS3_UX | MAS3_UR;
> > TLBCAM[index].MAS3 |= ((flags & _PAGE_RW) ? MAS3_UW : 0);
> > }
> >
> > Here is a dump of the TLB info from Simics with the above
> code present:
> > ------
> > L2 TLB1
> > GT
> SSS UUU V I
> > Row Logical Physical SS TLPID TID
> WIMGE XWR XWR F P V
> > ----- ----------------- ------------------- -- ----- -----
> ----- --- --- - - -
> > 0 c0000000-cfffffff 000000000-00fffffff 00 0 0
> M XWR XWR 0 1 1
> > 1 d0000000-dfffffff 010000000-01fffffff 00 0 0
> M XWR XWR 0 1 1
> > 2 e0000000-efffffff 020000000-02fffffff 00 0 0
> M XWR XWR 0 1 1
> >
> > Actually this conditional code was only used for two legacy
> functions:
> >
> > 1: support KGDB to set break point.
> > KGDB already dropped this; now uses its core write to
> set break point.
> >
> > 2: io_block_mapping() to create TLB in segmentation size
> (not PAGE_SIZE)
> > for device IO space.
> > This use case is also removed from the latest PowerPC kernel.
>
> io_block_mapping() went away, but the feature itself is still
> useful and might come back with something like this:
>
> http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg3
3851.html
>
> ...though I'm not sure why such mappings would ever have user access.
>
> This could end up being used for large user pages by
> something like hugetlbfs or KVM, though. I don't think we
> want to make large user pages fail, especailly if it just
Understand.
Actually the following is my original modification.
======
+#if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_PTE_64BIT)
+ /* On there _PAGE_BAP_UR is always integrated into flag,
_PAGE_KERNEL_RWX
+ * and _PAGE_USER here. So we have to only check _PAGE_BAP_UR as
the condition.
+ */
+ if (flags & _PAGE_BAP_UR) {
+#else
if (flags & _PAGE_USER) {
+#endif
But I find there is no any usage for this, except for the above #1> KGDB
and #2 io_block_mapping(). So I think it's possible to remove this
completely :)
> happens with the 32-bit page table format (which i may not
> what the person adding such a feature tests with).
>
> I don't see a generic accessor that can test PTE flags for
> user access -- in the absence of one, I guess we need an
> ifdef here. Or at least put in a comment so anyone who adds
> a userspace use knows they need to fix it.
I already notice Ben's advice and looks fine to us.
Tiejun
>
> -Scott
>
> _______________________________________________
> 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