[PATCH 13/17] prmem: linked list: disable layout randomization

Igor Stoppa igor.stoppa at gmail.com
Tue Oct 23 21:35:00 UTC 2018


Some of the data structures used in list management are composed by two
pointers. Since the kernel is now configured by default to randomize the
layout of data structures soleley composed by pointers, this might
prevent correct type punning between these structures and their write
rare counterpart.

It shouldn't be anyway a big loss, in terms of security: with only two
fields, there is a 50% chance of guessing correctly the layout.
The randomization is disabled only when write rare is enabled.

Signed-off-by: Igor Stoppa <igor.stoppa at huawei.com>
CC: Kees Cook <keescook at chromium.org>
CC: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
CC: Andrew Morton <akpm at linux-foundation.org>
CC: Masahiro Yamada <yamada.masahiro at socionext.com>
CC: Alexey Dobriyan <adobriyan at gmail.com>
CC: Pekka Enberg <penberg at kernel.org>
CC: "Paul E. McKenney" <paulmck at linux.vnet.ibm.com>
CC: Lihao Liang <lianglihao at huawei.com>
CC: linux-kernel at vger.kernel.org
---
 include/linux/types.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/types.h b/include/linux/types.h
index 53609bbdcf0f..a9f6f6515fdc 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -187,12 +187,12 @@ typedef struct {
 struct list_head {
 	struct list_head *next __aligned(sizeof(void *));
 	struct list_head *prev __aligned(sizeof(void *));
-} __aligned(sizeof(void *));
+} __no_randomize_layout __aligned(sizeof(void *));
 
 struct hlist_node {
 	struct hlist_node *next __aligned(sizeof(void *));
 	struct hlist_node **pprev __aligned(sizeof(void *));
-} __aligned(sizeof(void *));
+} __no_randomize_layout __aligned(sizeof(void *));
 #else
 struct list_head {
 	struct list_head *next, *prev;
-- 
2.17.1



More information about the Linux-security-module-archive mailing list