ring: make tailq fully local
authorAnatoly Burakov <anatoly.burakov@intel.com>
Fri, 20 Jun 2014 15:42:19 +0000 (16:42 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 22 Jul 2014 17:42:18 +0000 (19:42 +0200)
commite3f3b68c6e421e0eb71e42d23b35c5c74725279c
tree3ba92c182c4255d654e39c0565f073795c9d317f
parent2db1d35feaf0a2829709a3d57b9204880dedf357
ring: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_eal/linuxapp/eal/eal_ivshmem.c
lib/librte_ring/Makefile
lib/librte_ring/rte_ring.c
lib/librte_ring/rte_ring.h