From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9B1E5C77B73 for ; Sat, 15 Apr 2023 17:36:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 12BA76B007B; Sat, 15 Apr 2023 13:36:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0DC496B007D; Sat, 15 Apr 2023 13:36:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE6366B007E; Sat, 15 Apr 2023 13:36:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id DEF8B6B007B for ; Sat, 15 Apr 2023 13:36:55 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id B63F51C5B61 for ; Sat, 15 Apr 2023 17:36:55 +0000 (UTC) X-FDA: 80684330790.30.8096028 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by imf05.hostedemail.com (Postfix) with ESMTP id DCBE210000F for ; Sat, 15 Apr 2023 17:36:53 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=mail.huji.ac.il header.s=mailhuji header.b=qy4P3GEx; spf=pass (imf05.hostedemail.com: domain of david.keisarschm@mail.huji.ac.il designates 209.85.221.53 as permitted sender) smtp.mailfrom=david.keisarschm@mail.huji.ac.il; dmarc=pass (policy=none) header.from=huji.ac.il ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681580214; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=btXnur/uyYMbjwgO0AOsG6yRAGjdTQoh5XcEl+ajryQ=; b=ch+XTMR3HXvkr7GFHLatkxtKPZRTm+wHfID0j0ATrHKBqI3yhAvx5Bad/zcwHdhbBrdjSY Q0HM50t+KFznA3az9Ahd0e3J/TSeHw8INCKyNQT3fTg+F46+QQPu6oo9U+e8mtzCl61MKq tC7UC4jkO/5oZ+0swuIg4o4jwqXJDsA= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=mail.huji.ac.il header.s=mailhuji header.b=qy4P3GEx; spf=pass (imf05.hostedemail.com: domain of david.keisarschm@mail.huji.ac.il designates 209.85.221.53 as permitted sender) smtp.mailfrom=david.keisarschm@mail.huji.ac.il; dmarc=pass (policy=none) header.from=huji.ac.il ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681580214; a=rsa-sha256; cv=none; b=z7JcaxIzWJ0DLCxWS5SqqxoVBNEt2KtWVRYsZ9gJlq+mDevwi0tF4IjW0hjfJKsN+3nxc4 rwDU0aQZFVaJG0VOkPE/uvYojYCiz2pCBDv1yhOsM3JW7yvFB1QuS5NLIUWSA0l2UvICfL 3Tpb8wkR8B/Vd7KRhtESENjxWKubaOI= Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-2efbaad7a2eso270084f8f.0 for ; Sat, 15 Apr 2023 10:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.huji.ac.il; s=mailhuji; t=1681580212; x=1684172212; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=btXnur/uyYMbjwgO0AOsG6yRAGjdTQoh5XcEl+ajryQ=; b=qy4P3GExn1lX3wwxj5pPfbl8w8fiET5D/DX0oc0EbOtkwIhyzp0NyCiK0iyhAl6Pcd so37v8GFLOwjlXSJ6VCgyyru/KnWOxVJml5yf2oETGgmLD0Z/67YvFnkmRaQXSK37g2A Nd72weySDyAYhl2wEai5nZDJgnU6SWiKMLrVQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681580212; x=1684172212; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=btXnur/uyYMbjwgO0AOsG6yRAGjdTQoh5XcEl+ajryQ=; b=Z4z/T419IBg1C5uT2lK5bIQgoMKdfDf2hUphLVLzwVPzHOnSxh7O4L7w9oD1Z48lY7 17CWXqheTlC6pNCVKDTOM/6Utp7jDmRihTuhKIFoRoQQLTuaOYNYbNGTkxSpeUY/QfT3 BfydKeVHUSwdlvZksZm28yS+LjTq3NpM4zqexm/JL+hYuHDjzxO9I/N1Mte1ZGzyAFTm xAYcCIfHZLOFDpepKYiv6msN8qpliHoZWPoyxAtJ1sqm9MzZ7ueMBWhn7l8nDIdVYkCR VAV/FhqeN4KNVmbsA1Vo5ZhREVybFZwrleG3T/uTRvPFbndy+up0k7YK/qnpCcNfHwD0 27+A== X-Gm-Message-State: AAQBX9cxjJu9FR1p7gR0DMPr0tAMvtf5QToYXgeJUKLJ9Pm5HOtNpOb+ qyhC2BRC3j6qlAeYtGTcY/p9NA== X-Google-Smtp-Source: AKy350Yw2DvODcU0LyZc5dt8e7tecCHCDI5sRahgN6NRKckTItk3WHz8ZLEfSmzjfzCiF6wzH174DA== X-Received: by 2002:a5d:634e:0:b0:2f6:bf14:f89 with SMTP id b14-20020a5d634e000000b002f6bf140f89mr1998852wrw.20.1681580212483; Sat, 15 Apr 2023 10:36:52 -0700 (PDT) Received: from localhost.localdomain ([94.159.161.55]) by smtp.gmail.com with ESMTPSA id f24-20020a1cc918000000b003ee63fe5203sm7167052wmb.36.2023.04.15.10.36.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Apr 2023 10:36:52 -0700 (PDT) From: david.keisarschm@mail.huji.ac.il To: linux-kernel@vger.kernel.org, Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: Jason@zx2c4.com, linux-mm@kvack.org, David Keisar Schmidt , ilay.bahat1@gmail.com, aksecurity@gmail.com Subject: [PATCH v5 2/3] Replace invocation of weak PRNG Date: Sat, 15 Apr 2023 20:36:49 +0300 Message-Id: <20230415173650.5458-1-david.keisarschm@mail.huji.ac.il> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: j44ewifzqxdg44tg9bur1o45o34xojhj X-Rspamd-Queue-Id: DCBE210000F X-HE-Tag: 1681580213-902464 X-HE-Meta: U2FsdGVkX19bdmC3P6M6WrLYC0vNhfo+i2KKpFS5Ew7tVXI8WCVhggdbfLQhLRAo2pXSwEIBBLTroHVvKGR8NDzcW8OGxq42TYsM1cFxegTLtQiP/uC7cwPC1D4HNjR04b7iUkDXby3MkdWr2UOsAJ79qEsMdveJpgWJ/IrMxKAxXB5ILS1DWm0lGVE8joWXTRZUtPMaWQ0xh4p7mQFqOLBVsCB++WOENXva1wY3yzR39W9BDH//jn61c4p7MxWAy386q9EjHpKVDiAkSX/5H7ZP2IGL5o8myq2/W6WC+2f2EABIewUQyRtMKgf0RA2fqBnO1+v0kiy1bwbLNoyyn9WIyuqgA2QncbKOyYakBlZD32tg3Jnrp/Vw5SJI60O7OsAH28/OvXYiD8Vqsb3tsbPOoVZXAGQCloBGUPwwYtK1E2WhAPycjMCgIg04yvtYFuR6sP/hXWd6MXqpK3ulvnkbD0sqgeHSRdSkd44GUihBHGZ3HLtqcDwZWo6RCBSXyp3m/IVd7j+rrWEc+SWSiRSIZiOlz5CZ2w5xI8kuab2mroYjlt0Y+3/l34RF9IlSPop6LCUzw+0rfDRg6o62hWa+qzPi2ma45HKmHnxjWNjP++9jDJkXufYWHrAK3ZGT+TUHbXdZlYYWtGdACfUJjkvWiVq/mvIRHE5+DNkKT/GZqPA80404mDDyw2Mk4ET42Eguqckog2T2m9thLtKUH8cei/aHHbhI65CsMzPgBQ0ky7Jp8dvp/OMf0MZqtecRa6acExNnIFEhS2pi2G20WkR1Uy4NjqOc6Z79Tty3IsA0GPGFSGidi4j702WwpoTFSLDUs4dNJ11VythYMNiBXIKZs+QqB8Dzotk3V5O0HzlMcIV+FZ4/pAczH3dn4EXbLN0kFLVFkH488U9uX2wYmCqmZY0WjDS9bruYQNm5pJGcxjnmbcZXgvI6XbPCnrjR2fJr60bwOwswvqSiDEr HY/AZRrK mUJpBUwRs5bdaJFVpU84H93o3BRKR3QboxrIs0wLcjBoOrqH8E+3RfJD0vNuw2TA3svYw09W2tsw8pH5fd6+9gsA2WG23YdWFCc51k/F66NjOY9telAMDNyVpyXQimMICxaJ/X+4CLeaxeMMOdQN9RdhFJnMPK8G54mR9uEAl218YcsM0sTKqN9Q7/Uid4MVFrivHL/m6q1OG+17Gg6yve5b19H/YCJipM6jjB0D/hL/F+OcVdXph/aC21WaHco+TVlS9i6ZfNiBoPdAjN+2hxj2unB1iTLSh68RZZWtMp7eyfLS4LqEc3Ze7q5UZNDm3L9qVOoYOrWc6DGYSNDy9erD/sv4N89ebknjzo5fVr/+CqP6EtuAXATr/QCXLwaTMcaU9TX+x0m1GWNVdYL5hlAeBgEShFbWMcFSHVsagvjuSfuCcNRstqgkLgw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: David Keisar Schmidt The Slab allocator randomization inside slab_common.c uses the prandom_u32 PRNG. That was added to prevent attackers to obtain information on the heap state. However, this PRNG turned out to be weak, as noted in commit c51f8f88d705 To fix it, we have changed the invocation of prandom_u32_state to get_random_u32 to ensure the PRNG is strong. Since a modulo operation is applied right after that, in the Fisher-Yates shuffle, we used get_random_u32_below, to achieve uniformity. Signed-off-by: David Keisar Schmidt --- This fifth series changes only the arch/x86/mm/kaslr patch. Changes since v3: * edited commit message. Changes since v2: * replaced instances of get_random_u32 with get_random_u32_below in mm/slab_common.c. mm/slab_common.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/mm/slab_common.c b/mm/slab_common.c index bf4e777cf..361da2191 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -1146,7 +1146,7 @@ EXPORT_SYMBOL(kmalloc_large_node); #ifdef CONFIG_SLAB_FREELIST_RANDOM /* Randomize a generic freelist */ -static void freelist_randomize(struct rnd_state *state, unsigned int *list, +static void freelist_randomize(unsigned int *list, unsigned int count) { unsigned int rand; @@ -1157,8 +1157,7 @@ static void freelist_randomize(struct rnd_state *state, unsigned int *list, /* Fisher-Yates shuffle */ for (i = count - 1; i > 0; i--) { - rand = prandom_u32_state(state); - rand %= (i + 1); + rand = get_random_u32_below(i+1); swap(list[i], list[rand]); } } @@ -1167,7 +1166,6 @@ static void freelist_randomize(struct rnd_state *state, unsigned int *list, int cache_random_seq_create(struct kmem_cache *cachep, unsigned int count, gfp_t gfp) { - struct rnd_state state; if (count < 2 || cachep->random_seq) return 0; @@ -1176,10 +1174,7 @@ int cache_random_seq_create(struct kmem_cache *cachep, unsigned int count, if (!cachep->random_seq) return -ENOMEM; - /* Get best entropy at this stage of boot */ - prandom_seed_state(&state, get_random_long()); - - freelist_randomize(&state, cachep->random_seq, count); + freelist_randomize(cachep->random_seq, count); return 0; } -- 2.37.3