OSDN Git Service

BACKPORT: mm/kasan: get rid of ->state in struct kasan_alloc_meta
authorAndrey Ryabinin <aryabinin@virtuozzo.com>
Tue, 2 Aug 2016 21:02:52 +0000 (14:02 -0700)
committerPaul Lawrence <paullawrence@google.com>
Thu, 14 Dec 2017 16:21:29 +0000 (08:21 -0800)
commit508ad7fe8983756073061f15891ecf2abde396df
tree13e4f66ea21f94d433078febd9ce41e962d20a5b
parent1f93a556dfaf2e7da5a284d5e58088fcea46ffe9
BACKPORT: mm/kasan: get rid of ->state in struct kasan_alloc_meta

The state of object currently tracked in two places - shadow memory, and
the ->state field in struct kasan_alloc_meta.  We can get rid of the
latter.  The will save us a little bit of memory.  Also, this allow us
to move free stack into struct kasan_alloc_meta, without increasing
memory consumption.  So now we should always know when the last time the
object was freed.  This may be useful for long delayed use-after-free
bugs.

As a side effect this fixes following UBSAN warning:
UBSAN: Undefined behaviour in mm/kasan/quarantine.c:102:13
member access within misaligned address ffff88000d1efebc for type 'struct qlist_node'
which requires 8 byte alignment

Link: http://lkml.kernel.org/r/1470062715-14077-5-git-send-email-aryabinin@virtuozzo.com
Reported-by: kernel test robot <xiaolong.ye@intel.com>
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Bug: 64145065
(cherry-picked from b3cbd9bf77cd1888114dbee1653e79aa23fd4068)
Change-Id: Iaa4959a78ffd2e49f9060099df1fb32483df3085
Signed-off-by: Paul Lawrence <paullawrence@google.com>
include/linux/kasan.h
mm/kasan/kasan.c
mm/kasan/kasan.h
mm/kasan/quarantine.c
mm/kasan/report.c
mm/slab.c
mm/slub.c