On Thu, Jun 11, 2020 at 08:48:01AM +0800, Xiaolong Ye wrote: > We should make sure off + size < sizeof(struct rte_mbuf) to avoid > possible out-of-bounds access of free_space array, there is no issue > currently due to the low bits of free_flags (which is adjacent to > free_space) are always set to 0. But we shouldn't rely on it since it's > fragile and layout of struct mbuf_dyn_shm may be changed in the future. > This patch adds boundary check explicitly to avoid potential risk of > out-of-bounds access. > > Fixes: 4958ca3a443a ("mbuf: support dynamic fields and flags") > Cc: sta...@dpdk.org > > Signed-off-by: Xiaolong Ye <xiaolong...@intel.com>
I suggest to change the title in: mbuf: fix out-of-bounds access at dyn field register Thomas, as Xiaolong pointed-out, it fixes a bug in the code but there is no impact. I let you decide if it should be tagged as a fix or not, and if it should be backported. I'll tend to say yes. Acked-by: Olivier Matz <olivier.m...@6wind.com> > --- > > V2: put the check before accessing free_space > > lib/librte_mbuf/rte_mbuf_dyn.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_mbuf/rte_mbuf_dyn.c b/lib/librte_mbuf/rte_mbuf_dyn.c > index d6931f847..9d6388cff 100644 > --- a/lib/librte_mbuf/rte_mbuf_dyn.c > +++ b/lib/librte_mbuf/rte_mbuf_dyn.c > @@ -71,7 +71,8 @@ process_score(void) > > for (off = 0; off < sizeof(struct rte_mbuf); off++) { > /* get the size of the free zone */ > - for (size = 0; shm->free_space[off + size]; size++) > + for (size = 0; (off + size) < sizeof(struct rte_mbuf) && > + shm->free_space[off + size]; size++) > ; > if (size == 0) > continue; > -- > 2.17.1 >