forked from luck/tmp_suning_uos_patched
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu: - NULL dereference in octeontx - PM reference imbalance in ks-sa - deadlock in crypto manager - memory leak in drbg - missing socket limit check on receive SG list size in algif_skcipher - typos in caam - warnings in ccp and hisilicon * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: drbg - always try to free Jitter RNG instance crypto: marvell/octeontx - Fix a potential NULL dereference crypto: algboss - don't wait during notifier callback crypto: caam - fix typos crypto: ccp - Fix sparse warnings in sev-dev crypto: hisilicon - Cap block size at 2^31 crypto: algif_skcipher - Cap recv SG list at ctx->used hwrng: ks-sa - Fix runtime PM imbalance on error
This commit is contained in:
commit
93bbca271a
|
@ -178,8 +178,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
|
|||
if (IS_ERR(thread))
|
||||
goto err_put_larval;
|
||||
|
||||
wait_for_completion_interruptible(&larval->completion);
|
||||
|
||||
return NOTIFY_STOP;
|
||||
|
||||
err_put_larval:
|
||||
|
|
|
@ -74,14 +74,10 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
|
|||
return PTR_ERR(areq);
|
||||
|
||||
/* convert iovecs of output buffers into RX SGL */
|
||||
err = af_alg_get_rsgl(sk, msg, flags, areq, -1, &len);
|
||||
err = af_alg_get_rsgl(sk, msg, flags, areq, ctx->used, &len);
|
||||
if (err)
|
||||
goto free;
|
||||
|
||||
/* Process only as much RX buffers for which we have TX data */
|
||||
if (len > ctx->used)
|
||||
len = ctx->used;
|
||||
|
||||
/*
|
||||
* If more buffers are to be expected to be processed, process only
|
||||
* full block size buffers.
|
||||
|
|
|
@ -1631,10 +1631,12 @@ static int drbg_uninstantiate(struct drbg_state *drbg)
|
|||
if (drbg->random_ready.func) {
|
||||
del_random_ready_callback(&drbg->random_ready);
|
||||
cancel_work_sync(&drbg->seed_work);
|
||||
crypto_free_rng(drbg->jent);
|
||||
drbg->jent = NULL;
|
||||
}
|
||||
|
||||
if (!IS_ERR_OR_NULL(drbg->jent))
|
||||
crypto_free_rng(drbg->jent);
|
||||
drbg->jent = NULL;
|
||||
|
||||
if (drbg->d_ops)
|
||||
drbg->d_ops->crypto_fini(drbg);
|
||||
drbg_dealloc_state(drbg);
|
||||
|
|
|
@ -244,6 +244,7 @@ static int ks_sa_rng_probe(struct platform_device *pdev)
|
|||
ret = pm_runtime_get_sync(dev);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "Failed to enable SA power-domain\n");
|
||||
pm_runtime_put_noidle(dev);
|
||||
pm_runtime_disable(dev);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ config CRYPTO_DEV_FSL_CAAM_RNG_API
|
|||
select HW_RANDOM
|
||||
help
|
||||
Selecting this will register the SEC4 hardware rng to
|
||||
the hw_random API for suppying the kernel entropy pool.
|
||||
the hw_random API for supplying the kernel entropy pool.
|
||||
|
||||
endif # CRYPTO_DEV_FSL_CAAM_JR
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ static void build_instantiation_desc(u32 *desc, int handle, int do_sk)
|
|||
|
||||
/*
|
||||
* load 1 to clear written reg:
|
||||
* resets the done interrrupt and returns the RNG to idle.
|
||||
* resets the done interrupt and returns the RNG to idle.
|
||||
*/
|
||||
append_load_imm_u32(desc, 1, LDST_SRCDST_WORD_CLRW);
|
||||
|
||||
|
@ -156,7 +156,7 @@ static inline int run_descriptor_deco0(struct device *ctrldev, u32 *desc,
|
|||
DESC_DER_DECO_STAT_SHIFT;
|
||||
|
||||
/*
|
||||
* If an error occured in the descriptor, then
|
||||
* If an error occurred in the descriptor, then
|
||||
* the DECO status field will be set to 0x0D
|
||||
*/
|
||||
if (deco_state == DECO_STAT_HOST_ERR)
|
||||
|
@ -264,7 +264,7 @@ static void devm_deinstantiate_rng(void *data)
|
|||
* - -ENODEV if DECO0 couldn't be acquired
|
||||
* - -EAGAIN if an error occurred when executing the descriptor
|
||||
* f.i. there was a RNG hardware error due to not "good enough"
|
||||
* entropy being aquired.
|
||||
* entropy being acquired.
|
||||
*/
|
||||
static int instantiate_rng(struct device *ctrldev, int state_handle_mask,
|
||||
int gen_sk)
|
||||
|
@ -733,8 +733,8 @@ static int caam_probe(struct platform_device *pdev)
|
|||
handle_imx6_err005766(&ctrl->mcr);
|
||||
|
||||
/*
|
||||
* Read the Compile Time paramters and SCFGR to determine
|
||||
* if Virtualization is enabled for this platform
|
||||
* Read the Compile Time parameters and SCFGR to determine
|
||||
* if virtualization is enabled for this platform
|
||||
*/
|
||||
scfgr = rd_reg32(&ctrl->scfgr);
|
||||
|
||||
|
@ -863,9 +863,9 @@ static int caam_probe(struct platform_device *pdev)
|
|||
}
|
||||
/*
|
||||
* if instantiate_rng(...) fails, the loop will rerun
|
||||
* and the kick_trng(...) function will modfiy the
|
||||
* and the kick_trng(...) function will modify the
|
||||
* upper and lower limits of the entropy sampling
|
||||
* interval, leading to a sucessful initialization of
|
||||
* interval, leading to a successful initialization of
|
||||
* the RNG.
|
||||
*/
|
||||
ret = instantiate_rng(dev, inst_handles,
|
||||
|
@ -882,8 +882,8 @@ static int caam_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
/*
|
||||
* Set handles init'ed by this module as the complement of the
|
||||
* already initialized ones
|
||||
* Set handles initialized by this module as the complement of
|
||||
* the already initialized ones
|
||||
*/
|
||||
ctrlpriv->rng4_sh_init = ~ctrlpriv->rng4_sh_init & RDSTA_MASK;
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#define SEC4_SG_LEN_EXT 0x80000000 /* Entry points to table */
|
||||
#define SEC4_SG_LEN_FIN 0x40000000 /* Last ent in table */
|
||||
#define SEC4_SG_LEN_FIN 0x40000000 /* Last entry in table */
|
||||
#define SEC4_SG_BPID_MASK 0x000000ff
|
||||
#define SEC4_SG_BPID_SHIFT 16
|
||||
#define SEC4_SG_LEN_MASK 0x3fffffff /* Excludes EXT and FINAL */
|
||||
|
@ -113,7 +113,7 @@
|
|||
*/
|
||||
#define HDR_REVERSE 0x00000800
|
||||
|
||||
/* Propogate DNR property to SharedDesc */
|
||||
/* Propagate DNR property to SharedDesc */
|
||||
#define HDR_PROP_DNR 0x00000800
|
||||
|
||||
/* JobDesc/SharedDesc share property */
|
||||
|
|
|
@ -453,7 +453,7 @@ struct srtp_decap_pdb {
|
|||
#define DSA_PDB_N_MASK 0x7f
|
||||
|
||||
struct dsa_sign_pdb {
|
||||
u32 sgf_ln; /* Use DSA_PDB_ defintions per above */
|
||||
u32 sgf_ln; /* Use DSA_PDB_ definitions per above */
|
||||
u8 *q;
|
||||
u8 *r;
|
||||
u8 *g; /* or Gx,y */
|
||||
|
|
|
@ -376,6 +376,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
|
|||
struct sev_device *sev = psp_master->sev_data;
|
||||
struct sev_user_data_pek_csr input;
|
||||
struct sev_data_pek_csr *data;
|
||||
void __user *input_address;
|
||||
void *blob = NULL;
|
||||
int ret;
|
||||
|
||||
|
@ -394,6 +395,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
|
|||
goto cmd;
|
||||
|
||||
/* allocate a physically contiguous buffer to store the CSR blob */
|
||||
input_address = (void __user *)input.address;
|
||||
if (input.length > SEV_FW_BLOB_MAX_SIZE) {
|
||||
ret = -EFAULT;
|
||||
goto e_free;
|
||||
|
@ -426,7 +428,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
|
|||
}
|
||||
|
||||
if (blob) {
|
||||
if (copy_to_user((void __user *)input.address, blob, input.length))
|
||||
if (copy_to_user(input_address, blob, input.length))
|
||||
ret = -EFAULT;
|
||||
}
|
||||
|
||||
|
@ -437,7 +439,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void *psp_copy_user_blob(u64 __user uaddr, u32 len)
|
||||
void *psp_copy_user_blob(u64 uaddr, u32 len)
|
||||
{
|
||||
if (!uaddr || !len)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
@ -446,7 +448,7 @@ void *psp_copy_user_blob(u64 __user uaddr, u32 len)
|
|||
if (len > SEV_FW_BLOB_MAX_SIZE)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
return memdup_user((void __user *)(uintptr_t)uaddr, len);
|
||||
return memdup_user((void __user *)uaddr, len);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(psp_copy_user_blob);
|
||||
|
||||
|
@ -621,6 +623,7 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
|
|||
{
|
||||
struct sev_user_data_get_id2 input;
|
||||
struct sev_data_get_id *data;
|
||||
void __user *input_address;
|
||||
void *id_blob = NULL;
|
||||
int ret;
|
||||
|
||||
|
@ -631,6 +634,8 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
|
|||
if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
|
||||
return -EFAULT;
|
||||
|
||||
input_address = (void __user *)input.address;
|
||||
|
||||
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
@ -660,8 +665,7 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
|
|||
}
|
||||
|
||||
if (id_blob) {
|
||||
if (copy_to_user((void __user *)input.address,
|
||||
id_blob, data->len)) {
|
||||
if (copy_to_user(input_address, id_blob, data->len)) {
|
||||
ret = -EFAULT;
|
||||
goto e_free;
|
||||
}
|
||||
|
@ -720,6 +724,8 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
|
|||
struct sev_user_data_pdh_cert_export input;
|
||||
void *pdh_blob = NULL, *cert_blob = NULL;
|
||||
struct sev_data_pdh_cert_export *data;
|
||||
void __user *input_cert_chain_address;
|
||||
void __user *input_pdh_cert_address;
|
||||
int ret;
|
||||
|
||||
/* If platform is not in INIT state then transition it to INIT. */
|
||||
|
@ -745,6 +751,9 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
|
|||
!input.cert_chain_address)
|
||||
goto cmd;
|
||||
|
||||
input_pdh_cert_address = (void __user *)input.pdh_cert_address;
|
||||
input_cert_chain_address = (void __user *)input.cert_chain_address;
|
||||
|
||||
/* Allocate a physically contiguous buffer to store the PDH blob. */
|
||||
if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE) {
|
||||
ret = -EFAULT;
|
||||
|
@ -788,7 +797,7 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
|
|||
}
|
||||
|
||||
if (pdh_blob) {
|
||||
if (copy_to_user((void __user *)input.pdh_cert_address,
|
||||
if (copy_to_user(input_pdh_cert_address,
|
||||
pdh_blob, input.pdh_cert_len)) {
|
||||
ret = -EFAULT;
|
||||
goto e_free_cert;
|
||||
|
@ -796,7 +805,7 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
|
|||
}
|
||||
|
||||
if (cert_blob) {
|
||||
if (copy_to_user((void __user *)input.cert_chain_address,
|
||||
if (copy_to_user(input_cert_chain_address,
|
||||
cert_blob, input.cert_chain_len))
|
||||
ret = -EFAULT;
|
||||
}
|
||||
|
|
|
@ -66,7 +66,8 @@ struct hisi_acc_sgl_pool *hisi_acc_create_sgl_pool(struct device *dev,
|
|||
|
||||
sgl_size = sizeof(struct acc_hw_sge) * sge_nr +
|
||||
sizeof(struct hisi_acc_hw_sgl);
|
||||
block_size = PAGE_SIZE * (1 << (MAX_ORDER - 1));
|
||||
block_size = 1 << (PAGE_SHIFT + MAX_ORDER <= 32 ?
|
||||
PAGE_SHIFT + MAX_ORDER - 1 : 31);
|
||||
sgl_num_per_block = block_size / sgl_size;
|
||||
block_num = count / sgl_num_per_block;
|
||||
remain_sgl = count % sgl_num_per_block;
|
||||
|
|
|
@ -118,6 +118,9 @@ static void otx_cpt_aead_callback(int status, void *arg1, void *arg2)
|
|||
struct otx_cpt_req_info *cpt_req;
|
||||
struct pci_dev *pdev;
|
||||
|
||||
if (!cpt_info)
|
||||
goto complete;
|
||||
|
||||
cpt_req = cpt_info->req;
|
||||
if (!status) {
|
||||
/*
|
||||
|
@ -129,10 +132,10 @@ static void otx_cpt_aead_callback(int status, void *arg1, void *arg2)
|
|||
!cpt_req->is_enc)
|
||||
status = validate_hmac_cipher_null(cpt_req);
|
||||
}
|
||||
if (cpt_info) {
|
||||
pdev = cpt_info->pdev;
|
||||
do_request_cleanup(pdev, cpt_info);
|
||||
}
|
||||
pdev = cpt_info->pdev;
|
||||
do_request_cleanup(pdev, cpt_info);
|
||||
|
||||
complete:
|
||||
if (areq)
|
||||
areq->complete(areq, status);
|
||||
}
|
||||
|
|
|
@ -597,7 +597,7 @@ int sev_guest_df_flush(int *error);
|
|||
*/
|
||||
int sev_guest_decommission(struct sev_data_decommission *data, int *error);
|
||||
|
||||
void *psp_copy_user_blob(u64 __user uaddr, u32 len);
|
||||
void *psp_copy_user_blob(u64 uaddr, u32 len);
|
||||
|
||||
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user