* Re: [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16
@ 2018-03-19 1:02 Liuwenliang (Abbott Liu)
0 siblings, 0 replies; 3+ messages in thread
From: Liuwenliang (Abbott Liu) @ 2018-03-19 1:02 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: aryabinin, marc.zyngier, kstewart, gregkh, f.fainelli, akpm,
afzal.mohd.ma, alexander.levin, glider, dvyukov,
christoffer.dall, linux, mawilcox, pombredanne, ard.biesheuvel,
vladimir.murzin, nicolas.pitre, tglx, thgarnie, dhowells,
keescook, arnd, geert, tixy, mark.rutland, james.morse,
zhichao.huang, jinb.park7, labbott, philip, grygorii.strashko,
catalin.marinas, opendmb, kirill.shutemov, linux-arm-kernel,
linux-kernel, kasan-dev, kvmarm, linux-mm
On Sun, Mar 18, 2018 at 21:21:20PM +0800, Russell King wrote:
>On Sun, Mar 18, 2018 at 08:53:36PM +0800, Abbott Liu wrote:
>> Because in some architecture(eg. arm) instruction set, non-aligned
>> access support is not very well, so 2 1-byte checks is more
>> safer than 1 2-byte check. The impact on performance is small
>> because 16-byte accesses are not too common.
>
>This is unnecessary:
>
>1. a load of a 16-bit quantity will work as desired on modern ARMs.
>2. Networking already relies on unaligned loads to work as per x86
> (iow, an unaligned 32-bit load loads the 32-bits at the address
> even if it's not naturally aligned, and that also goes for 16-bit
> accesses.)
>
>If these are rare (which you say above - "not too common") then it's
>much better to leave the code as-is, because it will most likely be
>faster on modern CPUs, and the impact for older generation CPUs is
>likely to be low.
Thanks for your review.
OK, I am going to remove this patch in the next version.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16
2018-03-18 12:53 ` [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16 Abbott Liu
@ 2018-03-18 13:21 ` Russell King - ARM Linux
0 siblings, 0 replies; 3+ messages in thread
From: Russell King - ARM Linux @ 2018-03-18 13:21 UTC (permalink / raw)
To: Abbott Liu
Cc: aryabinin, marc.zyngier, kstewart, gregkh, f.fainelli, akpm,
afzal.mohd.ma, alexander.levin, glider, dvyukov,
christoffer.dall, linux, mawilcox, pombredanne, ard.biesheuvel,
vladimir.murzin, nicolas.pitre, tglx, thgarnie, dhowells,
keescook, arnd, geert, tixy, mark.rutland, james.morse,
zhichao.huang, jinb.park7, labbott, philip, grygorii.strashko,
catalin.marinas, opendmb, kirill.shutemov, linux-arm-kernel,
linux-kernel, kasan-dev, kvmarm, linux-mm
On Sun, Mar 18, 2018 at 08:53:36PM +0800, Abbott Liu wrote:
> Because in some architecture(eg. arm) instruction set, non-aligned
> access support is not very well, so 2 1-byte checks is more
> safer than 1 2-byte check. The impact on performance is small
> because 16-byte accesses are not too common.
This is unnecessary:
1. a load of a 16-bit quantity will work as desired on modern ARMs.
2. Networking already relies on unaligned loads to work as per x86
(iow, an unaligned 32-bit load loads the 32-bits at the address
even if it's not naturally aligned, and that also goes for 16-bit
accesses.)
If these are rare (which you say above - "not too common") then it's
much better to leave the code as-is, because it will most likely be
faster on modern CPUs, and the impact for older generation CPUs is
likely to be low.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up
According to speedtest.net: 8.21Mbps down 510kbps up
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16
2018-03-18 12:53 [PATCH v2 0/7] KASan for arm Abbott Liu
@ 2018-03-18 12:53 ` Abbott Liu
2018-03-18 13:21 ` Russell King - ARM Linux
0 siblings, 1 reply; 3+ messages in thread
From: Abbott Liu @ 2018-03-18 12:53 UTC (permalink / raw)
To: linux, aryabinin, marc.zyngier, kstewart, gregkh, f.fainelli,
liuwenliang, akpm, afzal.mohd.ma, alexander.levin
Cc: glider, dvyukov, christoffer.dall, linux, mawilcox, pombredanne,
ard.biesheuvel, vladimir.murzin, nicolas.pitre, tglx, thgarnie,
dhowells, keescook, arnd, geert, tixy, mark.rutland, james.morse,
zhichao.huang, jinb.park7, labbott, philip, grygorii.strashko,
catalin.marinas, opendmb, kirill.shutemov, linux-arm-kernel,
linux-kernel, kasan-dev, kvmarm, linux-mm
Because in some architecture(eg. arm) instruction set, non-aligned
access support is not very well, so 2 1-byte checks is more
safer than 1 2-byte check. The impact on performance is small
because 16-byte accesses are not too common.
Cc: Andrey Ryabinin <a.ryabinin@samsung.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Russell King - ARM Linux <linux@armlinux.org.uk>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Abbott Liu <liuwenliang@huawei.com>
---
mm/kasan/kasan.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
index e13d911..104839a 100644
--- a/mm/kasan/kasan.c
+++ b/mm/kasan/kasan.c
@@ -151,13 +151,20 @@ static __always_inline bool memory_is_poisoned_2_4_8(unsigned long addr,
static __always_inline bool memory_is_poisoned_16(unsigned long addr)
{
- u16 *shadow_addr = (u16 *)kasan_mem_to_shadow((void *)addr);
-
- /* Unaligned 16-bytes access maps into 3 shadow bytes. */
- if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE)))
- return *shadow_addr || memory_is_poisoned_1(addr + 15);
+ u8 *shadow_addr = (u8 *)kasan_mem_to_shadow((void *)addr);
- return *shadow_addr;
+ if (unlikely(shadow_addr[0] || shadow_addr[1])) {
+ return true;
+ } else if (likely(IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE))) {
+ /*
+ * If two shadow bytes covers 16-byte access, we don't
+ * need to do anything more. Otherwise, test the last
+ * shadow byte.
+ */
+ return false;
+ } else {
+ return memory_is_poisoned_1(addr + 15);
+ }
}
static __always_inline unsigned long bytes_is_nonzero(const u8 *start,
--
2.9.0
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-03-19 1:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-19 1:02 [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16 Liuwenliang (Abbott Liu)
-- strict thread matches above, loose matches on Subject: below --
2018-03-18 12:53 [PATCH v2 0/7] KASan for arm Abbott Liu
2018-03-18 12:53 ` [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16 Abbott Liu
2018-03-18 13:21 ` Russell King - ARM Linux
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox