|
|
Message-ID: <57F2B105.9050400@intel.com>
Date: Mon, 3 Oct 2016 12:27:01 -0700
From: Dave Hansen <dave.hansen@...el.com>
To: kernel-hardening@...ts.openwall.com
Cc: keescook@...omium.org, Elena Reshetova <elena.reshetova@...el.com>,
Hans Liljestrand <ishkamiel@...il.com>, David Windsor <dwindsor@...il.com>
Subject: Re: [RFC PATCH 12/13] x86: x86 implementation for
HARDENED_ATOMIC
On 10/02/2016 11:41 PM, Elena Reshetova wrote:
> static __always_inline void atomic_add(int i, atomic_t *v)
> {
> - asm volatile(LOCK_PREFIX "addl %1,%0"
> + asm volatile(LOCK_PREFIX "addl %1,%0\n"
> +
> +#ifdef CONFIG_HARDENED_ATOMIC
> + "jno 0f\n"
> + LOCK_PREFIX "subl %1,%0\n"
> + "int $4\n0:\n"
> + _ASM_EXTABLE(0b, 0b)
> +#endif
> +
> + : "+m" (v->counter)
> + : "ir" (i));
> +}
Rather than doing all this assembly and exception stuff, could we just do:
static __always_inline void atomic_add(int i, atomic_t *v)
{
if (atomic_add_unless(v, a, INT_MAX))
BUG_ON_OVERFLOW_FOO()...
}
That way, there's also no transient state where somebody can have
observed the overflow before it is fixed up. Granted, this
cmpxchg-based operation _is_ more expensive than the fast-path locked addl.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.