From patchwork Thu May 27 16:02:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephan Mueller X-Patchwork-Id: 448933 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5071C4707F for ; Thu, 27 May 2021 16:13:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 82344610FA for ; Thu, 27 May 2021 16:13:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235870AbhE0QOt (ORCPT ); Thu, 27 May 2021 12:14:49 -0400 Received: from mo4-p04-ob.smtp.rzone.de ([85.215.255.122]:15872 "EHLO mo4-p04-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237123AbhE0QOZ (ORCPT ); Thu, 27 May 2021 12:14:25 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1622131885; cv=none; d=strato.com; s=strato-dkim-0002; b=ssMh6SUtyLmg6v+wibXkPY/l3ixcOPGLJ1JW/0n3qlGM5NOrXBglQJFbY5a1Vaiy1O eApinSY9Fb+aEdREUlpoghtzvce7xlTH5JQN/kN5JeM6iwht0Rm7scmiUZYZLnVi02OQ Gq+xm6hoK9UVp+gtQPIJvT+Andn9LBor9plR3t7opN/8bQzv5hObqKX+ladzsuSiIzmG MijgmC7RBHzrbwv+v2SeZFm4tvR8RAssz4Jc0pm4AaoZnSfeYe8Fe6/uEkxNKpoGAVrc QpXU1JAx8rfyvco/BKLla86oZOWIelGwFbMvI7gN+9/BwEfW8r+qubbWeM+0lJVXzzTr l7Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1622131885; s=strato-dkim-0002; d=strato.com; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=ranCbvW4TnthBRZ12Yjv+jFdhJhWaYkicXK0NNup6iM=; b=sij5VvfSW7A3MxqZkDpFtfP4I9Znejmpn1WUNU2uM4rXgtbObabDV9MXoW8BAHpGmB o//lmRqif69AGnOkR1haEabjFuQs7plbPreVMHSwtFQg7Eynv7+6YCe8mLKJFOX58E4m ZSqXIed1RX39M1Cqco97bMFaDIidCo3MrNJnpAz9817mT4799Tuwl8oQ6l54qwNOLuXz 9Ahy69a74jRn/UhQ7xG832oot2ObYEH7Se2aTY2zPsIQdzEb78gvJ0I41F+OqZbJNw0G G2UGXE9UaYkNS09F6+kGG1UhaLJvM09QadJIBfVqCtMkjbvGGT+rb7XPncDyjCmjsoNl UQhg== ARC-Authentication-Results: i=1; strato.com; dkim=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1622131885; s=strato-dkim-0002; d=chronox.de; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=ranCbvW4TnthBRZ12Yjv+jFdhJhWaYkicXK0NNup6iM=; b=Y3iKVkMx0HlRV6ZAOkqNUeWFQEw70jn/Fp3umnfr5XA1ORu6zz7wK9fU7pRSQwpys2 6BBrWTJRJ+HlTCxvNz52IyvHFcOpjLXPBweF7NEKGbcMF4VfJLv4s01ih/v9vf9YJF8L AqEOEnnbG2tpy957M5mp/NL6guLtgFxUdrdSp2JruPhfXfaBOSQX5ak6BIkdeQjFcn6H oJadRLjgLr8EQwREnmo9EVR9GAkLnBlr6tZfejlF9nMT1NxClIcAGbxotgwWMELwnu91 rdd9iNQLulPhqCFzV/O9xuMNY/5md/KUxtosj5CgoMsTWlurBonfbIqVjYqTyAqI7vQ0 /wEQ== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":P2ERcEykfu11Y98lp/T7+hdri+uKZK8TKWEqNyiHySGSa9k9xmwdNnzGHXPbJvSfFeK2" X-RZG-CLASS-ID: mo00 Received: from positron.chronox.de by smtp.strato.de (RZmta 47.26.3 DYNA|AUTH) with ESMTPSA id R0123ax4RGBO0Tl (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Thu, 27 May 2021 18:11:24 +0200 (CEST) From: Stephan =?iso-8859-1?q?M=FCller?= To: Tso Ted , linux-crypto@vger.kernel.org Cc: Willy Tarreau , Nicolai Stange , LKML , Arnd Bergmann , Greg Kroah-Hartman , "Eric W. Biederman" , "Alexander E. Patrakov" , "Ahmed S. Darwish" , Matthew Garrett , Vito Caputo , Andreas Dilger , Jan Kara , Ray Strode , William Jon McCann , zhangjs , Andy Lutomirski , Florian Weimer , Lennart Poettering , Peter Matthias , Marcelo Henrique Cerri , Neil Horman , Randy Dunlap , Julia Lawall , Dan Carpenter , Andy Lavr , Eric Biggers , "Jason A. Donenfeld" , Petr Tesarik , John Haxby Subject: [PATCH v40 09/13] crypto: provide access to a static Jitter RNG state Date: Thu, 27 May 2021 18:02:12 +0200 Message-ID: <2378105.yh0kzDQQHu@positron.chronox.de> In-Reply-To: <18450229.rjpLZT9oXI@positron.chronox.de> References: <18450229.rjpLZT9oXI@positron.chronox.de> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org To support the LRNG operation which uses the Jitter RNG separately from the kernel crypto API, at a time where potentially the regular memory management is not yet initialized, the Jitter RNG needs to provide a state whose memory is defined at compile time. As only once instance will ever be needed by the LRNG, define once static memory block which is solely to be used by the LRNG. CC: Torsten Duwe CC: "Eric W. Biederman" CC: "Alexander E. Patrakov" CC: "Ahmed S. Darwish" CC: "Theodore Y. Ts'o" CC: Willy Tarreau CC: Matthew Garrett CC: Vito Caputo CC: Andreas Dilger CC: Jan Kara CC: Ray Strode CC: William Jon McCann CC: zhangjs CC: Andy Lutomirski CC: Florian Weimer CC: Lennart Poettering CC: Nicolai Stange Reviewed-by: Roman Drahtmueller Tested-by: Roman Drahtmüller Tested-by: Marcelo Henrique Cerri Tested-by: Neil Horman Signed-off-by: Stephan Mueller --- crypto/jitterentropy-kcapi.c | 3 +- crypto/jitterentropy.c | 31 ++++++++++++++++++- .../crypto/internal}/jitterentropy.h | 3 ++ 3 files changed, 34 insertions(+), 3 deletions(-) rename {crypto => include/crypto/internal}/jitterentropy.h (84%) diff --git a/crypto/jitterentropy-kcapi.c b/crypto/jitterentropy-kcapi.c index e8a4165a1874..c90e60910827 100644 --- a/crypto/jitterentropy-kcapi.c +++ b/crypto/jitterentropy-kcapi.c @@ -43,8 +43,7 @@ #include #include #include - -#include "jitterentropy.h" +#include /*************************************************************************** * Helper function diff --git a/crypto/jitterentropy.c b/crypto/jitterentropy.c index 6e147c43fc18..fa1459f09b01 100644 --- a/crypto/jitterentropy.c +++ b/crypto/jitterentropy.c @@ -117,7 +117,7 @@ struct rand_data { #define JENT_EHEALTH 9 /* Health test failed during initialization */ #define JENT_ERCT 10 /* RCT failed during initialization */ -#include "jitterentropy.h" +#include /*************************************************************************** * Adaptive Proportion Test @@ -854,3 +854,32 @@ int jent_entropy_init(void) return 0; } + +struct rand_data *jent_lrng_entropy_collector(void) +{ + static unsigned char lrng_jent_mem[JENT_MEMORY_SIZE]; + static struct rand_data lrng_jent_state = { + .data = 0, + .old_data = 0, + .prev_time = 0, + .last_delta = 0, + .last_delta2 = 0, + .osr = 1, + .mem = lrng_jent_mem, + .memlocation = 0, + .memblocks = JENT_MEMORY_BLOCKSIZE, + .memblocksize = JENT_MEMORY_BLOCKS, + .memaccessloops = JENT_MEMORY_ACCESSLOOPS, + .rct_count = 0, + .apt_observations = 0, + .apt_count = 0, + .apt_base = 0, + .apt_base_set = 0, + .health_failure = 0 + }; + + if (jent_entropy_init()) + return NULL; + + return &lrng_jent_state; +} diff --git a/crypto/jitterentropy.h b/include/crypto/internal/jitterentropy.h similarity index 84% rename from crypto/jitterentropy.h rename to include/crypto/internal/jitterentropy.h index c83fff32d130..6e07d86eac82 100644 --- a/crypto/jitterentropy.h +++ b/include/crypto/internal/jitterentropy.h @@ -15,3 +15,6 @@ extern int jent_read_entropy(struct rand_data *ec, unsigned char *data, extern struct rand_data *jent_entropy_collector_alloc(unsigned int osr, unsigned int flags); extern void jent_entropy_collector_free(struct rand_data *entropy_collector); + +/* Access to statically allocated Jitter RNG instance */ +extern struct rand_data *jent_lrng_entropy_collector(void);