[dpdk-dev] [PATCH 1/3] mbuf: add sanity checks on segment metadata
Yongseok Koh
yskoh at mellanox.com
Tue Sep 11 20:16:00 CEST 2018
> On Sep 9, 2018, at 10:45 PM, David Marchand <david.marchand at 6wind.com> wrote:
>
> Add some basic checks on the segments offset and length metadata:
> always funny to have a < 0 tailroom cast to uint16_t ;-).
>
> Signed-off-by: David Marchand <david.marchand at 6wind.com>
> ---
> lib/librte_mbuf/rte_mbuf.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c
> index e714c5a59..137a320ed 100644
> --- a/lib/librte_mbuf/rte_mbuf.c
> +++ b/lib/librte_mbuf/rte_mbuf.c
> @@ -200,6 +200,11 @@ rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header)
> pkt_len = m->pkt_len;
>
> do {
> + if (m->data_off > m->buf_len)
> + rte_panic("data offset too big in mbuf segment\n");
> + if ((uint32_t)m->data_off + (uint32_t)m->data_len >
> + (uint32_t)m->buf_len)
Casting to uint32_t is needed? All of the three fields are uint16_t and it would
anyway happen because of the integer promotion rule. Right?
Thanks,
Yongseok
> + rte_panic("data length too big in mbuf segment\n");
> nb_segs -= 1;
> pkt_len -= m->data_len;
> } while ((m = m->next) != NULL);
> --
> 2.17.1
>
More information about the dev
mailing list