public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrea Arcangeli <andrea@novell.com>
To: Rik van Riel <riel@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	"Martin J. Bligh" <mbligh@aracnet.com>,
	Andrew Morton <akpm@osdl.org>,
	Linux Kernel list <linux-kernel@vger.kernel.org>
Subject: Re: ptep_establish/establish_pte needs set_pte_atomic and all set_pte must be written in asm
Date: Sun, 26 Sep 2004 02:46:08 +0200	[thread overview]
Message-ID: <20040926004608.GS3309@dualathlon.random> (raw)
In-Reply-To: <Pine.LNX.4.44.0409252030260.28582-100000@chimarrao.boston.redhat.com>

On Sat, Sep 25, 2004 at 08:31:13PM -0400, Rik van Riel wrote:
> On Sun, 26 Sep 2004, Andrea Arcangeli wrote:
> 
> > But even ppc64 is wrong as far as C is concerned,
> 
> Looks fine to me.  From include/asm-ppc64/pgtable.h
> 
> static inline void set_pte(pte_t *ptep, pte_t pte)
> {
>         if (pte_present(*ptep)) {
>                 pte_clear(ptep);
>                 flush_tlb_pending();
>         }
>         *ptep = __pte(pte_val(pte)) & ~_PAGE_HPTEFLAGS;
> }

As far as the C language is concerned that *ptep = something can be
implemented with 8 writes of 1 byte each (or alternatively with an
assembler instruction that may make the written data visible not
atomically to other cpus, despite it was written with a single opcode,
similarly to what happens if you use incl without the lock prefix). I'm
not saying such instruction exists in ppc64, but the compiler is
definitely allowed to break the above. You can blame on the compiler to
be inefficient, but you can't blame on the compiler for the security
hazard it would generate. Only the kernel would be to blame if for
whatever reason a gcc version would be underoptimized.

I perfectly know in practice the above is "almost guaranteed" to work,
it's just the "almost" that's not good enough for me ;)

anyways this is just a corollary to the x86 true bug, where a smp_wmb()
sits in between the two separate writes, which makes the x86 set_pte
obviously not atomic even in practice (not just in theory like for
ppc64 and all other archs). I thought it was better to fix the
theoretical bugs too, and they are true bugs as far as the C language is
concerned, even if they're not triggering with the current gcc
implementation of the language (and with any other decent compiler ;).

  reply	other threads:[~2004-09-26  0:49 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-25 15:54 ptep_establish/establish_pte needs set_pte_atomic and all set_pte must be written in asm Andrea Arcangeli
2004-09-25 23:33 ` Benjamin Herrenschmidt
2004-09-26  0:20   ` Andrea Arcangeli
2004-09-26  0:31     ` Rik van Riel
2004-09-26  0:46       ` Andrea Arcangeli [this message]
2004-09-26  0:59         ` Benjamin Herrenschmidt
2004-09-26  1:36           ` Andrea Arcangeli
2004-09-26  5:31             ` Benjamin Herrenschmidt
2004-09-26 20:30           ` Paul Mackerras
     [not found]             ` <20040926203640.GR2499@dualathlon.random>
2004-09-27 16:41               ` Andrea Arcangeli
2004-09-28  9:12         ` Pavel Machek
2004-09-26  0:44     ` Benjamin Herrenschmidt
2004-09-26  1:32       ` Andrea Arcangeli
2004-09-26  5:29         ` Benjamin Herrenschmidt
2004-09-26 15:39           ` Andrea Arcangeli
2004-09-26 14:41       ` Martin J. Bligh
2004-09-26 15:41         ` Andrea Arcangeli
2004-09-25 23:44 ` Rik van Riel
2004-09-26  0:31   ` Andrea Arcangeli
2004-09-26  0:37     ` Rik van Riel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040926004608.GS3309@dualathlon.random \
    --to=andrea@novell.com \
    --cc=akpm@osdl.org \
    --cc=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mbligh@aracnet.com \
    --cc=riel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox