11 Oct, 2017
1 commit
-
The shash ahash digest adaptor function may crash if given a
zero-length input together with a null SG list. This is because
it tries to read the SG list before looking at the length.This patch fixes it by checking the length first.
Cc:
Reported-by: Stephan Müller
Signed-off-by: Herbert Xu
Tested-by: Stephan Müller
07 Oct, 2017
1 commit
-
The SCTP program may sleep under a spinlock, and the function call path is:
sctp_generate_t3_rtx_event (acquire the spinlock)
sctp_do_sm
sctp_side_effects
sctp_cmd_interpreter
sctp_make_init_ack
sctp_pack_cookie
crypto_shash_setkey
shash_setkey_unaligned
kmalloc(GFP_KERNEL)For the same reason, the orinoco driver may sleep in interrupt handler,
and the function call path is:
orinoco_rx_isr_tasklet
orinoco_rx
orinoco_mic
crypto_shash_setkey
shash_setkey_unaligned
kmalloc(GFP_KERNEL)To fix it, GFP_KERNEL is replaced with GFP_ATOMIC.
This bug is found by my static analysis tool and my code review.Signed-off-by: Jia-Ju Bai
Signed-off-by: Herbert Xu
13 Jan, 2017
1 commit
-
Continuing from this commit: 52f5684c8e1e
("kernel: use macros from compiler.h instead of __attribute__((...))")I submitted 4 total patches. They are part of task I've taken up to
increase compiler portability in the kernel. I've cleaned up the
subsystems under /kernel /mm /block and /security, this patch targets
/crypto.There is which provides macros for various gcc specific
constructs. Eg: __weak for __attribute__((weak)). I've cleaned all
instances of gcc specific attributes with the right macros for the crypto
subsystem.I had to make one additional change into compiler-gcc.h for the case when
one wants to use this: __attribute__((aligned) and not specify an alignment
factor. From the gcc docs, this will result in the largest alignment for
that data type on the target machine so I've named the macro
__aligned_largest. Please advise if another name is more appropriate.Signed-off-by: Gideon Israel Dsouza
Signed-off-by: Herbert Xu
18 Mar, 2016
1 commit
-
Pull crypto update from Herbert Xu:
"Here is the crypto update for 4.6:API:
- Convert remaining crypto_hash users to shash or ahash, also convert
blkcipher/ablkcipher users to skcipher.
- Remove crypto_hash interface.
- Remove crypto_pcomp interface.
- Add crypto engine for async cipher drivers.
- Add akcipher documentation.
- Add skcipher documentation.Algorithms:
- Rename crypto/crc32 to avoid name clash with lib/crc32.
- Fix bug in keywrap where we zero the wrong pointer.Drivers:
- Support T5/M5, T7/M7 SPARC CPUs in n2 hwrng driver.
- Add PIC32 hwrng driver.
- Support BCM6368 in bcm63xx hwrng driver.
- Pack structs for 32-bit compat users in qat.
- Use crypto engine in omap-aes.
- Add support for sama5d2x SoCs in atmel-sha.
- Make atmel-sha available again.
- Make sahara hashing available again.
- Make ccp hashing available again.
- Make sha1-mb available again.
- Add support for multiple devices in ccp.
- Improve DMA performance in caam.
- Add hashing support to rockchip"* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (116 commits)
crypto: qat - remove redundant arbiter configuration
crypto: ux500 - fix checks of error code returned by devm_ioremap_resource()
crypto: atmel - fix checks of error code returned by devm_ioremap_resource()
crypto: qat - Change the definition of icp_qat_uof_regtype
hwrng: exynos - use __maybe_unused to hide pm functions
crypto: ccp - Add abstraction for device-specific calls
crypto: ccp - CCP versioning support
crypto: ccp - Support for multiple CCPs
crypto: ccp - Remove check for x86 family and model
crypto: ccp - memset request context to zero during import
lib/mpi: use "static inline" instead of "extern inline"
lib/mpi: avoid assembler warning
hwrng: bcm63xx - fix non device tree compatibility
crypto: testmgr - allow rfc3686 aes-ctr variants in fips mode.
crypto: qat - The AE id should be less than the maximal AE number
lib/mpi: Endianness fix
crypto: rockchip - add hash support for crypto engine in rk3288
crypto: xts - fix compile errors
crypto: doc - add skcipher API documentation
crypto: doc - update AEAD AD handling
...
06 Feb, 2016
1 commit
-
This patch removes all traces of the crypto_hash interface, now
that everyone has switched over to shash or ahash.Signed-off-by: Herbert Xu
27 Jan, 2016
1 commit
-
The has_key logic is wrong for shash algorithms as they always
have a setkey function. So we should instead be testing against
shash_no_setkey.Fixes: a5596d633278 ("crypto: hash - Add crypto_ahash_has_setkey")
Cc: stable@vger.kernel.org
Reported-by: Stephan Mueller
Signed-off-by: Herbert Xu
Tested-by: Stephan Mueller
18 Jan, 2016
1 commit
-
This patch adds a way for ahash users to determine whether a key
is required by a crypto_ahash transform.Cc: stable@vger.kernel.org
Signed-off-by: Herbert Xu
21 Apr, 2015
1 commit
-
This patch replaces crypto_shash_extsize function with
crypto_alg_extsize.Signed-off-by: Herbert Xu
08 Jun, 2014
1 commit
-
__attribute__((aligned)) applies the default alignment for the largest scalar
type for the target ABI. gcc allows it to be applied inline to a defined type.
Clang only allows it to be applied to a type definition (PR11071).Making it into 2 lines makes it more readable and works with both compilers.
Author: Mark Charlebois
Signed-off-by: Mark Charlebois
Signed-off-by: Behan Webster
19 Feb, 2013
1 commit
-
Three errors resulting in kernel memory disclosure:
1/ The structures used for the netlink based crypto algorithm report API
are located on the stack. As snprintf() does not fill the remainder of
the buffer with null bytes, those stack bytes will be disclosed to users
of the API. Switch to strncpy() to fix this.2/ crypto_report_one() does not initialize all field of struct
crypto_user_alg. Fix this to fix the heap info leak.3/ For the module name we should copy only as many bytes as
module_name() returns -- not as much as the destination buffer could
hold. But the current code does not and therefore copies random data
from behind the end of the module name, as the module name is always
shorter than CRYPTO_MAX_ALG_NAME.Also switch to use strncpy() to copy the algorithm's name and
driver_name. They are strings, after all.Signed-off-by: Mathias Krause
Cc: Steffen Klassert
Signed-off-by: Herbert Xu
01 Aug, 2012
1 commit
-
Add crypto_[un]register_shashes() to allow simplifying init/exit code of shash
crypto modules that register multiple algorithms.Signed-off-by: Jussi Kivilinna
Signed-off-by: Herbert Xu
02 Apr, 2012
1 commit
-
These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.Signed-off-by: David S. Miller
20 Mar, 2012
1 commit
-
Signed-off-by: Cong Wang
11 Nov, 2011
1 commit
-
The report functions use NLA_PUT so we need to ensure that NET
is enabled.Reported-by: Luis Henriques
Signed-off-by: Herbert Xu
21 Oct, 2011
1 commit
-
Signed-off-by: Steffen Klassert
Signed-off-by: Herbert Xu
05 Nov, 2010
1 commit
-
The function shash_async_import did not initialise the descriptor
correctly prior to calling the underlying shash import function.This patch adds the required initialisation.
Reported-by: Miloslav Trmac
Signed-off-by: Herbert Xu
19 May, 2010
1 commit
-
The macro CRYPTO_MINALIGN is not meant to be used directly. This
patch replaces it with crypto_tfm_ctx_alignment.Signed-off-by: Herbert Xu
24 Jul, 2009
1 commit
-
crypto_init_shash_ops_async() tests for setkey and not for import
before exporting the algorithms import function to ahash.
This patch fixes this.Signed-off-by: Steffen Klassert
Signed-off-by: Herbert Xu
22 Jul, 2009
1 commit
-
This patch provides a default export/import function for all
shash algorithms. It simply copies the descriptor context as
is done by sha1_generic.This in essence means that all existing shash algorithms now
support export/import. This is something that will be depended
upon in implementations such as hmac. Therefore all new shash
and ahash implementations must support export/import.For those that cannot obtain a partial result, padlock-sha's
fallback model should be used so that a partial result is always
available.Signed-off-by: Herbert Xu
15 Jul, 2009
2 commits
-
When shash_ahash_finup encounters a null request, we end up not
calling the underlying final function. This patch fixes that.Signed-off-by: Herbert Xu
-
This patch exports the finup operation where available and adds
a default finup operation for ahash. The operations final, finup
and digest also will now deal with unaligned result pointers by
copying it. Finally export/import operations are will now be
exported too.Signed-off-by: Herbert Xu
14 Jul, 2009
7 commits
-
When we encounter an unaligned pointer we are supposed to copy
it to a temporary aligned location. However the temporary buffer
isn't aligned properly. This patch fixes that.Signed-off-by: Herbert Xu
-
Some unaligned buffers on the stack weren't zapped properly which
may cause secret data to be leaked. This patch fixes them by doing
a zero memset.It is also possible for us to place random kernel stack contents
in the digest buffer if a digest operation fails. This is fixed
by only copying if the operation succeeded.Signed-off-by: Herbert Xu
-
Now that all ahash implementations have been converted to the new
ahash type, we can remove old_ahash_alg and its associated support.Signed-off-by: Herbert Xu
-
This patch converts crypto_ahash to the new style. The old ahash
algorithm type is retained until the existing ahash implementations
are also converted. All ahash users will automatically get the
new crypto_ahash type.Signed-off-by: Herbert Xu
-
As the extsize and init_tfm functions belong to the frontend the
frontend argument is superfluous.Signed-off-by: Herbert Xu
-
This patch exports the async functions so that they can be reused
by cryptd when it switches over to using shash.Signed-off-by: Herbert Xu
-
This patch changes descsize to a run-time attribute so that
implementations can change it in their init functions.Signed-off-by: Herbert Xu
12 Jul, 2009
1 commit
-
This patch moves the run-time null setkey check to shash_prepare_alg
just like we did for finup/digest.Signed-off-by: Herbert Xu
11 Jul, 2009
2 commits
-
This patch moves the run-time null finup/digest checks to the
shash_prepare_alg function which is run at registration time.Signed-off-by: Herbert Xu
-
This patch replaces the full descriptor export with an export of
the partial hash state. This allows the use of a consistent export
format across all implementations of a given algorithm.This is useful because a number of cases require the use of the
partial hash state, e.g., PadLock can use the SHA1 hash state
to get around the fact that it can only hash contiguous data
chunks.Signed-off-by: Herbert Xu
08 Jul, 2009
6 commits
-
This patch fixes crypto_shash_import to propagate the value returned
by reinit.Signed-off-by: Herbert Xu
-
This patch simplifies the default digest function by using finup.
Signed-off-by: Herbert Xu
-
This patch adds shash_register_instance so that shash instances
can be registered without bypassing the shash checks applied to
normal algorithms.Signed-off-by: Herbert Xu
-
This patch adds the helper shash_attr_alg2 which locates a shash
algorithm based on the information in the given attribute.Signed-off-by: Herbert Xu
-
This patch adds the functions needed to create and use shash
spawns, i.e., to use shash algorithms in a template.Signed-off-by: Herbert Xu
-
This patch adds shash_instance and the associated alloc/free
functions. This is meant to be an instance that with a shash
algorithm under it. Note that the instance itself doesn't have
to be shash.Signed-off-by: Herbert Xu
27 Mar, 2009
1 commit
-
When the total length is shorter than the calculated number of unaligned bytes, the call to shash->update breaks. For example, calling crc32c on unaligned buffer with length of 1 can result in a system crash.
Signed-off-by: Yehuda Sadeh
Signed-off-by: Herbert Xu
18 Feb, 2009
2 commits
-
This is based on a report and patch by Geert Uytterhoeven.
The functions crypto_alloc_tfm and create_create_tfm return a
pointer that needs to be adjusted by the caller when successful
and otherwise an error value. This means that the caller has
to check for the error and only perform the adjustment if the
pointer returned is valid.Since all callers want to make the adjustment and we know how
to adjust it ourselves, it's much easier to just return adjusted
pointer directly.The only caveat is that we have to return a void * instead of
struct crypto_tfm *. However, this isn't that bad because both
of these functions are for internal use only (by types code like
shash.c, not even algorithms code).This patch also moves crypto_alloc_tfm into crypto/internal.h
(crypto_create_tfm is already there) to reflect this.Signed-off-by: Herbert Xu
-
We're currently checking the frontend type in init_tfm. This is
completely pointless because the fact that we're called at all
means that the frontend is ours so the type must match as well.Signed-off-by: Herbert Xu