diff options
author | Dave Barach <dave@barachs.net> | 2018-10-17 10:38:51 -0400 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-10-23 13:06:46 +0000 |
commit | b7b929931a07fbb27b43d5cd105f366c3e29807e (patch) | |
tree | 438681c89738802dbb5d339715b96ea2c31bafb4 /src/vppinfra | |
parent | b9a4c445c1d4e9cdab476a8e1fb8a46ff0fc6080 (diff) |
c11 safe string handling support
Change-Id: Ied34720ca5a6e6e717eea4e86003e854031b6eab
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vppinfra')
65 files changed, 272 insertions, 144 deletions
diff --git a/src/vppinfra/asm_x86.c b/src/vppinfra/asm_x86.c index 16e41c249b1..e6e00ce5543 100644 --- a/src/vppinfra/asm_x86.c +++ b/src/vppinfra/asm_x86.c @@ -1500,7 +1500,7 @@ u8 * x86_insn_parse (x86_insn_parse_t * p, u8 * code_start) /* Preserve global parse flags. */ parse_flags = p->flags & (X86_INSN_PARSE_32_BIT | X86_INSN_PARSE_64_BIT); - memset (p, 0, sizeof (p[0])); + clib_memset (p, 0, sizeof (p[0])); p->flags = parse_flags; /* 64 implies 32 bit parsing. */ diff --git a/src/vppinfra/bihash_16_8.h b/src/vppinfra/bihash_16_8.h index 5949e2b3549..f6515b8aea0 100644 --- a/src/vppinfra/bihash_16_8.h +++ b/src/vppinfra/bihash_16_8.h @@ -36,7 +36,7 @@ typedef struct static inline int clib_bihash_is_free_16_8 (clib_bihash_kv_16_8_t * v) { - /* Free values are memset to 0xff, check a bit... */ + /* Free values are clib_memset to 0xff, check a bit... */ if (v->key[0] == ~0ULL && v->value == ~0ULL) return 1; return 0; diff --git a/src/vppinfra/bihash_16_8_32.h b/src/vppinfra/bihash_16_8_32.h index d30625da39a..3e83ad2c52f 100644 --- a/src/vppinfra/bihash_16_8_32.h +++ b/src/vppinfra/bihash_16_8_32.h @@ -38,7 +38,7 @@ typedef struct static inline int clib_bihash_is_free_16_8_32 (clib_bihash_kv_16_8_32_t * v) { - /* Free values are memset to 0xff, check a bit... */ + /* Free values are clib_memset to 0xff, check a bit... */ if (v->key[0] == ~0ULL && v->value == ~0ULL) return 1; return 0; diff --git a/src/vppinfra/bihash_24_8.h b/src/vppinfra/bihash_24_8.h index c028352d0e9..6d1cdd310bd 100644 --- a/src/vppinfra/bihash_24_8.h +++ b/src/vppinfra/bihash_24_8.h @@ -36,7 +36,7 @@ typedef struct static inline int clib_bihash_is_free_24_8 (const clib_bihash_kv_24_8_t * v) { - /* Free values are memset to 0xff, check a bit... */ + /* Free values are clib_memset to 0xff, check a bit... */ if (v->key[0] == ~0ULL && v->value == ~0ULL) return 1; return 0; diff --git a/src/vppinfra/bihash_40_8.h b/src/vppinfra/bihash_40_8.h index fe57ba03966..b85adb09712 100644 --- a/src/vppinfra/bihash_40_8.h +++ b/src/vppinfra/bihash_40_8.h @@ -37,7 +37,7 @@ typedef struct static inline int clib_bihash_is_free_40_8 (const clib_bihash_kv_40_8_t * v) { - /* Free values are memset to 0xff, check a bit... */ + /* Free values are clib_memset to 0xff, check a bit... */ if (v->key[0] == ~0ULL && v->value == ~0ULL) return 1; return 0; diff --git a/src/vppinfra/bihash_48_8.h b/src/vppinfra/bihash_48_8.h index 9aebe66d264..328a90b0fd4 100644 --- a/src/vppinfra/bihash_48_8.h +++ b/src/vppinfra/bihash_48_8.h @@ -37,7 +37,7 @@ typedef struct static inline int clib_bihash_is_free_48_8 (const clib_bihash_kv_48_8_t * v) { - /* Free values are memset to 0xff, check a bit... */ + /* Free values are clib_memset to 0xff, check a bit... */ if (v->key[0] == ~0ULL && v->value == ~0ULL) return 1; return 0; diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c index 752597ebbd5..e218f4b0dc6 100644 --- a/src/vppinfra/bihash_template.c +++ b/src/vppinfra/bihash_template.c @@ -203,7 +203,7 @@ void BV (clib_bihash_free) (BVT (clib_bihash) * h) (void) close (h->memfd); #endif clib_mem_vm_free ((void *) (uword) (alloc_arena (h)), alloc_arena_size (h)); - memset (h, 0, sizeof (*h)); + clib_memset (h, 0, sizeof (*h)); } static @@ -234,7 +234,7 @@ initialize: * if we replace (1<<log2_pages) with vec_len(rv). * No clue. */ - memset (rv, 0xff, sizeof (*rv) * (1 << log2_pages)); + clib_memset (rv, 0xff, sizeof (*rv) * (1 << log2_pages)); return rv; } @@ -247,7 +247,7 @@ BV (value_free) (BVT (clib_bihash) * h, BVT (clib_bihash_value) * v, ASSERT (vec_len (h->freelists) > log2_pages); if (CLIB_DEBUG > 0) - memset (v, 0xFE, sizeof (*v) * (1 << log2_pages)); + clib_memset (v, 0xFE, sizeof (*v) * (1 << log2_pages)); v->next_free_as_u64 = (u64) h->freelists[log2_pages]; h->freelists[log2_pages] = (u64) BV (clib_bihash_get_offset) (h, v); @@ -295,7 +295,7 @@ BV (make_working_copy) (BVT (clib_bihash) * h, BVT (clib_bihash_bucket) * b) v = BV (clib_bihash_get_value) (h, b->offset); - clib_memcpy (working_copy, v, sizeof (*v) * (1 << b->log2_pages)); + _clib_memcpy (working_copy, v, sizeof (*v) * (1 << b->log2_pages)); working_bucket.as_u64 = b->as_u64; working_bucket.offset = BV (clib_bihash_get_offset) (h, working_copy); CLIB_MEMORY_BARRIER (); @@ -338,8 +338,8 @@ BV (split_and_rehash) /* Empty slot */ if (BV (clib_bihash_is_free) (&(new_v->kvp[j]))) { - clib_memcpy (&(new_v->kvp[j]), &(old_values->kvp[i]), - sizeof (new_v->kvp[j])); + _clib_memcpy (&(new_v->kvp[j]), &(old_values->kvp[i]), + sizeof (new_v->kvp[j])); goto doublebreak; } } @@ -383,8 +383,8 @@ BV (split_and_rehash_linear) if (BV (clib_bihash_is_free) (&(new_values->kvp[j]))) { /* Copy the old value and move along */ - clib_memcpy (&(new_values->kvp[j]), &(old_values->kvp[i]), - sizeof (new_values->kvp[j])); + _clib_memcpy (&(new_values->kvp[j]), &(old_values->kvp[i]), + sizeof (new_values->kvp[j])); j++; goto doublebreak; } @@ -472,7 +472,7 @@ static inline int BV (clib_bihash_add_del_inline) if (!memcmp (&(v->kvp[i]), &add_v->key, sizeof (add_v->key))) { CLIB_MEMORY_BARRIER (); /* Add a delay */ - clib_memcpy (&(v->kvp[i]), add_v, sizeof (*add_v)); + _clib_memcpy (&(v->kvp[i]), add_v, sizeof (*add_v)); BV (clib_bihash_unlock_bucket) (b); return (0); } @@ -488,10 +488,10 @@ static inline int BV (clib_bihash_add_del_inline) * Copy the value first, so that if a reader manages * to match the new key, the value will be right... */ - clib_memcpy (&(v->kvp[i].value), - &add_v->value, sizeof (add_v->value)); + _clib_memcpy (&(v->kvp[i].value), + &add_v->value, sizeof (add_v->value)); CLIB_MEMORY_BARRIER (); /* Make sure the value has settled */ - clib_memcpy (&(v->kvp[i]), &add_v->key, sizeof (add_v->key)); + _clib_memcpy (&(v->kvp[i]), &add_v->key, sizeof (add_v->key)); b->refcnt++; ASSERT (b->refcnt > 0); BV (clib_bihash_unlock_bucket) (b); @@ -506,7 +506,7 @@ static inline int BV (clib_bihash_add_del_inline) if (is_stale_cb (&(v->kvp[i]), arg)) { CLIB_MEMORY_BARRIER (); - clib_memcpy (&(v->kvp[i]), add_v, sizeof (*add_v)); + _clib_memcpy (&(v->kvp[i]), add_v, sizeof (*add_v)); BV (clib_bihash_unlock_bucket) (b); return (0); } @@ -521,7 +521,7 @@ static inline int BV (clib_bihash_add_del_inline) /* Found the key? Kill it... */ if (!memcmp (&(v->kvp[i]), &add_v->key, sizeof (add_v->key))) { - memset (&(v->kvp[i]), 0xff, sizeof (*(add_v))); + clib_memset (&(v->kvp[i]), 0xff, sizeof (*(add_v))); /* Is the bucket empty? */ if (PREDICT_TRUE (b->refcnt > 1)) { @@ -602,7 +602,7 @@ static inline int BV (clib_bihash_add_del_inline) { if (BV (clib_bihash_is_free) (&(new_v->kvp[i]))) { - clib_memcpy (&(new_v->kvp[i]), add_v, sizeof (*add_v)); + _clib_memcpy (&(new_v->kvp[i]), add_v, sizeof (*add_v)); goto expand_ok; } } diff --git a/src/vppinfra/cuckoo_8_8.h b/src/vppinfra/cuckoo_8_8.h index 6fe334da32d..a3d07c870eb 100644 --- a/src/vppinfra/cuckoo_8_8.h +++ b/src/vppinfra/cuckoo_8_8.h @@ -64,7 +64,7 @@ clib_cuckoo_kv_is_free_8_8 (const clib_cuckoo_kv_8_8_t * v) always_inline void clib_cuckoo_kv_set_free_8_8 (clib_cuckoo_kv_8_8_t * v) { - memset (v, 0xff, sizeof (*v)); + clib_memset (v, 0xff, sizeof (*v)); } /** Format a clib_cuckoo_kv_8_8_t instance diff --git a/src/vppinfra/cuckoo_template.c b/src/vppinfra/cuckoo_template.c index 595bd1ca3bc..119a407962f 100644 --- a/src/vppinfra/cuckoo_template.c +++ b/src/vppinfra/cuckoo_template.c @@ -180,7 +180,7 @@ void CV (clib_cuckoo_init) (CVT (clib_cuckoo) * h, const char *name, CVT (clib_cuckoo_bucket) * bucket; /* *INDENT-OFF* */ clib_cuckoo_foreach_bucket ( - bucket, h, { memset (bucket->elts, 0xff, sizeof (bucket->elts)); }); + bucket, h, { clib_memset (bucket->elts, 0xff, sizeof (bucket->elts)); }); /* *INDENT-ON* */ h->name = name; h->garbage_callback = garbage_callback; @@ -189,7 +189,7 @@ void CV (clib_cuckoo_init) (CVT (clib_cuckoo) * h, const char *name, void CV (clib_cuckoo_free) (CVT (clib_cuckoo) * h) { - memset (h, 0, sizeof (*h)); + clib_memset (h, 0, sizeof (*h)); } static clib_cuckoo_bucket_aux_t @@ -227,7 +227,7 @@ static clib_cuckoo_path_t *CV (clib_cuckoo_path_get) (CVT (clib_cuckoo) * h) { clib_cuckoo_path_t *path; pool_get (h->paths, path); - memset (path, 0, sizeof (*path)); + clib_memset (path, 0, sizeof (*path)); #if CLIB_CUCKOO_DEBUG_PATH_DETAIL CLIB_CUCKOO_DBG ("Get path @%lu", (long unsigned) (path - h->paths)); #endif @@ -531,10 +531,10 @@ static void CV (clib_cuckoo_bucket_tidy) (CVT (clib_cuckoo_bucket) * b) static void CV (clib_cuckoo_free_locked_elt) (CVT (clib_cuckoo_kv) * elt) { /* - * FIXME - improve performance by getting rid of this memset - make all + * FIXME - improve performance by getting rid of this clib_memset - make all * functions in this file not rely on clib_cuckoo_kv_is_free but instead * take use_count into account */ - memset (elt, 0xff, sizeof (*elt)); + clib_memset (elt, 0xff, sizeof (*elt)); } static void CV (clib_cuckoo_free_elt_in_bucket) (CVT (clib_cuckoo_bucket) * b, @@ -736,7 +736,7 @@ static void CV (clib_cuckoo_rehash) (CVT (clib_cuckoo) * h) CVT (clib_cuckoo_bucket) * bucket; for (bucket = new + old_nbuckets; bucket < vec_end (new); ++bucket) { - memset (bucket->elts, 0xff, sizeof (bucket->elts)); + clib_memset (bucket->elts, 0xff, sizeof (bucket->elts)); } /* * this for loop manipulates the new (unseen) memory, so no locks diff --git a/src/vppinfra/dlist.h b/src/vppinfra/dlist.h index e445b39f336..d28500dc49f 100644 --- a/src/vppinfra/dlist.h +++ b/src/vppinfra/dlist.h @@ -36,7 +36,7 @@ static inline void clib_dlist_init (dlist_elt_t * pool, u32 index) { dlist_elt_t *head = pool_elt_at_index (pool, index); - memset (head, 0xFF, sizeof (*head)); + clib_memset (head, 0xFF, sizeof (*head)); } static inline void diff --git a/src/vppinfra/elf.c b/src/vppinfra/elf.c index 931fbcccc48..a8c5d307cdf 100644 --- a/src/vppinfra/elf.c +++ b/src/vppinfra/elf.c @@ -983,7 +983,7 @@ elf_parse (elf_main_t * em, void *data, uword data_bytes) { char *save = em->file_name; - memset (em, 0, sizeof (em[0])); + clib_memset (em, 0, sizeof (em[0])); em->file_name = save; } @@ -1435,7 +1435,7 @@ static void string_table_init (string_table_builder_t * b, u8 * old_table) static void string_table_init (string_table_builder_t * b, u8 * old_table) { - memset (b, 0, sizeof (b[0])); + clib_memset (b, 0, sizeof (b[0])); b->old_table = old_table; b->hash = hash_create_string (0, sizeof (uword)); } diff --git a/src/vppinfra/elf.h b/src/vppinfra/elf.h index c57b06f5d2a..cceb13e256b 100644 --- a/src/vppinfra/elf.h +++ b/src/vppinfra/elf.h @@ -919,7 +919,7 @@ typedef struct always_inline void elf_main_init (elf_main_t * em) { - memset (em, 0, sizeof (em[0])); + clib_memset (em, 0, sizeof (em[0])); } always_inline void diff --git a/src/vppinfra/elog.c b/src/vppinfra/elog.c index c6902eb86ea..8e3f6c18dfa 100644 --- a/src/vppinfra/elog.c +++ b/src/vppinfra/elog.c @@ -469,7 +469,7 @@ elog_alloc (elog_main_t * em, u32 n_events) void elog_init (elog_main_t * em, u32 n_events) { - memset (em, 0, sizeof (em[0])); + clib_memset (em, 0, sizeof (em[0])); em->lock = 0; @@ -636,7 +636,7 @@ elog_merge (elog_main_t * dst, u8 * dst_tag, elog_main_t * src, u8 * src_tag, elog_track_t newt; int i; - memset (&newt, 0, sizeof (newt)); + clib_memset (&newt, 0, sizeof (newt)); /* Acquire src and dst events */ elog_get_events (src); diff --git a/src/vppinfra/fheap.c b/src/vppinfra/fheap.c index 1369245615a..034168e85ab 100644 --- a/src/vppinfra/fheap.c +++ b/src/vppinfra/fheap.c @@ -167,7 +167,7 @@ fheap_add (fheap_t * f, u32 ni, u32 key) n = vec_elt_at_index (f->nodes, ni); - memset (n, 0, sizeof (n[0])); + clib_memset (n, 0, sizeof (n[0])); n->parent = n->first_child = n->next_sibling = n->prev_sibling = ~0; n->key = key; diff --git a/src/vppinfra/fheap.h b/src/vppinfra/fheap.h index 6d4965f1bea..1dbd52bad76 100644 --- a/src/vppinfra/fheap.h +++ b/src/vppinfra/fheap.h @@ -89,7 +89,7 @@ fheap_init (fheap_t * f, u32 n_nodes) fheap_node_t *save_nodes = f->nodes; u32 *save_root_list = f->root_list_by_rank; - memset (f, 0, sizeof (f[0])); + clib_memset (f, 0, sizeof (f[0])); f->nodes = save_nodes; f->root_list_by_rank = save_root_list; diff --git a/src/vppinfra/fifo.c b/src/vppinfra/fifo.c index 5b4c76d1084..e3b7b415cb3 100644 --- a/src/vppinfra/fifo.c +++ b/src/vppinfra/fifo.c @@ -121,7 +121,7 @@ _clib_fifo_resize (void *v_old, uword n_new_elts, uword elt_bytes) /* Zero empty space. */ n_zero_bytes = (n_new_elts - n_old_elts) * elt_bytes; - memset (v_new + n_copy_bytes, 0, n_zero_bytes); + clib_memset (v_new + n_copy_bytes, 0, n_zero_bytes); clib_fifo_free (v_old); diff --git a/src/vppinfra/flowhash_template.h b/src/vppinfra/flowhash_template.h index 92272563878..d7a621c1754 100644 --- a/src/vppinfra/flowhash_template.h +++ b/src/vppinfra/flowhash_template.h @@ -374,7 +374,7 @@ FVT(flowhash) *FV(flowhash_alloc)(u32 fixed_entries, u32 collision_buckets) /* Fill free elements list */ int i; - memset(h->entries, 0, sizeof(h->entries[0]) * entries); + clib_memset(h->entries, 0, sizeof(h->entries[0]) * entries); for (i = 1; i <= collision_buckets; i++) { h->free_buckets_indices[-i] = diff --git a/src/vppinfra/format.c b/src/vppinfra/format.c index e2fd84bb08b..886f03d9c5f 100644 --- a/src/vppinfra/format.c +++ b/src/vppinfra/format.c @@ -139,13 +139,13 @@ justify (u8 * s, format_info_t * fi, uword s_len_orig) if (n_left > 0) { vec_insert (s, n_left, i0); - memset (s + i0, fi->pad_char, n_left); + clib_memset (s + i0, fi->pad_char, n_left); l1 = vec_len (s); } if (n_right > 0) { vec_resize (s, n_right); - memset (s + l1, fi->pad_char, n_right); + clib_memset (s + l1, fi->pad_char, n_right); } } return s; diff --git a/src/vppinfra/format.h b/src/vppinfra/format.h index 9a3a342076b..94344474067 100644 --- a/src/vppinfra/format.h +++ b/src/vppinfra/format.h @@ -153,7 +153,7 @@ unformat_init (unformat_input_t * i, uword (*fill_buffer) (unformat_input_t *), void *fill_buffer_arg) { - memset (i, 0, sizeof (i[0])); + clib_memset (i, 0, sizeof (i[0])); i->fill_buffer = fill_buffer; i->fill_buffer_arg = fill_buffer_arg; } @@ -163,7 +163,7 @@ unformat_free (unformat_input_t * i) { vec_free (i->buffer); vec_free (i->buffer_marks); - memset (i, 0, sizeof (i[0])); + clib_memset (i, 0, sizeof (i[0])); } always_inline uword diff --git a/src/vppinfra/graph.c b/src/vppinfra/graph.c index ea11a96f1c8..3f8a3e8423e 100644 --- a/src/vppinfra/graph.c +++ b/src/vppinfra/graph.c @@ -102,7 +102,7 @@ graph_del_node (graph_t * g, u32 src) index = src_node - g->nodes; pool_put (g->nodes, src_node); - memset (src_node, ~0, sizeof (src_node[0])); + clib_memset (src_node, ~0, sizeof (src_node[0])); return index; } diff --git a/src/vppinfra/hash.c b/src/vppinfra/hash.c index abc7c4ce4a2..2ff8ebfd17b 100644 --- a/src/vppinfra/hash.c +++ b/src/vppinfra/hash.c @@ -43,13 +43,13 @@ always_inline void zero_pair (hash_t * h, hash_pair_t * p) { - memset (p, 0, hash_pair_bytes (h)); + clib_memset (p, 0, hash_pair_bytes (h)); } always_inline void init_pair (hash_t * h, hash_pair_t * p) { - memset (p->value, ~0, hash_value_bytes (h)); + clib_memset (p->value, ~0, hash_value_bytes (h)); } always_inline hash_pair_union_t * @@ -624,7 +624,7 @@ hash_next (void *v, hash_next_t * hn) { /* Restore flags. */ h->flags = hn->f; - memset (hn, 0, sizeof (hn[0])); + clib_memset (hn, 0, sizeof (hn[0])); return 0; } diff --git a/src/vppinfra/hash.h b/src/vppinfra/hash.h index 36a70066044..892b2ea916c 100644 --- a/src/vppinfra/hash.h +++ b/src/vppinfra/hash.h @@ -496,7 +496,7 @@ hash_set_value_bytes (hash_t * h, uword value_bytes) _format_pair,_format_pair_arg) \ ({ \ hash_t _h; \ - memset (&_h, 0, sizeof (_h)); \ + clib_memset (&_h, 0, sizeof (_h)); \ _h.user = (_user); \ _h.key_sum = (hash_key_sum_function_t *) (_key_sum); \ _h.key_equal = (_key_equal); \ diff --git a/src/vppinfra/heap.c b/src/vppinfra/heap.c index 2a5fb5c8d8e..f7b1f6bb31e 100644 --- a/src/vppinfra/heap.c +++ b/src/vppinfra/heap.c @@ -698,7 +698,7 @@ format_heap (u8 * s, va_list * va) heap_header_t *h = heap_header (v); heap_header_t zero; - memset (&zero, 0, sizeof (zero)); + clib_memset (&zero, 0, sizeof (zero)); if (!v) h = &zero; diff --git a/src/vppinfra/heap.h b/src/vppinfra/heap.h index f76c9453e65..b6e9f022852 100644 --- a/src/vppinfra/heap.h +++ b/src/vppinfra/heap.h @@ -260,7 +260,7 @@ heap_create_from_memory (void *memory, uword max_len, uword elt_bytes) return 0; h = memory; - memset (h, 0, sizeof (h[0])); + clib_memset (h, 0, sizeof (h[0])); h->max_len = max_len; h->elt_bytes = elt_bytes; h->flags = HEAP_IS_STATIC; diff --git a/src/vppinfra/lock.h b/src/vppinfra/lock.h index 4645378360d..337c5a3f0ad 100644 --- a/src/vppinfra/lock.h +++ b/src/vppinfra/lock.h @@ -57,7 +57,7 @@ static inline void clib_spinlock_init (clib_spinlock_t * p) { *p = clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES, CLIB_CACHE_LINE_BYTES); - memset ((void *) *p, 0, CLIB_CACHE_LINE_BYTES); + clib_memset ((void *) *p, 0, CLIB_CACHE_LINE_BYTES); } static inline void @@ -122,7 +122,7 @@ always_inline void clib_rwlock_init (clib_rwlock_t * p) { *p = clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES, CLIB_CACHE_LINE_BYTES); - memset ((void *) *p, 0, CLIB_CACHE_LINE_BYTES); + clib_memset ((void *) *p, 0, CLIB_CACHE_LINE_BYTES); } always_inline void diff --git a/src/vppinfra/maplog.c b/src/vppinfra/maplog.c index 1900aa8f03b..68913365130 100644 --- a/src/vppinfra/maplog.c +++ b/src/vppinfra/maplog.c @@ -42,7 +42,7 @@ clib_maplog_init (clib_maplog_init_args_t * a) if (mm->flags & CLIB_MAPLOG_FLAG_INIT) return (-2); - memset (mm, 0, sizeof (*mm)); + clib_memset (mm, 0, sizeof (*mm)); record_size_in_cache_lines = (a->record_size_in_bytes + CLIB_CACHE_LINE_BYTES - @@ -113,7 +113,7 @@ clib_maplog_init (clib_maplog_init_args_t * a) (void) close (fd); } - memset (h, 0, sizeof (*h)); + clib_memset (h, 0, sizeof (*h)); h->maplog_major_version = MAPLOG_MAJOR_VERSION; h->maplog_minor_version = MAPLOG_MINOR_VERSION; h->maplog_patch_version = MAPLOG_PATCH_VERSION; @@ -321,7 +321,7 @@ clib_maplog_close (clib_maplog_main_t * mm) vec_free (mm->file_basename); vec_free (mm->header_filename); - memset (mm, 0, sizeof (*mm)); + clib_memset (mm, 0, sizeof (*mm)); } /** diff --git a/src/vppinfra/mem.h b/src/vppinfra/mem.h index 9cc62ed7592..04c26d218aa 100644 --- a/src/vppinfra/mem.h +++ b/src/vppinfra/mem.h @@ -52,7 +52,7 @@ #endif #include <vppinfra/os.h> -#include <vppinfra/string.h> /* memcpy, memset */ +#include <vppinfra/string.h> /* memcpy, clib_memset */ #include <vppinfra/valgrind.h> #define CLIB_MAX_MHEAPS 256 diff --git a/src/vppinfra/mem_dlmalloc.c b/src/vppinfra/mem_dlmalloc.c index 8afb0507092..6268709bb36 100644 --- a/src/vppinfra/mem_dlmalloc.c +++ b/src/vppinfra/mem_dlmalloc.c @@ -73,7 +73,7 @@ mheap_get_trace (uword offset, uword size) return; /* Spurious Coverity warnings be gone. */ - memset (&trace, 0, sizeof (trace)); + clib_memset (&trace, 0, sizeof (trace)); /* Skip our frame and mspace_get_aligned's frame */ n_callers = clib_backtrace (trace.callers, ARRAY_LEN (trace.callers), 2); @@ -185,7 +185,7 @@ mheap_put_trace (uword offset, uword size) { hash_unset_mem (tm->trace_by_callers, t->callers); vec_add1 (tm->trace_free_list, trace_index); - memset (t, 0, sizeof (t[0])); + clib_memset (t, 0, sizeof (t[0])); } tm->enabled = save_enabled; clib_spinlock_unlock (&tm->lock); diff --git a/src/vppinfra/memcpy_avx2.h b/src/vppinfra/memcpy_avx2.h index 6519d86924e..64dff4e5ddb 100644 --- a/src/vppinfra/memcpy_avx2.h +++ b/src/vppinfra/memcpy_avx2.h @@ -109,7 +109,7 @@ clib_mov128blocks (u8 * dst, const u8 * src, size_t n) } static inline void * -clib_memcpy (void *dst, const void *src, size_t n) +_clib_memcpy (void *dst, const void *src, size_t n) { uword dstu = (uword) dst; uword srcu = (uword) src; diff --git a/src/vppinfra/memcpy_avx512.h b/src/vppinfra/memcpy_avx512.h index 67982500b6c..e5245268770 100644 --- a/src/vppinfra/memcpy_avx512.h +++ b/src/vppinfra/memcpy_avx512.h @@ -139,7 +139,7 @@ clib_mov512blocks (u8 * dst, const u8 * src, size_t n) } static inline void * -clib_memcpy (void *dst, const void *src, size_t n) +_clib_memcpy (void *dst, const void *src, size_t n) { uword dstu = (uword) dst; uword srcu = (uword) src; diff --git a/src/vppinfra/memcpy_sse3.h b/src/vppinfra/memcpy_sse3.h index 5e4bf7d79c5..2dd9399d428 100644 --- a/src/vppinfra/memcpy_sse3.h +++ b/src/vppinfra/memcpy_sse3.h @@ -183,7 +183,7 @@ clib_mov256 (u8 * dst, const u8 * src) }) static inline void * -clib_memcpy (void *dst, const void *src, size_t n) +_clib_memcpy (void *dst, const void *src, size_t n) { __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; uword dstu = (uword) dst; diff --git a/src/vppinfra/mhash.c b/src/vppinfra/mhash.c index b694cc7c50f..e09d7193f68 100644 --- a/src/vppinfra/mhash.c +++ b/src/vppinfra/mhash.c @@ -202,7 +202,7 @@ mhash_init (mhash_t * h, uword n_value_bytes, uword n_key_bytes) vec_free (h->key_tmps); hash_free (h->hash); - memset (h, 0, sizeof (h[0])); + clib_memset (h, 0, sizeof (h[0])); h->n_key_bytes = n_key_bytes; #if 0 diff --git a/src/vppinfra/mheap.c b/src/vppinfra/mheap.c index 0a62943e2f2..ba5bbc9b6e7 100644 --- a/src/vppinfra/mheap.c +++ b/src/vppinfra/mheap.c @@ -935,7 +935,7 @@ mheap_alloc_with_flags (void *memory, uword memory_size, uword flags) clib_mem_vm_map (h, sizeof (h[0])); /* Zero vector header: both heap header and vector length. */ - memset (h, 0, sizeof (h[0])); + clib_memset (h, 0, sizeof (h[0])); _vec_len (v) = 0; h->vm_alloc_offset_from_header = (void *) h - memory; @@ -953,8 +953,8 @@ mheap_alloc_with_flags (void *memory, uword memory_size, uword flags) (clib_address_t) v, h->max_size); /* Initialize free list heads to empty. */ - memset (h->first_free_elt_uoffset_by_bin, 0xFF, - sizeof (h->first_free_elt_uoffset_by_bin)); + clib_memset (h->first_free_elt_uoffset_by_bin, 0xFF, + sizeof (h->first_free_elt_uoffset_by_bin)); return v; } @@ -1236,7 +1236,7 @@ format_mheap (u8 * s, va_list * va) mheap_elt_t *e; uword i, n_hist; - memset (hist, 0, sizeof (hist)); + clib_memset (hist, 0, sizeof (hist)); n_hist = 0; for (e = v; @@ -1536,7 +1536,7 @@ mheap_get_trace (void *v, uword offset, uword size) mheap_trace_t trace; /* Spurious Coverity warnings be gone. */ - memset (&trace, 0, sizeof (trace)); + clib_memset (&trace, 0, sizeof (trace)); n_callers = clib_backtrace (trace.callers, ARRAY_LEN (trace.callers), /* Skip mheap_get_aligned's frame */ 1); @@ -1630,7 +1630,7 @@ mheap_put_trace (void *v, uword offset, uword size) { hash_unset_mem (tm->trace_by_callers, t->callers); vec_add1 (tm->trace_free_list, trace_index); - memset (t, 0, sizeof (t[0])); + clib_memset (t, 0, sizeof (t[0])); } } diff --git a/src/vppinfra/phash.c b/src/vppinfra/phash.c index f6eecaa4103..52c29b33f78 100644 --- a/src/vppinfra/phash.c +++ b/src/vppinfra/phash.c @@ -605,7 +605,7 @@ perfect (phash_main_t * pm) /* clear any state from previous attempts */ if (vec_bytes (pm->tabh)) - memset (pm->tabh, ~0, vec_bytes (pm->tabh)); + clib_memset (pm->tabh, ~0, vec_bytes (pm->tabh)); vec_validate (pm->tabb_sort, vec_len (pm->tabb) - 1); for (i = 0; i < vec_len (pm->tabb_sort); i++) diff --git a/src/vppinfra/phash.h b/src/vppinfra/phash.h index 746a0fddfab..3dc59c724f7 100644 --- a/src/vppinfra/phash.h +++ b/src/vppinfra/phash.h @@ -168,7 +168,7 @@ phash_main_free (phash_main_t * pm) phash_main_free_working_memory (pm); vec_free (pm->tab); vec_free (pm->keys); - memset (pm, 0, sizeof (pm[0])); + clib_memset (pm, 0, sizeof (pm[0])); } /* Slow hash computation for general keys. */ diff --git a/src/vppinfra/pool.c b/src/vppinfra/pool.c index ed83b41afef..ed04eb68e31 100644 --- a/src/vppinfra/pool.c +++ b/src/vppinfra/pool.c @@ -107,7 +107,8 @@ _pool_init_fixed (void **pool_ptr, u32 elt_size, u32 max_elts) /* Set the entire free bitmap */ clib_bitmap_alloc (fh->free_bitmap, max_elts); - memset (fh->free_bitmap, 0xff, vec_len (fh->free_bitmap) * sizeof (uword)); + clib_memset (fh->free_bitmap, 0xff, + vec_len (fh->free_bitmap) * sizeof (uword)); /* Clear any extraneous set bits */ set_bits = vec_len (fh->free_bitmap) * BITS (uword); diff --git a/src/vppinfra/qhash.c b/src/vppinfra/qhash.c index f4e38c4a1d7..3b5a175065d 100644 --- a/src/vppinfra/qhash.c +++ b/src/vppinfra/qhash.c @@ -61,7 +61,7 @@ _qhash_resize (void *v, uword length, uword elt_bytes) CLIB_CACHE_LINE_BYTES); vec_resize (h->hash_key_valid_bitmap, 1 << (l - QHASH_LOG2_KEYS_PER_BUCKET)); - memset (v, ~0, elt_bytes << l); + clib_memset (v, ~0, elt_bytes << l); return v; } @@ -123,7 +123,8 @@ qhash_get_multiple (void *v, if (!v) { - memset (result_indices, ~0, sizeof (result_indices[0]) * n_search_keys); + clib_memset (result_indices, ~0, + sizeof (result_indices[0]) * n_search_keys); return; } @@ -417,7 +418,7 @@ qhash_set_overflow (void *v, uword elt_bytes, uword dl = round_pow2 (1 + i - l, 8); v = _vec_resize (v, dl, (l + dl) * elt_bytes, sizeof (h[0]), /* align */ sizeof (uword)); - memset (v + l * elt_bytes, ~0, dl * elt_bytes); + clib_memset (v + l * elt_bytes, ~0, dl * elt_bytes); } } diff --git a/src/vppinfra/random_buffer.c b/src/vppinfra/random_buffer.c index df03698066c..52de5d34dd0 100644 --- a/src/vppinfra/random_buffer.c +++ b/src/vppinfra/random_buffer.c @@ -63,7 +63,7 @@ clib_random_buffer_init (clib_random_buffer_t * b, uword seed) { uword i, j; - memset (b, 0, sizeof (b[0])); + clib_memset (b, 0, sizeof (b[0])); /* Seed ISAAC. */ for (i = 0; i < ARRAY_LEN (b->ctx); i++) diff --git a/src/vppinfra/serialize.c b/src/vppinfra/serialize.c index a098aa2d98a..ef9cf03f362 100644 --- a/src/vppinfra/serialize.c +++ b/src/vppinfra/serialize.c @@ -572,7 +572,7 @@ unserialize_heap (serialize_main_t * m, va_list * va) return; } - memset (&h, 0, sizeof (h)); + clib_memset (&h, 0, sizeof (h)); #define _(f) unserialize_integer (m, &h.f, sizeof (h.f)); foreach_serialize_heap_header_integer; #undef _ @@ -882,7 +882,7 @@ unserialize_close (serialize_main_t * m) void serialize_open_data (serialize_main_t * m, u8 * data, uword n_data_bytes) { - memset (m, 0, sizeof (m[0])); + clib_memset (m, 0, sizeof (m[0])); m->stream.buffer = data; m->stream.n_buffer_bytes = n_data_bytes; } @@ -908,7 +908,7 @@ serialize_vector_write (serialize_main_header_t * m, serialize_stream_t * s) void serialize_open_vector (serialize_main_t * m, u8 * vector) { - memset (m, 0, sizeof (m[0])); + clib_memset (m, 0, sizeof (m[0])); m->header.data_function = serialize_vector_write; m->stream.buffer = vector; m->stream.current_buffer_index = 0; @@ -926,7 +926,7 @@ serialize_close_vector (serialize_main_t * m) if (s->buffer) _vec_len (s->buffer) = s->current_buffer_index; result = s->buffer; - memset (m, 0, sizeof (m[0])); + clib_memset (m, 0, sizeof (m[0])); return result; } @@ -1192,7 +1192,7 @@ static void serialize_open_clib_file_descriptor_helper (serialize_main_t * m, int fd, uword is_read) { - memset (m, 0, sizeof (m[0])); + clib_memset (m, 0, sizeof (m[0])); vec_resize (m->stream.buffer, 4096); if (!is_read) diff --git a/src/vppinfra/slist.c b/src/vppinfra/slist.c index 892517bbb79..5598871c884 100644 --- a/src/vppinfra/slist.c +++ b/src/vppinfra/slist.c @@ -54,7 +54,7 @@ clib_slist_init (clib_slist_t * sp, f64 branching_factor, format_function_t format_user_element) { clib_slist_elt_t *head; - memset (sp, 0, sizeof (sp[0])); + clib_memset (sp, 0, sizeof (sp[0])); sp->branching_factor = branching_factor; sp->format_user_element = format_user_element; sp->compare = compare; @@ -88,7 +88,7 @@ slist_search_internal (clib_slist_t * sp, void *key, int need_full_path) * Initial negotiating position, only the head_elt is * lighter than the supplied key */ - memset (sp->path, 0, vec_len (head_elt->n.nexts) * sizeof (u32)); + clib_memset (sp->path, 0, vec_len (head_elt->n.nexts) * sizeof (u32)); /* Walk the fastest lane first */ level = vec_len (head_elt->n.nexts) - 1; diff --git a/src/vppinfra/socket.c b/src/vppinfra/socket.c index 29b2a945cb9..990d0f7390b 100644 --- a/src/vppinfra/socket.c +++ b/src/vppinfra/socket.c @@ -73,7 +73,7 @@ find_free_port (word sock) { struct sockaddr_in a; - memset (&a, 0, sizeof (a)); /* Warnings be gone */ + clib_memset (&a, 0, sizeof (a)); /* Warnings be gone */ a.sin_family = PF_INET; a.sin_addr.s_addr = INADDR_ANY; @@ -289,7 +289,7 @@ default_socket_sendmsg (clib_socket_t * s, void *msg, int msglen, if (num_fds > 0) { struct cmsghdr *cmsg; - memset (&ctl, 0, sizeof (ctl)); + clib_memset (&ctl, 0, sizeof (ctl)); mh.msg_control = ctl; mh.msg_controllen = sizeof (ctl); cmsg = CMSG_FIRSTHDR (&mh); @@ -328,7 +328,7 @@ default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen, mh.msg_control = ctl; mh.msg_controllen = sizeof (ctl); - memset (ctl, 0, sizeof (ctl)); + clib_memset (ctl, 0, sizeof (ctl)); /* receive the incoming message */ size = recvmsg (s->fd, &mh, 0); @@ -525,7 +525,7 @@ clib_socket_accept (clib_socket_t * server, clib_socket_t * client) clib_error_t *err = 0; socklen_t len = 0; - memset (client, 0, sizeof (client[0])); + clib_memset (client, 0, sizeof (client[0])); /* Accept the new socket connection. */ client->fd = accept (server->fd, 0, 0); diff --git a/src/vppinfra/socket.h b/src/vppinfra/socket.h index 4f9e9509342..b5f005839e4 100644 --- a/src/vppinfra/socket.h +++ b/src/vppinfra/socket.h @@ -168,7 +168,7 @@ clib_socket_free (clib_socket_t * s) vec_free (s->rx_buffer); if (clib_mem_is_heap_object (s->config)) vec_free (s->config); - memset (s, 0, sizeof (s[0])); + clib_memset (s, 0, sizeof (s[0])); } always_inline clib_error_t * diff --git a/src/vppinfra/string.c b/src/vppinfra/string.c index ba21e7b3490..b90f432c0cc 100644 --- a/src/vppinfra/string.c +++ b/src/vppinfra/string.c @@ -85,6 +85,25 @@ clib_memswap (void *_a, void *_b, uword bytes) } } +void +clib_c11_violation (const char *s) +{ + _clib_error (CLIB_ERROR_WARNING, (char *) __FUNCTION__, 0, (char *) s); +} + +errno_t +memcpy_s (void *__restrict__ dest, rsize_t dmax, + const void *__restrict__ src, rsize_t n) +{ + return memcpy_s_inline (dest, dmax, src, n); +} + +errno_t +memset_s (void *s, rsize_t smax, int c, rsize_t n) +{ + return memset_s_inline (s, smax, c, n); +} + /* * fd.io coding-style-patch-verification: ON * diff --git a/src/vppinfra/string.h b/src/vppinfra/string.h index 2c794baf71f..5c1d8267742 100644 --- a/src/vppinfra/string.h +++ b/src/vppinfra/string.h @@ -35,6 +35,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/** \file + + Optimized string handling code, including c11-compliant + "safe C library" variants. +*/ + #ifndef included_clib_string_h #define included_clib_string_h @@ -72,12 +78,114 @@ void clib_memswap (void *_a, void *_b, uword bytes); #elif __SSSE3__ #include <vppinfra/memcpy_sse3.h> #else -#define clib_memcpy(a,b,c) memcpy(a,b,c) +#define _clib_memcpy(a,b,c) memcpy(a,b,c) #endif #else /* __COVERITY__ */ -#define clib_memcpy(a,b,c) memcpy(a,b,c) +#define _clib_memcpy(a,b,c) memcpy(a,b,c) #endif +/* c-11 string manipulation variants */ + +#ifndef EOK +#define EOK 0 +#endif +#ifndef EINVAL +#define EINVAL 22 +#endif + +typedef int errno_t; +typedef uword rsize_t; + +void clib_c11_violation (const char *s); +errno_t memcpy_s (void *__restrict__ dest, rsize_t dmax, + const void *__restrict__ src, rsize_t n); + +always_inline errno_t +memcpy_s_inline (void *__restrict__ dest, rsize_t dmax, + const void *__restrict__ src, rsize_t n) +{ + uword low, hi; + u8 bad; + + /* + * call bogus if: src or dst NULL, trying to copy + * more data than we have space in dst, or src == dst. + * n == 0 isn't really "bad", so check first in the + * "wall-of-shame" department... + */ + bad = (dest == 0) + (src == 0) + (n > dmax) + (dest == src) + (n == 0); + if (PREDICT_FALSE (bad != 0)) + { + /* Not actually trying to copy anything is OK */ + if (n == 0) + return EOK; + if (dest == NULL) + clib_c11_violation ("dest NULL"); + if (src == NULL) + clib_c11_violation ("src NULL"); + if (n > dmax) + clib_c11_violation ("n > dmax"); + if (dest == src) + clib_c11_violation ("dest == src"); + return EINVAL; + } + + /* Check for src/dst overlap, which is not allowed */ + low = (uword) (src < dest ? src : dest); + hi = (uword) (src < dest ? dest : src); + + if (PREDICT_FALSE (low + (n - 1) >= hi)) + { + clib_c11_violation ("src/dest overlap"); + return EINVAL; + } + + _clib_memcpy (dest, src, n); + return EOK; +} + +/* + * Note: $$$ This macro is a crutch. Folks need to manually + * inspect every extant clib_memcpy(...) call and + * attempt to provide a real destination buffer size + * argument... + */ +#define clib_memcpy(d,s,n) memcpy_s_inline(d,n,s,n) + +errno_t memset_s (void *s, rsize_t smax, int c, rsize_t n); + +always_inline errno_t +memset_s_inline (void *s, rsize_t smax, int c, rsize_t n) +{ + u8 bad; + + bad = (s == 0) + (n > smax); + + if (PREDICT_FALSE (bad != 0)) + { + if (s == 0) + clib_c11_violation ("s NULL"); + if (n > smax) + clib_c11_violation ("n > smax"); + return (EINVAL); + } + memset (s, c, n); + return (EOK); +} + +/* + * This macro is not [so much of] a crutch. + * It's super-typical to write: + * + * ep = pool_get (<pool>); + * clib_memset(ep, 0, sizeof (*ep)); + * + * The compiler should delete the not-so useful + * (n > smax) test. TBH the NULL pointer check isn't + * so useful in this case, but so be it. + */ +#define clib_memset(s,c,n) memset_s_inline(s,n,c,n) + /* * Copy 64 bytes of data to 4 destinations * this function is typically used in quad-loop case when whole cacheline @@ -575,7 +683,6 @@ clib_count_equal_u8 (u8 * data, uword max_count) return count; } - #endif /* included_clib_string_h */ /* diff --git a/src/vppinfra/test_cuckoo_bihash.c b/src/vppinfra/test_cuckoo_bihash.c index eb17eed2ba1..3e63f0bee01 100644 --- a/src/vppinfra/test_cuckoo_bihash.c +++ b/src/vppinfra/test_cuckoo_bihash.c @@ -413,7 +413,7 @@ main (int argc, char *argv[]) unformat_input_t i; clib_error_t *error; test_main_t *tm = &test_main; - memset (&test_main, 0, sizeof (test_main)); + clib_memset (&test_main, 0, sizeof (test_main)); clib_mem_init (0, 3ULL << 30); diff --git a/src/vppinfra/test_elf.c b/src/vppinfra/test_elf.c index 84fe0776c33..3bed95484f7 100644 --- a/src/vppinfra/test_elf.c +++ b/src/vppinfra/test_elf.c @@ -72,7 +72,7 @@ elf_set_interpreter (elf_main_t * em, char *interp) return error; /* Put in new null terminated string. */ - memset (s->contents, 0, vec_len (s->contents)); + clib_memset (s->contents, 0, vec_len (s->contents)); clib_memcpy (s->contents, interp, strlen (interp)); return 0; @@ -146,7 +146,7 @@ main (int argc, char *argv[]) unformat_input_t i; clib_error_t *error = 0; - memset (tm, 0, sizeof (tm[0])); + clib_memset (tm, 0, sizeof (tm[0])); unformat_init_command_line (&i, argv); while (unformat_check_input (&i) != UNFORMAT_END_OF_INPUT) diff --git a/src/vppinfra/test_heap.c b/src/vppinfra/test_heap.c index 54a1f09710d..0fd6bf74245 100644 --- a/src/vppinfra/test_heap.c +++ b/src/vppinfra/test_heap.c @@ -95,7 +95,7 @@ main (int argc, char *argv[]) vec_resize (objects, 1000); if (vec_bytes (objects) > 0) /* stupid warning be gone */ - memset (objects, ~0, vec_bytes (objects)); + clib_memset (objects, ~0, vec_bytes (objects)); vec_resize (handles, vec_len (objects)); objects_used = 0; diff --git a/src/vppinfra/test_maplog.c b/src/vppinfra/test_maplog.c index f3ff6623a3e..b51f7f51b25 100644 --- a/src/vppinfra/test_maplog.c +++ b/src/vppinfra/test_maplog.c @@ -79,7 +79,7 @@ test_maplog_main (unformat_input_t * input) clib_warning ("unknown input '%U'", format_unformat_error, input); } - memset (a, 0, sizeof (*a)); + clib_memset (a, 0, sizeof (*a)); a->mm = mm; a->file_basename = "/tmp/maplog_test"; a->file_size_in_bytes = 4096; @@ -107,7 +107,7 @@ test_maplog_main (unformat_input_t * input) } if (noclose) - memset (mm, 0, sizeof (*mm)); + clib_memset (mm, 0, sizeof (*mm)); else clib_maplog_close (mm); diff --git a/src/vppinfra/test_mheap.c b/src/vppinfra/test_mheap.c index f6923a96926..de94065edaf 100644 --- a/src/vppinfra/test_mheap.c +++ b/src/vppinfra/test_mheap.c @@ -154,7 +154,7 @@ test_mheap_main (unformat_input_t * input) vec_resize (objects, n_objects); if (vec_bytes (objects) > 0) /* stupid warning be gone */ - memset (objects, ~0, vec_bytes (objects)); + clib_memset (objects, ~0, vec_bytes (objects)); objects_used = 0; /* Allocate initial heap. */ diff --git a/src/vppinfra/test_qhash.c b/src/vppinfra/test_qhash.c index 68e8cbc2bde..a520fa4bd77 100644 --- a/src/vppinfra/test_qhash.c +++ b/src/vppinfra/test_qhash.c @@ -54,7 +54,7 @@ test_qhash_main (unformat_input_t * input) test_qhash_main_t _tm, *tm = &_tm; uword i, iter; - memset (tm, 0, sizeof (tm[0])); + clib_memset (tm, 0, sizeof (tm[0])); tm->n_iter = 10; tm->seed = 1; tm->n_keys = 10; diff --git a/src/vppinfra/test_serialize.c b/src/vppinfra/test_serialize.c index 09f38082313..5c931b76023 100644 --- a/src/vppinfra/test_serialize.c +++ b/src/vppinfra/test_serialize.c @@ -145,7 +145,7 @@ test_serialize_main (unformat_input_t * input) serialize_main_t *um = &tm->unserialize_main; uword i; - memset (tm, 0, sizeof (tm[0])); + clib_memset (tm, 0, sizeof (tm[0])); tm->n_iter = 100; tm->seed = 1; tm->max_len = 128; diff --git a/src/vppinfra/test_time_range.c b/src/vppinfra/test_time_range.c index 2ec6e13a9d5..a22ef3a2c08 100644 --- a/src/vppinfra/test_time_range.c +++ b/src/vppinfra/test_time_range.c @@ -55,7 +55,7 @@ test_time_range_main (unformat_input_t * input) fformat (stdout, "Test daylight time rules:\n"); - memset (cp, 0, sizeof (*cp)); + clib_memset (cp, 0, sizeof (*cp)); /* Just before DST starts */ cp->year = 2011; diff --git a/src/vppinfra/test_timing_wheel.c b/src/vppinfra/test_timing_wheel.c index 7cf6e0c33f4..48020d520a0 100644 --- a/src/vppinfra/test_timing_wheel.c +++ b/src/vppinfra/test_timing_wheel.c @@ -97,7 +97,7 @@ test_timing_wheel_main (unformat_input_t * input) timing_wheel_t *w = &tm->timing_wheel; uword iter, i; - memset (tm, 0, sizeof (tm[0])); + clib_memset (tm, 0, sizeof (tm[0])); tm->n_iter = 10; tm->time_per_status_update = 0; tm->n_events = 100; diff --git a/src/vppinfra/test_tw_timer.c b/src/vppinfra/test_tw_timer.c index bde958f3ca2..90fbc9e18b7 100644 --- a/src/vppinfra/test_tw_timer.c +++ b/src/vppinfra/test_tw_timer.c @@ -246,7 +246,7 @@ test2_single (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -293,7 +293,7 @@ test2_single (tw_timer_test_main_t * tm) for (j = 0; j < tm->ntimers / 4; j++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -384,7 +384,7 @@ test2_double (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -430,7 +430,7 @@ test2_double (tw_timer_test_main_t * tm) for (j = 0; j < tm->ntimers / 4; j++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -528,7 +528,7 @@ test2_double_updates (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); expiration_time = get_expiration_time (tm); max_expiration_time = clib_max (expiration_time, max_expiration_time); @@ -635,7 +635,7 @@ test2_triple (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -681,7 +681,7 @@ test2_triple (tw_timer_test_main_t * tm) for (j = 0; j < tm->ntimers / 4; j++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -775,7 +775,7 @@ test2_triple_ov (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -822,7 +822,7 @@ test2_triple_ov (tw_timer_test_main_t * tm) for (j = 0; j < tm->ntimers / 4; j++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); do { @@ -916,7 +916,7 @@ test1_single (tw_timer_test_main_t * tm) expected_to_expire = timer_arg + offset; pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); e->expected_to_expire = expected_to_expire; e->stop_timer_handle = tw_timer_start_2t_1w_2048sl (&tm->single_wheel, e - tm->test_elts, 1 /* timer id */ , @@ -973,7 +973,7 @@ test1_double (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); e->expected_to_expire = i + offset + 1; e->stop_timer_handle = tw_timer_start_16t_2w_512sl @@ -1039,7 +1039,7 @@ test3_triple_double (tw_timer_test_main_t * tm) /* Prime the pump */ pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); /* 1 glacier ring tick from now */ expiration_time = TW_SLOTS_PER_RING * TW_SLOTS_PER_RING; @@ -1117,7 +1117,7 @@ test4_double_double (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); expiration_time = 512; @@ -1203,7 +1203,7 @@ test5_double (tw_timer_test_main_t * tm) for (i = 0; i < tm->ntimers; i++) { pool_get (tm->test_elts, e); - memset (e, 0, sizeof (*e)); + clib_memset (e, 0, sizeof (*e)); expiration_time = i + 1; @@ -1260,7 +1260,7 @@ timer_test_command_fn (tw_timer_test_main_t * tm, unformat_input_t * input) int is_test5 = 0; int overflow = 0; - memset (tm, 0, sizeof (*tm)); + clib_memset (tm, 0, sizeof (*tm)); /* Default values */ tm->ntimers = 100000; tm->seed = 0xDEADDABEB00BFACE; diff --git a/src/vppinfra/test_vhash.c b/src/vppinfra/test_vhash.c index f5aa5e21aec..594d46c38df 100644 --- a/src/vppinfra/test_vhash.c +++ b/src/vppinfra/test_vhash.c @@ -471,7 +471,7 @@ test_vhash_main (unformat_input_t * input) vhash_t *vh = &tm->vhash; uword i, j; - memset (tm, 0, sizeof (tm[0])); + clib_memset (tm, 0, sizeof (tm[0])); tm->n_iter = 100; tm->seed = 1; tm->n_keys = 1; diff --git a/src/vppinfra/time.c b/src/vppinfra/time.c index d647e670dad..afb1a867ec7 100644 --- a/src/vppinfra/time.c +++ b/src/vppinfra/time.c @@ -177,7 +177,7 @@ os_cpu_clock_frequency (void) void clib_time_init (clib_time_t * c) { - memset (c, 0, sizeof (c[0])); + clib_memset (c, 0, sizeof (c[0])); c->clocks_per_second = os_cpu_clock_frequency (); c->seconds_per_clock = 1 / c->clocks_per_second; c->log2_clocks_per_second = min_log2_u64 ((u64) c->clocks_per_second); diff --git a/src/vppinfra/time_range.c b/src/vppinfra/time_range.c index e502ca358db..ea95284ea03 100644 --- a/src/vppinfra/time_range.c +++ b/src/vppinfra/time_range.c @@ -19,7 +19,7 @@ void clib_timebase_init (clib_timebase_t * tb, i32 timezone_offset_in_hours, clib_timebase_daylight_time_t daylight_type) { - memset (tb, 0, sizeof (*tb)); + clib_memset (tb, 0, sizeof (*tb)); clib_time_init (&tb->clib_time); tb->time_zero = unix_time_now (); diff --git a/src/vppinfra/timer.c b/src/vppinfra/timer.c index 8bbab653ec0..e1e32eb285f 100644 --- a/src/vppinfra/timer.c +++ b/src/vppinfra/timer.c @@ -132,7 +132,7 @@ timer_interrupt (int signum) { /* Set timer for to go off in future. */ struct itimerval itv; - memset (&itv, 0, sizeof (itv)); + clib_memset (&itv, 0, sizeof (itv)); f64_to_tv (dt, &itv.it_value); if (setitimer (ITIMER_REAL, &itv, 0) < 0) clib_unix_error ("sititmer"); @@ -146,7 +146,7 @@ timer_block (sigset_t * save) { sigset_t block_timer; - memset (&block_timer, 0, sizeof (block_timer)); + clib_memset (&block_timer, 0, sizeof (block_timer)); sigaddset (&block_timer, TIMER_SIGNAL); sigprocmask (SIG_BLOCK, &block_timer, save); } @@ -175,7 +175,7 @@ timer_call (timer_func_t * func, any arg, f64 dt) /* Initialize time_resolution before first call to timer_interrupt */ time_resolution = 0.75 / (f64) HZ; - memset (&sa, 0, sizeof (sa)); + clib_memset (&sa, 0, sizeof (sa)); sa.sa_handler = timer_interrupt; if (sigaction (TIMER_SIGNAL, &sa, 0) < 0) diff --git a/src/vppinfra/timing_wheel.c b/src/vppinfra/timing_wheel.c index 09a46d52252..bbf3012ffd8 100644 --- a/src/vppinfra/timing_wheel.c +++ b/src/vppinfra/timing_wheel.c @@ -184,7 +184,7 @@ free_elt_vector (timing_wheel_t * w, timing_wheel_elt_t * ev) { /* Poison free elements so we never use them by mistake. */ if (CLIB_DEBUG > 0) - memset (ev, ~0, vec_len (ev) * sizeof (ev[0])); + clib_memset (ev, ~0, vec_len (ev) * sizeof (ev[0])); _vec_len (ev) = 0; vec_add1 (w->free_elt_vectors, ev); } diff --git a/src/vppinfra/tw_timer_template.c b/src/vppinfra/tw_timer_template.c index 9c9bb977d5e..11a38890f9c 100644 --- a/src/vppinfra/tw_timer_template.c +++ b/src/vppinfra/tw_timer_template.c @@ -301,7 +301,7 @@ TW (tw_timer_start) (TWT (tw_timer_wheel) * tw, u32 user_id, u32 timer_id, ASSERT (interval); pool_get (tw->timers, t); - memset (t, 0xff, sizeof (*t)); + clib_memset (t, 0xff, sizeof (*t)); t->user_handle = TW (make_internal_timer_handle) (user_id, timer_id); @@ -411,7 +411,7 @@ TW (tw_timer_wheel_init) (TWT (tw_timer_wheel) * tw, int ring, slot; tw_timer_wheel_slot_t *ts; TWT (tw_timer) * t; - memset (tw, 0, sizeof (*tw)); + clib_memset (tw, 0, sizeof (*tw)); tw->expired_timer_callback = expired_timer_callback; tw->max_expirations = max_expirations; if (timer_interval_in_seconds == 0.0) @@ -432,7 +432,7 @@ TW (tw_timer_wheel_init) (TWT (tw_timer_wheel) * tw, { ts = &tw->w[ring][slot]; pool_get (tw->timers, t); - memset (t, 0xff, sizeof (*t)); + clib_memset (t, 0xff, sizeof (*t)); t->next = t->prev = t - tw->timers; ts->head_index = t - tw->timers; } @@ -441,7 +441,7 @@ TW (tw_timer_wheel_init) (TWT (tw_timer_wheel) * tw, #if TW_OVERFLOW_VECTOR > 0 ts = &tw->overflow; pool_get (tw->timers, t); - memset (t, 0xff, sizeof (*t)); + clib_memset (t, 0xff, sizeof (*t)); t->next = t->prev = t - tw->timers; ts->head_index = t - tw->timers; #endif @@ -490,7 +490,7 @@ void TW (tw_timer_wheel_free) (TWT (tw_timer_wheel) * tw) pool_put (tw->timers, head); #endif - memset (tw, 0, sizeof (*tw)); + clib_memset (tw, 0, sizeof (*tw)); } /** diff --git a/src/vppinfra/unformat.c b/src/vppinfra/unformat.c index 365cdb15700..da7622a90a8 100644 --- a/src/vppinfra/unformat.c +++ b/src/vppinfra/unformat.c @@ -335,7 +335,7 @@ unformat_token (unformat_input_t * input, va_list * va) if (!token_chars) token_chars = (u8 *) "a-zA-Z0-9_"; - memset (map, 0, sizeof (map)); + clib_memset (map, 0, sizeof (map)); for (s = token_chars; *s;) { /* Parse range. */ @@ -576,9 +576,9 @@ unformat_float (unformat_input_t * input, va_list * va) uword signs[2], sign_index = 0; uword n_input = 0; - memset (values, 0, sizeof (values)); - memset (n_digits, 0, sizeof (n_digits)); - memset (signs, 0, sizeof (signs)); + clib_memset (values, 0, sizeof (values)); + clib_memset (n_digits, 0, sizeof (n_digits)); + clib_memset (signs, 0, sizeof (signs)); while ((c = unformat_get_input (input)) != UNFORMAT_END_OF_INPUT) { diff --git a/src/vppinfra/valloc.c b/src/vppinfra/valloc.c index cd1d89bb9a1..927802bfeb1 100644 --- a/src/vppinfra/valloc.c +++ b/src/vppinfra/valloc.c @@ -68,7 +68,7 @@ clib_valloc_add_chunk (clib_valloc_main_t * vam, if (index == ~0 || template->baseva < ch->baseva) { pool_get (vam->chunks, new_ch); - memset (new_ch, 0, sizeof (*new_ch)); + clib_memset (new_ch, 0, sizeof (*new_ch)); if (index != ~0) { @@ -102,7 +102,7 @@ clib_valloc_add_chunk (clib_valloc_main_t * vam, index = ch - vam->chunks; pool_get (vam->chunks, new_ch); - memset (new_ch, 0, sizeof (*new_ch)); + clib_memset (new_ch, 0, sizeof (*new_ch)); ch = pool_elt_at_index (vam->chunks, index); @@ -130,7 +130,7 @@ clib_valloc_init (clib_valloc_main_t * vam, clib_valloc_chunk_t * template, int need_lock) { ASSERT (template && template->baseva && template->size); - memset (vam, 0, sizeof (*vam)); + clib_memset (vam, 0, sizeof (*vam)); if (need_lock) clib_spinlock_init (&vam->lock); @@ -180,7 +180,7 @@ clib_valloc_alloc (clib_valloc_main_t * vam, uword size, pool_get (vam->chunks, new_ch); /* ch might have just moved */ ch = pool_elt_at_index (vam->chunks, index); - memset (new_ch, 0, sizeof (*new_ch)); + clib_memset (new_ch, 0, sizeof (*new_ch)); new_ch->next = new_ch->prev = ~0; new_ch->baseva = ch->baseva + size; new_ch->size = ch->size - size; @@ -271,7 +271,7 @@ clib_valloc_free (clib_valloc_main_t * vam, uword baseva) next_ch->prev = ch->prev; } ASSERT (ch - vam->chunks != vam->first_index); - memset (ch, 0xfe, sizeof (*ch)); + clib_memset (ch, 0xfe, sizeof (*ch)); pool_put (vam->chunks, ch); /* See about combining with next elt */ ch = prev_ch; @@ -295,7 +295,7 @@ clib_valloc_free (clib_valloc_main_t * vam, uword baseva) n2_ch->prev = ch - vam->chunks; } ASSERT (next_ch - vam->chunks != vam->first_index); - memset (next_ch, 0xfe, sizeof (*ch)); + clib_memset (next_ch, 0xfe, sizeof (*ch)); pool_put (vam->chunks, next_ch); } } diff --git a/src/vppinfra/vec.c b/src/vppinfra/vec.c index a0b3e038af1..1e0164a9e34 100644 --- a/src/vppinfra/vec.c +++ b/src/vppinfra/vec.c @@ -59,7 +59,7 @@ vec_resize_allocate_memory (void *v, new = clib_mem_alloc_aligned_at_offset (data_bytes, data_align, header_bytes, 1 /* yes, call os_out_of_memory */ ); data_bytes = clib_mem_size (new); - memset (new, 0, data_bytes); + clib_memset (new, 0, data_bytes); v = new + header_bytes; _vec_len (v) = length_increment; return v; @@ -100,7 +100,7 @@ vec_resize_allocate_memory (void *v, v = new; /* Zero new memory. */ - memset (v + old_alloc_bytes, 0, new_alloc_bytes - old_alloc_bytes); + clib_memset (v + old_alloc_bytes, 0, new_alloc_bytes - old_alloc_bytes); return v + header_bytes; } diff --git a/src/vppinfra/vec.h b/src/vppinfra/vec.h index 1b0378fe063..dc7b908a3b5 100644 --- a/src/vppinfra/vec.h +++ b/src/vppinfra/vec.h @@ -423,7 +423,7 @@ do { \ vec_resize_ha ((V), 1 + (_v(i) - _v(l)), (H), (A)); \ /* Must zero new space since user may have previously \ used e.g. _vec_len (v) -= 10 */ \ - memset ((V) + _v(l), 0, (1 + (_v(i) - _v(l))) * sizeof ((V)[0])); \ + clib_memset ((V) + _v(l), 0, (1 + (_v(i) - _v(l))) * sizeof ((V)[0])); \ } \ } while (0) @@ -661,7 +661,7 @@ do { \ memmove ((V) + _v(m) + _v(n), \ (V) + _v(m), \ (_v(l) - _v(m)) * sizeof ((V)[0])); \ - memset ((V) + _v(m), INIT, _v(n) * sizeof ((V)[0])); \ + clib_memset ((V) + _v(m), INIT, _v(n) * sizeof ((V)[0])); \ } while (0) /** \brief Insert N vector elements starting at element M, @@ -794,7 +794,7 @@ do { \ (_v(l) - _v(n) - _v(m)) * sizeof ((V)[0])); \ /* Zero empty space at end (for future re-allocation). */ \ if (_v(n) > 0) \ - memset ((V) + _v(l) - _v(n), 0, _v(n) * sizeof ((V)[0])); \ + clib_memset ((V) + _v(l) - _v(n), 0, _v(n) * sizeof ((V)[0])); \ _vec_len (V) -= _v(n); \ } while (0) @@ -883,7 +883,7 @@ do { \ #define vec_zero(var) \ do { \ if (var) \ - memset ((var), 0, vec_len (var) * sizeof ((var)[0])); \ + clib_memset ((var), 0, vec_len (var) * sizeof ((var)[0])); \ } while (0) /** \brief Set all vector elements to given value. Null-pointer tolerant. diff --git a/src/vppinfra/vhash.c b/src/vppinfra/vhash.c index f9dac0d9ff1..9120f502c91 100644 --- a/src/vppinfra/vhash.c +++ b/src/vppinfra/vhash.c @@ -245,7 +245,7 @@ vhash_init (vhash_t * h, u32 log2_n_keys, u32 n_key_u32, u32 * hash_seeds) uword i, j, m; vhash_search_bucket_t *b; - memset (h, 0, sizeof (h[0])); + clib_memset (h, 0, sizeof (h[0])); /* Must have at least 4 keys (e.g. one search bucket). */ log2_n_keys = clib_max (log2_n_keys, 2); |