crypto: nx - Fixing the limit number of bytes to be processed
The previous limits were estimated locally in a single step basead on bound values, however it was not correct since when given certain scatterlist the function nx_build_sg_lists was consuming more sg entries than allocated causing a memory corruption and crashes. e.g.: in the worst case we could have one sg entry for a single byte. This patch fixes it modifying the logic of the bound limit moving it to nx_sg_build_lists and set a correct sg_max limit, adding a trim function to ensure the bound in sg_list. Also fixing nx_build_sg_list NULL and untreated return in case of overflow. Signed-off-by: Leonidas S. Barbosa <leosilva@linux.vnet.ibm.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Este cometimento está contido em:

cometido por
Herbert Xu

ascendente
000851119e
cometimento
f129430dd8
@@ -153,13 +153,15 @@ void nx_crypto_ctx_exit(struct crypto_tfm *tfm);
|
||||
void nx_ctx_init(struct nx_crypto_ctx *nx_ctx, unsigned int function);
|
||||
int nx_hcall_sync(struct nx_crypto_ctx *ctx, struct vio_pfo_op *op,
|
||||
u32 may_sleep);
|
||||
struct nx_sg *nx_build_sg_list(struct nx_sg *, u8 *, unsigned int, u32);
|
||||
int nx_sha_build_sg_list(struct nx_crypto_ctx *, struct nx_sg *,
|
||||
s64 *, unsigned int *, u8 *, u32);
|
||||
struct nx_sg *nx_build_sg_list(struct nx_sg *, u8 *, unsigned int *, u32);
|
||||
int nx_build_sg_lists(struct nx_crypto_ctx *, struct blkcipher_desc *,
|
||||
struct scatterlist *, struct scatterlist *, unsigned int,
|
||||
struct scatterlist *, struct scatterlist *, unsigned int *,
|
||||
unsigned int, u8 *);
|
||||
struct nx_sg *nx_walk_and_build(struct nx_sg *, unsigned int,
|
||||
struct scatterlist *, unsigned int,
|
||||
unsigned int);
|
||||
unsigned int *);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
#define NX_DEBUGFS_INIT(drv) nx_debugfs_init(drv)
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador