On Wed, Nov 27, 2019 at 11:32 PM Stephen Hemminger <step...@networkplumber.org> wrote: > > Valgrind reports that eal interrupt thread is calling epoll_ctl > with uninitialized data. Trivial to fix by initializing it. > > Fixes: af75078fece3 ("first public release") > Cc: sta...@dpdk.org > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > --- > lib/librte_eal/linux/eal/eal_interrupts.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_eal/linux/eal/eal_interrupts.c > b/lib/librte_eal/linux/eal/eal_interrupts.c > index 1955324d3045..2cd537ba4492 100644 > --- a/lib/librte_eal/linux/eal/eal_interrupts.c > +++ b/lib/librte_eal/linux/eal/eal_interrupts.c > @@ -1045,7 +1045,7 @@ eal_intr_handle_interrupts(int pfd, unsigned totalfds) > static __attribute__((noreturn)) void * > eal_intr_thread_main(__rte_unused void *arg) > { > - struct epoll_event ev; > + struct epoll_event ev = { }; > > /* host thread, never break out */ > for (;;) {
typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ } __EPOLL_PACKED; static __attribute__((noreturn)) void * eal_intr_thread_main(__rte_unused void *arg) { struct epoll_event ev; [...] ev.events = EPOLLIN | EPOLLPRI | EPOLLRDHUP | EPOLLHUP; ev.data.fd = src->intr_handle.fd; [...] if (epoll_ctl(pfd, EPOLL_CTL_ADD, src->intr_handle.fd, &ev) < 0){ So the uninitialised part is because we only set an int in the union. False positive from valgrind, but the fix is quite simple. Acked-by: David Marchand <david.march...@redhat.com> -- David Marchand