From 10a92ba8f18084f79329e60fd70e459797d407f4 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 21 Sep 2015 15:47:09 -0400 Subject: [PATCH] Fix: Argument with 'nonnull' attribute passed null Reported by scan-build API Argument with 'nonnull' attribute passed null libringbuffer /ring_buffer_backend.c 380 API Argument with 'nonnull' attribute passed null libringbuffer /ring_buffer_backend.c 420 Signed-off-by: Mathieu Desnoyers --- libringbuffer/ring_buffer_backend.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libringbuffer/ring_buffer_backend.c b/libringbuffer/ring_buffer_backend.c index 6d2d9507..368a71e8 100644 --- a/libringbuffer/ring_buffer_backend.c +++ b/libringbuffer/ring_buffer_backend.c @@ -373,6 +373,7 @@ size_t lib_ring_buffer_read(struct lttng_ust_lib_ring_buffer_backend *bufb, size ssize_t orig_len; struct lttng_ust_lib_ring_buffer_backend_pages_shmp *rpages; unsigned long sb_bindex, id; + void *src; orig_len = len; offset &= chanb->buf_size - 1; @@ -389,7 +390,11 @@ size_t lib_ring_buffer_read(struct lttng_ust_lib_ring_buffer_backend *bufb, size CHAN_WARN_ON(chanb, offset >= chanb->buf_size); CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); - memcpy(dest, shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)), len); + src = shmp_index(handle, shmp(handle, rpages->shmp)->p, + offset & (chanb->subbuf_size - 1)); + if (caa_unlikely(!src)) + return 0; + memcpy(dest, src, len); return orig_len; } @@ -429,6 +434,8 @@ int lib_ring_buffer_read_cstr(struct lttng_ust_lib_ring_buffer_backend *bufb, si CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); str = shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)); + if (caa_unlikely(!str)) + return -EINVAL; string_len = strnlen(str, len); if (dest && len) { memcpy(dest, str, string_len); -- 2.34.1