crypto: drbg - prevent invalid SG mappings
authorStephan Mueller <smueller@chronox.de>
Tue, 29 Nov 2016 08:45:04 +0000 (09:45 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 30 Nov 2016 11:46:44 +0000 (19:46 +0800)
commit5102981212454998d549273ff9847f19e97a1794
tree2f1b0259571af794c5e1004d452b0f81966c646f
parentc8467f7a3620698bf3c22f0e199b550fb611a8ae
crypto: drbg - prevent invalid SG mappings

When using SGs, only heap memory (memory that is valid as per
virt_addr_valid) is allowed to be referenced. The CTR DRBG used to
reference the caller-provided memory directly in an SG. In case the
caller provided stack memory pointers, the SG mapping is not considered
to be valid. In some cases, this would even cause a paging fault.

The change adds a new scratch buffer that is used unconditionally to
catch the cases where the caller-provided buffer is not suitable for
use in an SG. The crypto operation of the CTR DRBG produces its output
with that scratch buffer and finally copies the content of the
scratch buffer to the caller's buffer.

The scratch buffer is allocated during allocation time of the CTR DRBG
as its access is protected with the DRBG mutex.

Signed-off-by: Stephan Mueller <smueller@chronox.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/drbg.c
include/crypto/drbg.h