diff options
| -rw-r--r-- | drivers/crypto/talitos.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c index 45e20707cef8..54d80e7edb86 100644 --- a/drivers/crypto/talitos.c +++ b/drivers/crypto/talitos.c | |||
| @@ -1361,23 +1361,18 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, | |||
| 1361 | struct talitos_private *priv = dev_get_drvdata(dev); | 1361 | struct talitos_private *priv = dev_get_drvdata(dev); |
| 1362 | bool is_sec1 = has_ftr_sec1(priv); | 1362 | bool is_sec1 = has_ftr_sec1(priv); |
| 1363 | int max_len = is_sec1 ? TALITOS1_MAX_DATA_LEN : TALITOS2_MAX_DATA_LEN; | 1363 | int max_len = is_sec1 ? TALITOS1_MAX_DATA_LEN : TALITOS2_MAX_DATA_LEN; |
| 1364 | void *err; | ||
| 1365 | 1364 | ||
| 1366 | if (cryptlen + authsize > max_len) { | 1365 | if (cryptlen + authsize > max_len) { |
| 1367 | dev_err(dev, "length exceeds h/w max limit\n"); | 1366 | dev_err(dev, "length exceeds h/w max limit\n"); |
| 1368 | return ERR_PTR(-EINVAL); | 1367 | return ERR_PTR(-EINVAL); |
| 1369 | } | 1368 | } |
| 1370 | 1369 | ||
| 1371 | if (ivsize) | ||
| 1372 | iv_dma = dma_map_single(dev, iv, ivsize, DMA_TO_DEVICE); | ||
| 1373 | |||
| 1374 | if (!dst || dst == src) { | 1370 | if (!dst || dst == src) { |
| 1375 | src_len = assoclen + cryptlen + authsize; | 1371 | src_len = assoclen + cryptlen + authsize; |
| 1376 | src_nents = sg_nents_for_len(src, src_len); | 1372 | src_nents = sg_nents_for_len(src, src_len); |
| 1377 | if (src_nents < 0) { | 1373 | if (src_nents < 0) { |
| 1378 | dev_err(dev, "Invalid number of src SG.\n"); | 1374 | dev_err(dev, "Invalid number of src SG.\n"); |
| 1379 | err = ERR_PTR(-EINVAL); | 1375 | return ERR_PTR(-EINVAL); |
| 1380 | goto error_sg; | ||
| 1381 | } | 1376 | } |
| 1382 | src_nents = (src_nents == 1) ? 0 : src_nents; | 1377 | src_nents = (src_nents == 1) ? 0 : src_nents; |
| 1383 | dst_nents = dst ? src_nents : 0; | 1378 | dst_nents = dst ? src_nents : 0; |
| @@ -1387,16 +1382,14 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, | |||
| 1387 | src_nents = sg_nents_for_len(src, src_len); | 1382 | src_nents = sg_nents_for_len(src, src_len); |
| 1388 | if (src_nents < 0) { | 1383 | if (src_nents < 0) { |
| 1389 | dev_err(dev, "Invalid number of src SG.\n"); | 1384 | dev_err(dev, "Invalid number of src SG.\n"); |
| 1390 | err = ERR_PTR(-EINVAL); | 1385 | return ERR_PTR(-EINVAL); |
| 1391 | goto error_sg; | ||
| 1392 | } | 1386 | } |
| 1393 | src_nents = (src_nents == 1) ? 0 : src_nents; | 1387 | src_nents = (src_nents == 1) ? 0 : src_nents; |
| 1394 | dst_len = assoclen + cryptlen + (encrypt ? authsize : 0); | 1388 | dst_len = assoclen + cryptlen + (encrypt ? authsize : 0); |
| 1395 | dst_nents = sg_nents_for_len(dst, dst_len); | 1389 | dst_nents = sg_nents_for_len(dst, dst_len); |
| 1396 | if (dst_nents < 0) { | 1390 | if (dst_nents < 0) { |
| 1397 | dev_err(dev, "Invalid number of dst SG.\n"); | 1391 | dev_err(dev, "Invalid number of dst SG.\n"); |
| 1398 | err = ERR_PTR(-EINVAL); | 1392 | return ERR_PTR(-EINVAL); |
| 1399 | goto error_sg; | ||
| 1400 | } | 1393 | } |
| 1401 | dst_nents = (dst_nents == 1) ? 0 : dst_nents; | 1394 | dst_nents = (dst_nents == 1) ? 0 : dst_nents; |
| 1402 | } | 1395 | } |
| @@ -1425,10 +1418,10 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, | |||
| 1425 | alloc_len += sizeof(struct talitos_desc); | 1418 | alloc_len += sizeof(struct talitos_desc); |
| 1426 | 1419 | ||
| 1427 | edesc = kmalloc(alloc_len, GFP_DMA | flags); | 1420 | edesc = kmalloc(alloc_len, GFP_DMA | flags); |
| 1428 | if (!edesc) { | 1421 | if (!edesc) |
| 1429 | err = ERR_PTR(-ENOMEM); | 1422 | return ERR_PTR(-ENOMEM); |
| 1430 | goto error_sg; | 1423 | if (ivsize) |
| 1431 | } | 1424 | iv_dma = dma_map_single(dev, iv, ivsize, DMA_TO_DEVICE); |
| 1432 | memset(&edesc->desc, 0, sizeof(edesc->desc)); | 1425 | memset(&edesc->desc, 0, sizeof(edesc->desc)); |
| 1433 | 1426 | ||
| 1434 | edesc->src_nents = src_nents; | 1427 | edesc->src_nents = src_nents; |
| @@ -1445,10 +1438,6 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev, | |||
| 1445 | DMA_BIDIRECTIONAL); | 1438 | DMA_BIDIRECTIONAL); |
| 1446 | } | 1439 | } |
| 1447 | return edesc; | 1440 | return edesc; |
| 1448 | error_sg: | ||
| 1449 | if (iv_dma) | ||
| 1450 | dma_unmap_single(dev, iv_dma, ivsize, DMA_TO_DEVICE); | ||
| 1451 | return err; | ||
| 1452 | } | 1441 | } |
| 1453 | 1442 | ||
| 1454 | static struct talitos_edesc *aead_edesc_alloc(struct aead_request *areq, u8 *iv, | 1443 | static struct talitos_edesc *aead_edesc_alloc(struct aead_request *areq, u8 *iv, |
