02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

23 May, 2017

1 commit


28 Dec, 2016

1 commit


16 Dec, 2016

1 commit

  • Currently, inner IV/DIGEST data are only copied once into the hash
    engines and not set explicitly before launching a request that is not a
    first frag. This is an issue especially when multiple ahash reqs are
    computed in parallel or chained with cipher request, as the state of the
    request being computed is not updated into the hash engine. It leads to
    non-deterministic corrupted digest results.

    Fixes: commit 2786cee8e50b ("crypto: marvell - Move SRAM I/O operations to step functions")
    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Cc:
    Signed-off-by: Herbert Xu

    Romain Perier
     

15 Dec, 2016

1 commit

  • Pull crypto updates from Herbert Xu:
    "Here is the crypto update for 4.10:

    API:
    - add skcipher walk interface
    - add asynchronous compression (acomp) interface
    - fix algif_aed AIO handling of zero buffer

    Algorithms:
    - fix unaligned access in poly1305
    - fix DRBG output to large buffers

    Drivers:
    - add support for iMX6UL to caam
    - fix givenc descriptors (used by IPsec) in caam
    - accelerated SHA256/SHA512 for ARM64 from OpenSSL
    - add SSE CRCT10DIF and CRC32 to ARM/ARM64
    - add AEAD support to Chelsio chcr
    - add Armada 8K support to omap-rng"

    * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (148 commits)
    crypto: testmgr - fix overlap in chunked tests again
    crypto: arm/crc32 - accelerated support based on x86 SSE implementation
    crypto: arm64/crc32 - accelerated support based on x86 SSE implementation
    crypto: arm/crct10dif - port x86 SSE implementation to ARM
    crypto: arm64/crct10dif - port x86 SSE implementation to arm64
    crypto: testmgr - add/enhance test cases for CRC-T10DIF
    crypto: testmgr - avoid overlap in chunked tests
    crypto: chcr - checking for IS_ERR() instead of NULL
    crypto: caam - check caam_emi_slow instead of re-lookup platform
    crypto: algif_aead - fix AIO handling of zero buffer
    crypto: aes-ce - Make aes_simd_algs static
    crypto: algif_skcipher - set error code when kcalloc fails
    crypto: caam - make aamalg_desc a proper module
    crypto: caam - pass key buffers with typesafe pointers
    crypto: arm64/aes-ce-ccm - Fix AEAD decryption length
    MAINTAINERS: add crypto headers to crypto entry
    crypt: doc - remove misleading mention of async API
    crypto: doc - fix header file name
    crypto: api - fix comment typo
    crypto: skcipher - Add separate walker for AEAD decryption
    ..

    Linus Torvalds
     

07 Dec, 2016

2 commits


21 Oct, 2016

2 commits

  • Currently, the driver breaks chain for all kind of hash requests in order to
    don't override intermediate states of partial ahash updates. However, some final
    ahash requests can be directly processed by the engine, and so without
    intermediate state. This is typically the case for most for the HMAC requests
    processed via IPSec.

    This commits adds a TDMA descriptor to copy context for these of requests
    into the "op" dma pool, then it allow to chain these requests at the DMA level.
    The 'complete' operation is also updated to retrieve the MAC digest from the
    right location.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • So far, we used a dedicated dma pool to copy the result of outer IV for
    cipher requests. Instead of using a dma pool per outer data, we prefer
    use the op dma pool that contains all part of the request from the SRAM.
    Then, the outer data that is likely to be used by the 'complete'
    operation, is copied later. In this way, any type of result can be
    retrieved by DMA for cipher or ahash requests.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     

09 Aug, 2016

7 commits

  • Don't use 64 'as is', as max block size in mv_cesa_ahash_cache_req. Use
    CESA_MAX_HASH_BLOCK_SIZE instead, this is better for readability.

    Signed-off-by: Romain Perier
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Currently, in mv_cesa_{md5,sha1,sha256}_init creq->state is initialized
    before the call to mv_cesa_ahash_init. This is wrong because this
    function fills creq with zero by using memset, so its 'state' that
    contains the default DIGEST is overwritten. This commit fixes the issue
    by initializing creq->state just after the call to mv_cesa_ahash_init.

    Fixes: commit b0ef51067cb4 ("crypto: marvell/cesa - initialize hash...")
    Signed-off-by: Romain Perier
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • So far, sub part of mv_cesa_int was responsible of dequeuing complete
    requests, then call the 'cleanup' operation on these reqs and call the
    crypto api callback 'complete'. The problem is that the transformation
    context 'ctx' is retrieved only once before the while loop. Which means
    that the wrong 'cleanup' operation might be called on the wrong type of
    cesa requests, it can lead to memory corruptions with this message:

    marvell-cesa f1090000.crypto: dma_pool_free cesa_padding, 5a5a5a5a/5a5a5a5a (bad dma)

    This commit fixes the issue, by updating the transformation context for
    each dequeued cesa request.

    Fixes: commit 85030c5168f1 ("crypto: marvell - Add support for chai...")
    Signed-off-by: Romain Perier
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • The mv_cesa_ahash_cache_req() function always returns 0, which makes
    its return value pretty much useless. However, in addition to
    returning a useless value, it also returns a boolean in a variable
    passed by reference to indicate if the request was already cached.

    So, this commit changes mv_cesa_ahash_cache_req() to return this
    boolean. It consequently simplifies the only call site of
    mv_cesa_ahash_cache_req(), where the "ret" variable is no longer
    needed.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Herbert Xu

    Thomas Petazzoni
     
  • The mv_cesa_ahash_init() function always returns 0, and the return
    value is anyway never checked. Turn it into a function returning void.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Herbert Xu

    Thomas Petazzoni
     
  • The dma_iter parameter of mv_cesa_ahash_dma_add_cache() is never used,
    so get rid of it.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Herbert Xu

    Thomas Petazzoni
     
  • The mv_cesa_dma_add_op() function builds a mv_cesa_tdma_desc structure
    to copy the operation description to the SRAM, but doesn't explicitly
    initialize the destination of the copy. It works fine because the
    operatin description must be copied at the beginning of the SRAM, and
    the mv_cesa_tdma_desc structure is initialized to zero when
    allocated. However, it is somewhat confusing to not have a destination
    defined.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Herbert Xu

    Thomas Petazzoni
     

29 Jul, 2016

1 commit

  • The IV output vectors should only be copied from the _complete operation
    and not from the _process operation, i.e only from the operation that is
    designed to copy the result of the request to the right location. This
    copy is already done in the _complete operation, so this commit removes
    the duplicated code in the _process op.

    Fixes: 3610d6cd5231 ("crypto: marvell - Add a complete...")
    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     

28 Jul, 2016

3 commits

  • So far, the cache of the ahash requests was updated from the 'complete'
    operation. This complete operation is called from mv_cesa_tdma_process
    before the cleanup operation, which means that the content of req->src
    can be read and copied when it is still mapped. This commit fixes the
    issue by moving this cache update from mv_cesa_ahash_complete to
    mv_cesa_ahash_req_cleanup, so the copy is done once the sglist is
    unmapped.

    Fixes: 1bf6682cb31d ("crypto: marvell - Add a complete operation for..")
    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • The flag CRYPTO_TFM_REQ_MAY_BACKLOG is optional and can be set from the
    user to put requests into the backlog queue when the main cryptographic
    queue is full. Before calling mv_cesa_tdma_chain we must check the value
    of the return status to be sure that the current request has been
    correctly queued or added to the backlog.

    Fixes: 85030c5168f1 ("crypto: marvell - Add support for chaining...")
    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • So far in mv_cesa_ablkcipher_dma_req_init, if an error is thrown while
    the tdma chain is built there is a memory leak. This issue exists
    because the chain is assigned later at the end of the function, so the
    cleanup function is called with the wrong version of the chain.

    Fixes: db509a45339f ("crypto: marvell/cesa - add TDMA support")
    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     

19 Jul, 2016

1 commit


23 Jun, 2016

10 commits

  • Now that crypto requests are chained together at the DMA level, we
    increase the size of the crypto queue for each engine. The result is
    that as the backlog list is reached later, it does not stop the crypto
    stack from sending asychronous requests, so more cryptographic tasks
    are processed by the engines.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • The Cryptographic Engines and Security Accelerators (CESA) supports the
    Multi-Packet Chain Mode. With this mode enabled, multiple tdma requests
    can be chained and processed by the hardware without software
    intervention. This mode was already activated, however the crypto
    requests were not chained together. By doing so, we reduce significantly
    the number of IRQs. Instead of being interrupted at the end of each
    crypto request, we are interrupted at the end of the last cryptographic
    request processed by the engine.

    This commits re-factorizes the code, changes the code architecture and
    adds the required data structures to chain cryptographic requests
    together before sending them to an engine (stopped or possibly already
    running).

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • This commits adds support for fine grained load balancing on
    multi-engine IPs. The engine is pre-selected based on its current load
    and on the weight of the crypto request that is about to be processed.
    The global crypto queue is also moved to each engine. These changes are
    required to allow chaining crypto requests at the DMA level. By using
    a crypto queue per engine, we make sure that we keep the state of the
    tdma chain synchronized with the crypto queue. We also reduce contention
    on 'cesa_dev->lock' and improve parallelism.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Currently the crypto requests were sent to engines sequentially.
    This commit moves the SRAM I/O operations from the prepare to the step
    functions. It provides flexibility for future works and allow to prepare
    a request while the engine is running.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • So far, the 'process' operation was used to check if the current request
    was correctly handled by the engine, if it was the case it copied
    information from the SRAM to the main memory. Now, we split this
    operation. We keep the 'process' operation, which still checks if the
    request was correctly handled by the engine or not, then we add a new
    operation for completion. The 'complete' method copies the content of
    the SRAM to memory. This will soon become useful if we want to call
    the process and the complete operations from different locations
    depending on the type of the request (different cleanup logic).

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Currently, the only way to access the tdma chain is to use the 'req'
    union from a mv_cesa_{ablkcipher,ahash}. This will soon become a problem
    if we want to handle the TDMA chaining vs standard/non-DMA processing in
    a generic way (with generic functions at the cesa.c level detecting
    whether the request should be queued at the DMA level or not). Hence the
    decision to move the chain field a the mv_cesa_req level at the expense
    of adding 2 void * fields to all request contexts (including non-DMA
    ones) and to remove the type completly. To limit the overhead, we get
    rid of the type field, which can now be deduced from the req->chain.first
    value. Once these changes are done the union is no longer needed, so
    remove it and move mv_cesa_ablkcipher_std_req and mv_cesa_req
    to mv_cesa_ablkcipher_req directly. There are also no needs to keep the
    'base' field into the union of mv_cesa_ahash_req, so move it into the
    upper structure.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Add a TDMA descriptor at the end of the request for copying the
    output IV vector via a DMA transfer. This is a good way for offloading
    as much as processing as possible to the DMA and the crypto engine.
    This is also required for processing multiple cipher requests
    in chained mode, otherwise the content of the IV vector would be
    overwritten by the last processed request.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • So far, the way that the type of a TDMA operation was checked was wrong.
    We have to use the type mask in order to get the right part of the flag
    containing the type of the operation.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Add a BUG_ON() call when the driver tries to launch a crypto request
    while the engine is still processing the previous one. This replaces
    a silent system hang by a verbose kernel panic with the associated
    backtrace to let the user know that something went wrong in the CESA
    driver.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     
  • Adding a macro constant to be used for the size of the crypto queue,
    instead of using a numeric value directly. It will be easier to
    maintain in case we add more than one crypto queue of the same size.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     

03 May, 2016

1 commit

  • Dma_pool_zalloc combines dma_pool_alloc and memset 0. The semantic patch
    that makes this transformation is as follows: (http://coccinelle.lip6.fr/)

    //
    @@
    expression d,e;
    statement S;
    @@

    d =
    - dma_pool_alloc
    + dma_pool_zalloc
    (...);
    if (!d) S
    - memset(d, 0, sizeof(*d));
    //

    Signed-off-by: Julia Lawall
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Julia Lawall
     

20 Apr, 2016

1 commit

  • When looking for available engines, the variable "engine" is
    assigned to "&cesa->engines[i]" at the beginning of the for loop. Replacing
    next occurences of "&cesa->engines[i]" by "engine" and in order to improve
    readability.

    Signed-off-by: Romain Perier
    Acked-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Romain Perier
     

05 Apr, 2016

1 commit


23 Mar, 2016

1 commit

  • Pull crypto fixes from Herbert Xu:
    "This fixes the following issues:

    API:
    - Fix kzalloc error path crash in ecryptfs added by skcipher
    conversion. Note the subject of the commit is screwed up and the
    correct subject is actually in the body.

    Drivers:
    - A number of fixes to the marvell cesa hashing code.
    - Remove bogus nested irqsave that clobbers the saved flags in ccp"

    * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
    crypto: marvell/cesa - forward devm_ioremap_resource() error code
    crypto: marvell/cesa - initialize hash states
    crypto: marvell/cesa - fix memory leak
    crypto: ccp - fix lock acquisition code
    eCryptfs: Use skcipher and shash

    Linus Torvalds
     

17 Mar, 2016

3 commits

  • Forward devm_ioremap_resource() error code instead of returning
    -ENOMEM.

    Signed-off-by: Boris Brezillon
    Reported-by: Russell King - ARM Linux
    Fixes: f63601fd616a ("crypto: marvell/cesa - add a new driver for Marvell's CESA")
    Cc: # 4.2+
    Signed-off-by: Herbert Xu

    Boris BREZILLON
     
  • ->export() might be called before we have done an update operation,
    and in this case the ->state field is left uninitialized.
    Put the correct default value when initializing the request.

    Signed-off-by: Boris Brezillon
    Signed-off-by: Herbert Xu

    Boris BREZILLON
     
  • Crypto requests are not guaranteed to be finalized (->final() call),
    and can be freed at any moment, without getting any notification from
    the core. This can lead to memory leaks of the ->cache buffer.

    Make this buffer part of the request object, and allocate an extra buffer
    from the DMA cache pool when doing DMA operations.

    As a side effect, this patch also fixes another bug related to cache
    allocation and DMA operations. When the core allocates a new request and
    import an existing state, a cache buffer can be allocated (depending
    on the state). The problem is, at that very moment, we don't know yet
    whether the request will use DMA or not, and since everything is
    likely to be initialized to zero, mv_cesa_ahash_alloc_cache() thinks it
    should allocate a buffer for standard operation. But when
    mv_cesa_ahash_free_cache() is called, req->type has been set to
    CESA_DMA_REQ in the meantime, thus leading to an invalind dma_pool_free()
    call (the buffer passed in argument has not been allocated from the pool).

    Signed-off-by: Boris Brezillon
    Reported-by: Gregory CLEMENT
    Signed-off-by: Herbert Xu

    Boris BREZILLON
     

06 Feb, 2016

1 commit


17 Nov, 2015

1 commit