fa5054c4bb
In virtio_dev_extbuf_alloc(), the shinfo structure used to store the reference counter and the free callback of the external buffer is by default stored inside the mbuf data. This is wrong because the mbuf (and its data) can be freed before the external buffer, for instance in the following situation: pkt2 = rte_pktmbuf_alloc(mp); rte_pktmbuf_attach(pkt2, pkt); rte_pktmbuf_free(pkt); After this, pkt is freed, but it still contains shinfo, which is referenced by pkt2. Fix this by always storing the shinfo beside the external buffer. Fixes: c3ff0ac70acb ("vhost: improve performance by supporting large buffer") Cc: stable@dpdk.org Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>