Fix: Argument with 'nonnull' attribute passed null
[deliverable/lttng-ust.git] / libringbuffer / ring_buffer_backend.c
index 40fae8017aed823401ae85a328be5bb8833a8231..54fe627c9a497c5be2b279b94c5c92553a086b15 100644 (file)
@@ -374,6 +374,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;
@@ -390,7 +391,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;
 }
 
@@ -430,6 +435,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);
This page took 0.02402 seconds and 5 git commands to generate.