[PATCH v4 05/30] baseband/acc100: check turbo dec/enc input
Hernan Vargas
hernan.vargas at intel.com
Wed Oct 19 02:38:53 CEST 2022
Add NULL check for the turbo decoder and encoder input length.
Fixes: 3bfc5f60403 ("baseband/acc100: add debug function to validate input")
Cc: stable at dpdk.org
Signed-off-by: Hernan Vargas <hernan.vargas at intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
drivers/baseband/acc/rte_acc100_pmd.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/drivers/baseband/acc/rte_acc100_pmd.c b/drivers/baseband/acc/rte_acc100_pmd.c
index a80ecdca84..bf0d7d77e7 100644
--- a/drivers/baseband/acc/rte_acc100_pmd.c
+++ b/drivers/baseband/acc/rte_acc100_pmd.c
@@ -1763,6 +1763,11 @@ validate_enc_op(struct rte_bbdev_enc_op *op, struct acc_queue *q)
return -1;
}
+ if (unlikely(turbo_enc->input.length == 0)) {
+ rte_bbdev_log(ERR, "input length null");
+ return -1;
+ }
+
if (turbo_enc->code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) {
tb = &turbo_enc->tb_params;
if ((tb->k_neg < RTE_BBDEV_TURBO_MIN_CB_SIZE
@@ -1782,11 +1787,12 @@ validate_enc_op(struct rte_bbdev_enc_op *op, struct acc_queue *q)
RTE_BBDEV_TURBO_MAX_CB_SIZE);
return -1;
}
- if (tb->c_neg > (RTE_BBDEV_TURBO_MAX_CODE_BLOCKS - 1))
+ if (unlikely(tb->c_neg > 0)) {
rte_bbdev_log(ERR,
- "c_neg (%u) is out of range 0 <= value <= %u",
- tb->c_neg,
- RTE_BBDEV_TURBO_MAX_CODE_BLOCKS - 1);
+ "c_neg (%u) expected to be null",
+ tb->c_neg);
+ return -1;
+ }
if (tb->c < 1 || tb->c > RTE_BBDEV_TURBO_MAX_CODE_BLOCKS) {
rte_bbdev_log(ERR,
"c (%u) is out of range 1 <= value <= %u",
@@ -2280,6 +2286,11 @@ validate_dec_op(struct rte_bbdev_dec_op *op, struct acc_queue *q)
return -1;
}
+ if (unlikely(turbo_dec->input.length == 0)) {
+ rte_bbdev_log(ERR, "input length null");
+ return -1;
+ }
+
if (turbo_dec->code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) {
tb = &turbo_dec->tb_params;
if ((tb->k_neg < RTE_BBDEV_TURBO_MIN_CB_SIZE
@@ -2300,11 +2311,13 @@ validate_dec_op(struct rte_bbdev_dec_op *op, struct acc_queue *q)
RTE_BBDEV_TURBO_MAX_CB_SIZE);
return -1;
}
- if (tb->c_neg > (RTE_BBDEV_TURBO_MAX_CODE_BLOCKS - 1))
+ if (unlikely(tb->c_neg > (RTE_BBDEV_TURBO_MAX_CODE_BLOCKS - 1))) {
rte_bbdev_log(ERR,
"c_neg (%u) is out of range 0 <= value <= %u",
tb->c_neg,
RTE_BBDEV_TURBO_MAX_CODE_BLOCKS - 1);
+ return -1;
+ }
if (tb->c < 1 || tb->c > RTE_BBDEV_TURBO_MAX_CODE_BLOCKS) {
rte_bbdev_log(ERR,
"c (%u) is out of range 1 <= value <= %u",
--
2.37.1
More information about the stable
mailing list