X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fcompat-epoll.c;h=29bd2f868ed38e1e6253b8841f2326025cb8c644;hb=74588b4dd1cb7a84b4f64f7bf48eb71b049d1293;hp=1380ce85527a74dae304b2777de5a72c489b6b5c;hpb=6cd525e813795a1d5e38feac8dedf2c73ffb1274;p=lttng-tools.git diff --git a/src/common/compat/compat-epoll.c b/src/common/compat/compat-epoll.c index 1380ce855..29bd2f868 100644 --- a/src/common/compat/compat-epoll.c +++ b/src/common/compat/compat-epoll.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -51,6 +52,11 @@ static int resize_poll_event(struct lttng_poll_event *events, PERROR("realloc epoll add"); goto error; } + if (new_size > events->alloc_size) { + /* Zero newly allocated memory */ + memset(ptr + events->alloc_size, 0, + (new_size - events->alloc_size) * sizeof(*ptr)); + } events->events = ptr; events->alloc_size = new_size; @@ -76,7 +82,7 @@ int compat_epoll_create(struct lttng_poll_event *events, int size, int flags) size = poll_max_size; } - ret = epoll_create1(flags); + ret = compat_glibc_epoll_create(size, flags); if (ret < 0) { /* At this point, every error is fatal */ PERROR("epoll_create1"); @@ -119,6 +125,11 @@ int compat_epoll_add(struct lttng_poll_event *events, int fd, uint32_t req_event goto error; } + /* + * Zero struct epoll_event to ensure all representations of its + * union are zeroed. + */ + memset(&ev, 0, sizeof(ev)); ev.events = req_events; ev.data.fd = fd; @@ -250,7 +261,7 @@ error: void compat_epoll_set_max_size(void) { int ret, fd; - size_t size_ret; + ssize_t size_ret; char buf[64]; poll_max_size = DEFAULT_POLL_SIZE;