projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
shm: Include the returned element length in the range check
[lttng-ust.git]
/
libringbuffer
/
shm.h
diff --git
a/libringbuffer/shm.h
b/libringbuffer/shm.h
index f5cc8e69a2b7a62faf9f614dec2489f99ccee96d..9f72a5a248657f73c3176877d2e6357930dd10db 100644
(file)
--- a/
libringbuffer/shm.h
+++ b/
libringbuffer/shm.h
@@
-20,26
+20,27
@@
*/
static inline
char *_shmp_offset(struct shm_object_table *table, struct shm_ref *ref,
*/
static inline
char *_shmp_offset(struct shm_object_table *table, struct shm_ref *ref,
- size_t
offset
)
+ size_t
idx, size_t elem_size
)
{
struct shm_object *obj;
{
struct shm_object *obj;
- size_t index, ref_offset;
+ size_t
obj
index, ref_offset;
- index = (size_t) ref->index;
- if (unlikely(index >= table->allocated_len))
+
obj
index = (size_t) ref->index;
+ if (unlikely(
obj
index >= table->allocated_len))
return NULL;
return NULL;
- obj = &table->objects[index];
+ obj = &table->objects[
obj
index];
ref_offset = (size_t) ref->offset;
ref_offset = (size_t) ref->offset;
- ref_offset += offset;
- if (unlikely(ref_offset >= obj->memory_map_size))
+ ref_offset += idx * elem_size;
+ /* Check if part of the element returned would exceed the limits. */
+ if (unlikely(ref_offset + elem_size > obj->memory_map_size))
return NULL;
return &obj->memory_map[ref_offset];
}
return NULL;
return &obj->memory_map[ref_offset];
}
-#define shmp_index(handle, ref,
offset)
\
+#define shmp_index(handle, ref,
index)
\
({ \
__typeof__((ref)._type) ____ptr_ret; \
({ \
__typeof__((ref)._type) ____ptr_ret; \
- ____ptr_ret = (__typeof__(____ptr_ret)) _shmp_offset((handle)->table, &(ref)._ref,
((offset) * sizeof(*____ptr_ret)));
\
+ ____ptr_ret = (__typeof__(____ptr_ret)) _shmp_offset((handle)->table, &(ref)._ref,
index, sizeof(*____ptr_ret));
\
____ptr_ret; \
})
____ptr_ret; \
})
This page took
0.023524 seconds
and
4
git commands to generate.