20 Aug, 2020

1 commit

  • The header file algapi.h includes skbuff.h unnecessarily since
    all we need is a forward declaration for struct sk_buff. This
    patch removes that inclusion.

    Unfortunately skbuff.h pulls in a lot of things and drivers over
    the years have come to rely on it so this patch adds a lot of
    missing inclusions that result from this.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

08 Aug, 2020

1 commit

  • As said by Linus:

    A symmetric naming is only helpful if it implies symmetries in use.
    Otherwise it's actively misleading.

    In "kzalloc()", the z is meaningful and an important part of what the
    caller wants.

    In "kzfree()", the z is actively detrimental, because maybe in the
    future we really _might_ want to use that "memfill(0xdeadbeef)" or
    something. The "zero" part of the interface isn't even _relevant_.

    The main reason that kzfree() exists is to clear sensitive information
    that should not be leaked to other future users of the same memory
    objects.

    Rename kzfree() to kfree_sensitive() to follow the example of the recently
    added kvfree_sensitive() and make the intention of the API more explicit.
    In addition, memzero_explicit() is used to clear the memory to make sure
    that it won't get optimized away by the compiler.

    The renaming is done by using the command sequence:

    git grep -w --name-only kzfree |\
    xargs sed -i 's/kzfree/kfree_sensitive/'

    followed by some editing of the kfree_sensitive() kerneldoc and adding
    a kzfree backward compatibility macro in slab.h.

    [akpm@linux-foundation.org: fs/crypto/inline_crypt.c needs linux/slab.h]
    [akpm@linux-foundation.org: fix fs/crypto/inline_crypt.c some more]

    Suggested-by: Joe Perches
    Signed-off-by: Waiman Long
    Signed-off-by: Andrew Morton
    Acked-by: David Howells
    Acked-by: Michal Hocko
    Acked-by: Johannes Weiner
    Cc: Jarkko Sakkinen
    Cc: James Morris
    Cc: "Serge E. Hallyn"
    Cc: Joe Perches
    Cc: Matthew Wilcox
    Cc: David Rientjes
    Cc: Dan Carpenter
    Cc: "Jason A . Donenfeld"
    Link: http://lkml.kernel.org/r/20200616154311.12314-3-longman@redhat.com
    Signed-off-by: Linus Torvalds

    Waiman Long
     

24 Apr, 2020

1 commit

  • SP800-90B specifies various requirements for the noise source(s) that
    may seed any DRNG including SP800-90A DRBGs. In November 2020,
    SP800-90B will be mandated for all noise sources that provide entropy
    to DRBGs as part of a FIPS 140-[2|3] validation or other evaluation
    types. Without SP800-90B compliance, a noise source is defined to always
    deliver zero bits of entropy.

    This patch ports the SP800-90B compliance from the user space Jitter RNG
    version 2.2.0.

    The following changes are applied:

    - addition of (an enhanced version of) the repetitive count test (RCT)
    from SP800-90B section 4.4.1 - the enhancement is due to the fact of
    using the stuck test as input to the RCT.

    - addition of the adaptive proportion test (APT) from SP800-90B section
    4.4.2

    - update of the power-on self test to perform a test measurement of 1024
    noise samples compliant to SP800-90B section 4.3

    - remove of the continuous random number generator test which is
    replaced by APT and RCT

    Health test failures due to the SP800-90B operation are only enforced in
    FIPS mode. If a runtime health test failure is detected, the Jitter RNG
    is reset. If more than 1024 resets in a row are performed, a permanent
    error is returned to the caller.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Müller
     

18 Oct, 2019

1 commit

  • Fix the following build warnings by adding a header for
    the definitions shared between jitterentropy.c and
    jitterentropy-kcapi.c. Fixes the following:

    crypto/jitterentropy.c:445:5: warning: symbol 'jent_read_entropy' was not declared. Should it be static?
    crypto/jitterentropy.c:475:18: warning: symbol 'jent_entropy_collector_alloc' was not declared. Should it be static?
    crypto/jitterentropy.c:509:6: warning: symbol 'jent_entropy_collector_free' was not declared. Should it be static?
    crypto/jitterentropy.c:516:5: warning: symbol 'jent_entropy_init' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:59:6: warning: symbol 'jent_zalloc' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:64:6: warning: symbol 'jent_zfree' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:69:5: warning: symbol 'jent_fips_enabled' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:74:6: warning: symbol 'jent_panic' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:79:6: warning: symbol 'jent_memcpy' was not declared. Should it be static?
    crypto/jitterentropy-kcapi.c:93:6: warning: symbol 'jent_get_nstime' was not declared. Should it be static?

    Signed-off-by: Ben Dooks
    Reviewed-by: Stephan Mueller

    Ben Dooks
     

20 Jun, 2019

1 commit


06 Jun, 2019

1 commit

  • The Jitter RNG implementation is updated to comply with upstream version
    2.1.2. The change covers the following aspects:

    * Time variation measurement is conducted over the LFSR operation
    instead of the XOR folding

    * Invcation of stuck test during initialization

    * Removal of the stirring functionality and the Von-Neumann
    unbiaser as the LFSR using a primitive and irreducible polynomial
    generates an identical distribution of random bits

    This implementation was successfully used in FIPS 140-2 validations
    as well as in German BSI evaluations.

    This kernel implementation was tested as follows:

    * The unchanged kernel code file jitterentropy.c is compiled as part
    of user space application to generate raw unconditioned noise
    data. That data is processed with the NIST SP800-90B non-IID test
    tool to verify that the kernel code exhibits an equal amount of noise
    as the upstream Jitter RNG version 2.1.2.

    * Using AF_ALG with the libkcapi tool of kcapi-rng the Jitter RNG was
    output tested with dieharder to verify that the output does not
    exhibit statistical weaknesses. The following command was used:
    kcapi-rng -n "jitterentropy_rng" -b 100000000000 | dieharder -a -g 200

    * The unchanged kernel code file jitterentropy.c is compiled as part
    of user space application to test the LFSR implementation. The
    LFSR is injected a monotonically increasing counter as input and
    the output is fed into dieharder to verify that the LFSR operation
    does not exhibit statistical weaknesses.

    * The patch was tested on the Muen separation kernel which returns
    a more coarse time stamp to verify that the Jitter RNG does not cause
    regressions with its initialization test considering that the Jitter
    RNG depends on a high-resolution timer.

    Tested-by: Reto Buerki
    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Müller
     

30 May, 2019

1 commit

  • "jitterentropy_rng" doesn't have any other implementations, nor is it
    tested by the crypto self-tests. So it was unnecessary to change it to
    subsys_initcall. Also it depends on the main clocksource being
    initialized, which may happen after subsys_initcall, causing this error:

    jitterentropy: Initialization failed with host not compliant with requirements: 2

    Change it back to module_init().

    Fixes: c4741b230597 ("crypto: run initcalls for generic implementations earlier")
    Reported-by: Geert Uytterhoeven
    Signed-off-by: Eric Biggers
    Tested-by: Geert Uytterhoeven
    Signed-off-by: Herbert Xu

    Eric Biggers
     

18 Apr, 2019

1 commit

  • Use subsys_initcall for registration of all templates and generic
    algorithm implementations, rather than module_init. Then change
    cryptomgr to use arch_initcall, to place it before the subsys_initcalls.

    This is needed so that when both a generic and optimized implementation
    of an algorithm are built into the kernel (not loadable modules), the
    generic implementation is registered before the optimized one.
    Otherwise, the self-tests for the optimized implementation are unable to
    allocate the generic implementation for the new comparison fuzz tests.

    Note that on arm, a side effect of this change is that self-tests for
    generic implementations may run before the unaligned access handler has
    been installed. So, unaligned accesses will crash the kernel. This is
    arguably a good thing as it makes it easier to detect that type of bug.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

17 Nov, 2016

1 commit


24 Jun, 2016

1 commit

  • As part of the Y2038 development, __getnstimeofday is not supposed to be
    used any more. It is now replaced with ktime_get_ns. The Jitter RNG uses
    the time stamp to measure the execution time of a given code path and
    tries to detect variations in the execution time. Therefore, the only
    requirement the Jitter RNG has, is a sufficient high resolution to
    detect these variations.

    The change was tested on x86 to show an identical behavior as RDTSC. The
    used test code simply measures the execution time of the heart of the
    RNG:

    jent_get_nstime(&time);
    jent_memaccess(ec, min);
    jent_fold_time(NULL, time, &folded, min);
    jent_get_nstime(&time2);
    return ((time2 - time));

    Signed-off-by: Stephan Mueller
    Acked-by: Arnd Bergmann
    Signed-off-by: Herbert Xu

    Stephan Mueller
     

14 Oct, 2015

1 commit


28 Jul, 2015

1 commit


25 Jun, 2015

1 commit

  • The core of the Jitter RNG is intended to be compiled with -O0. To
    ensure that the Jitter RNG can be compiled on all architectures,
    separate out the RNG core into a stand-alone C file that can be compiled
    with -O0 which does not depend on any kernel include file.

    As no kernel includes can be used in the C file implementing the core
    RNG, any dependencies on kernel code must be extracted.

    A second file provides the link to the kernel and the kernel crypto API
    that can be compiled with the regular compile options of the kernel.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller