diff mbox series

[v2] libsepol: Replace calls to mallocarray() with calls to calloc()

Message ID 20220401142033.895221-1-jwcart2@gmail.com (mailing list archive)
State Accepted
Commit 20187dbfe91b
Headers show
Series [v2] libsepol: Replace calls to mallocarray() with calls to calloc() | expand

Commit Message

James Carter April 1, 2022, 2:20 p.m. UTC
Since calloc() will return an error if nmemb * size would overflow,
just use it instead of mallocarray(). This also allows code that
initializes the array to zero to be removed.

Signed-off-by: James Carter <jwcart2@gmail.com>
---
v2
- Remove unused variables

 libsepol/src/expand.c        |  6 ++----
 libsepol/src/hashtab.c       |  5 +----
 libsepol/src/link.c          |  8 ++------
 libsepol/src/module.c        |  4 ++--
 libsepol/src/module_to_cil.c |  4 ++--
 libsepol/src/optimize.c      |  4 ++--
 libsepol/src/policydb.c      | 10 +++-------
 libsepol/src/private.h       |  9 ---------
 libsepol/src/services.c      | 12 +++---------
 libsepol/src/sidtab.c        |  6 +-----
 libsepol/src/user_record.c   |  2 +-
 libsepol/src/write.c         |  2 +-
 12 files changed, 20 insertions(+), 52 deletions(-)

Comments

James Carter April 12, 2022, 6:06 p.m. UTC | #1
On Fri, Apr 1, 2022 at 10:20 AM James Carter <jwcart2@gmail.com> wrote:
>
> Since calloc() will return an error if nmemb * size would overflow,
> just use it instead of mallocarray(). This also allows code that
> initializes the array to zero to be removed.
>
> Signed-off-by: James Carter <jwcart2@gmail.com>

This has been merged.
Jim

> ---
> v2
> - Remove unused variables
>
>  libsepol/src/expand.c        |  6 ++----
>  libsepol/src/hashtab.c       |  5 +----
>  libsepol/src/link.c          |  8 ++------
>  libsepol/src/module.c        |  4 ++--
>  libsepol/src/module_to_cil.c |  4 ++--
>  libsepol/src/optimize.c      |  4 ++--
>  libsepol/src/policydb.c      | 10 +++-------
>  libsepol/src/private.h       |  9 ---------
>  libsepol/src/services.c      | 12 +++---------
>  libsepol/src/sidtab.c        |  6 +-----
>  libsepol/src/user_record.c   |  2 +-
>  libsepol/src/write.c         |  2 +-
>  12 files changed, 20 insertions(+), 52 deletions(-)
>
> diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c
> index 7da51a40..7316124f 100644
> --- a/libsepol/src/expand.c
> +++ b/libsepol/src/expand.c
> @@ -3153,17 +3153,15 @@ int expand_module(sepol_handle_t * handle,
>                 goto cleanup;
>
>         /* Build the type<->attribute maps and remove attributes. */
> -       state.out->attr_type_map = mallocarray(state.out->p_types.nprim,
> +       state.out->attr_type_map = calloc(state.out->p_types.nprim,
>                                           sizeof(ebitmap_t));
> -       state.out->type_attr_map = mallocarray(state.out->p_types.nprim,
> +       state.out->type_attr_map = calloc(state.out->p_types.nprim,
>                                           sizeof(ebitmap_t));
>         if (!state.out->attr_type_map || !state.out->type_attr_map) {
>                 ERR(handle, "Out of memory!");
>                 goto cleanup;
>         }
>         for (i = 0; i < state.out->p_types.nprim; i++) {
> -               ebitmap_init(&state.out->type_attr_map[i]);
> -               ebitmap_init(&state.out->attr_type_map[i]);
>                 /* add the type itself as the degenerate case */
>                 if (ebitmap_set_bit(&state.out->type_attr_map[i], i, 1)) {
>                         ERR(handle, "Out of memory!");
> diff --git a/libsepol/src/hashtab.c b/libsepol/src/hashtab.c
> index 3ecaf165..922a8a4a 100644
> --- a/libsepol/src/hashtab.c
> +++ b/libsepol/src/hashtab.c
> @@ -43,7 +43,6 @@ hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
>  {
>
>         hashtab_t p;
> -       unsigned int i;
>
>         p = (hashtab_t) malloc(sizeof(hashtab_val_t));
>         if (p == NULL)
> @@ -54,13 +53,11 @@ hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
>         p->nel = 0;
>         p->hash_value = hash_value;
>         p->keycmp = keycmp;
> -       p->htable = (hashtab_ptr_t *) mallocarray(size, sizeof(hashtab_ptr_t));
> +       p->htable = (hashtab_ptr_t *) calloc(size, sizeof(hashtab_ptr_t));
>         if (p->htable == NULL) {
>                 free(p);
>                 return NULL;
>         }
> -       for (i = 0; i < size; i++)
> -               p->htable[i] = (hashtab_ptr_t) NULL;
>
>         return p;
>  }
> diff --git a/libsepol/src/link.c b/libsepol/src/link.c
> index 21a5a935..ecfb5786 100644
> --- a/libsepol/src/link.c
> +++ b/libsepol/src/link.c
> @@ -1681,14 +1681,10 @@ static int copy_scope_index(scope_index_t * src, scope_index_t * dest,
>         }
>
>         /* next copy the enabled permissions data  */
> -       if ((dest->class_perms_map = mallocarray(largest_mapped_class_value,
> -                                           sizeof(*dest->class_perms_map))) ==
> -           NULL) {
> +       if ((dest->class_perms_map = calloc(largest_mapped_class_value,
> +                                           sizeof(*dest->class_perms_map))) == NULL) {
>                 goto cleanup;
>         }
> -       for (i = 0; i < largest_mapped_class_value; i++) {
> -               ebitmap_init(dest->class_perms_map + i);
> -       }
>         dest->class_perms_len = largest_mapped_class_value;
>         for (i = 0; i < src->class_perms_len; i++) {
>                 ebitmap_t *srcmap = src->class_perms_map + i;
> diff --git a/libsepol/src/module.c b/libsepol/src/module.c
> index d93d08a2..5246a599 100644
> --- a/libsepol/src/module.c
> +++ b/libsepol/src/module.c
> @@ -409,14 +409,14 @@ static int module_package_read_offsets(sepol_module_package_t * mod,
>                 goto err;
>         }
>
> -       off = (size_t *) mallocarray(nsec + 1, sizeof(size_t));
> +       off = (size_t *) calloc(nsec + 1, sizeof(size_t));
>         if (!off) {
>                 ERR(file->handle, "out of memory");
>                 goto err;
>         }
>
>         free(buf);
> -       buf = mallocarray(nsec, sizeof(uint32_t));
> +       buf = calloc(nsec, sizeof(uint32_t));
>         if (!buf) {
>                 ERR(file->handle, "out of memory");
>                 goto err;
> diff --git a/libsepol/src/module_to_cil.c b/libsepol/src/module_to_cil.c
> index c9e88f1e..07507852 100644
> --- a/libsepol/src/module_to_cil.c
> +++ b/libsepol/src/module_to_cil.c
> @@ -430,7 +430,7 @@ static int stack_init(struct stack **stack)
>                 goto exit;
>         }
>
> -       s->stack = mallocarray(STACK_SIZE, sizeof(*s->stack));
> +       s->stack = calloc(STACK_SIZE, sizeof(*s->stack));
>         if (s->stack == NULL) {
>                 goto exit;
>         }
> @@ -1008,7 +1008,7 @@ static int ebitmap_to_names(struct ebitmap *map, char **vals_to_names, char ***n
>                 goto exit;
>         }
>
> -       name_arr = mallocarray(num, sizeof(*name_arr));
> +       name_arr = calloc(num, sizeof(*name_arr));
>         if (name_arr == NULL) {
>                 log_err("Out of memory");
>                 rc = -1;
> diff --git a/libsepol/src/optimize.c b/libsepol/src/optimize.c
> index 93ff2116..a38025ec 100644
> --- a/libsepol/src/optimize.c
> +++ b/libsepol/src/optimize.c
> @@ -45,7 +45,7 @@ static int type_vec_init(struct type_vec *v)
>  {
>         v->capacity = TYPE_VEC_INIT_SIZE;
>         v->count = 0;
> -       v->types = mallocarray(v->capacity, sizeof(*v->types));
> +       v->types = calloc(v->capacity, sizeof(*v->types));
>         if (!v->types)
>                 return -1;
>         return 0;
> @@ -97,7 +97,7 @@ static struct type_vec *build_type_map(const policydb_t *p)
>  {
>         unsigned int i, k;
>         ebitmap_node_t *n;
> -       struct type_vec *map = mallocarray(p->p_types.nprim, sizeof(*map));
> +       struct type_vec *map = calloc(p->p_types.nprim, sizeof(*map));
>         if (!map)
>                 return NULL;
>
> diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
> index fc71463e..adc512fd 100644
> --- a/libsepol/src/policydb.c
> +++ b/libsepol/src/policydb.c
> @@ -4126,7 +4126,7 @@ static int scope_read(policydb_t * p, int symnum, struct policy_file *fp)
>                 goto cleanup;
>         }
>         if ((scope->decl_ids =
> -            mallocarray(scope->decl_ids_len, sizeof(uint32_t))) == NULL) {
> +            calloc(scope->decl_ids_len, sizeof(uint32_t))) == NULL) {
>                 goto cleanup;
>         }
>         rc = next_entry(scope->decl_ids, fp, sizeof(uint32_t) * scope->decl_ids_len);
> @@ -4517,14 +4517,10 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>         }
>
>         if (policy_type == POLICY_KERN) {
> -               p->type_attr_map = mallocarray(p->p_types.nprim, sizeof(ebitmap_t));
> -               p->attr_type_map = mallocarray(p->p_types.nprim, sizeof(ebitmap_t));
> +               p->type_attr_map = calloc(p->p_types.nprim, sizeof(ebitmap_t));
> +               p->attr_type_map = calloc(p->p_types.nprim, sizeof(ebitmap_t));
>                 if (!p->type_attr_map || !p->attr_type_map)
>                         goto bad;
> -               for (i = 0; i < p->p_types.nprim; i++) {
> -                       ebitmap_init(&p->type_attr_map[i]);
> -                       ebitmap_init(&p->attr_type_map[i]);
> -               }
>                 for (i = 0; i < p->p_types.nprim; i++) {
>                         if (r_policyvers >= POLICYDB_VERSION_AVTAB) {
>                                 if (ebitmap_read(&p->type_attr_map[i], fp))
> diff --git a/libsepol/src/private.h b/libsepol/src/private.h
> index a8cc1472..1833b497 100644
> --- a/libsepol/src/private.h
> +++ b/libsepol/src/private.h
> @@ -84,15 +84,6 @@ extern size_t put_entry(const void *ptr, size_t size, size_t n,
>                         struct policy_file *fp);
>  extern int str_read(char **strp, struct policy_file *fp, size_t len);
>
> -static inline void* mallocarray(size_t nmemb, size_t size) {
> -       if (size && nmemb > (size_t)-1 / size) {
> -               errno = ENOMEM;
> -               return NULL;
> -       }
> -
> -       return malloc(nmemb * size);
> -}
> -
>  #ifndef HAVE_REALLOCARRAY
>  static inline void* reallocarray(void *ptr, size_t nmemb, size_t size) {
>         if (size && nmemb > (size_t)-1 / size) {
> diff --git a/libsepol/src/services.c b/libsepol/src/services.c
> index 29723729..909cfaff 100644
> --- a/libsepol/src/services.c
> +++ b/libsepol/src/services.c
> @@ -712,7 +712,7 @@ mls_ops:
>          * Generate the same number of answer buffer entries as expression
>          * buffers (as there will never be more).
>          */
> -       answer_list = mallocarray(expr_count, sizeof(*answer_list));
> +       answer_list = calloc(expr_count, sizeof(*answer_list));
>         if (!answer_list) {
>                 ERR(NULL, "failed to allocate answer stack");
>                 rc = -ENOMEM;
> @@ -2163,12 +2163,11 @@ int sepol_get_user_sids(sepol_security_id_t fromsid,
>         }
>         usercon.user = user->s.value;
>
> -       mysids = mallocarray(maxnel, sizeof(sepol_security_id_t));
> +       mysids = calloc(maxnel, sizeof(sepol_security_id_t));
>         if (!mysids) {
>                 rc = -ENOMEM;
>                 goto out;
>         }
> -       memset(mysids, 0, maxnel * sizeof(sepol_security_id_t));
>
>         ebitmap_for_each_positive_bit(&user->roles.roles, rnode, i) {
>                 role = policydb->role_val_to_struct[i];
> @@ -2198,17 +2197,12 @@ int sepol_get_user_sids(sepol_security_id_t fromsid,
>                                 mysids[mynel++] = sid;
>                         } else {
>                                 maxnel += SIDS_NEL;
> -                               mysids2 =
> -                                   mallocarray(maxnel,
> -                                          sizeof(sepol_security_id_t));
> -
> +                               mysids2 = calloc(maxnel, sizeof(sepol_security_id_t));
>                                 if (!mysids2) {
>                                         rc = -ENOMEM;
>                                         free(mysids);
>                                         goto out;
>                                 }
> -                               memset(mysids2, 0,
> -                                      maxnel * sizeof(sepol_security_id_t));
>                                 memcpy(mysids2, mysids,
>                                        mynel * sizeof(sepol_security_id_t));
>                                 free(mysids);
> diff --git a/libsepol/src/sidtab.c b/libsepol/src/sidtab.c
> index adeae6eb..0cec41d2 100644
> --- a/libsepol/src/sidtab.c
> +++ b/libsepol/src/sidtab.c
> @@ -26,13 +26,9 @@
>
>  int sepol_sidtab_init(sidtab_t * s)
>  {
> -       int i;
> -
> -       s->htable = mallocarray(SIDTAB_SIZE, sizeof(sidtab_ptr_t));
> +       s->htable = calloc(SIDTAB_SIZE, sizeof(sidtab_ptr_t));
>         if (!s->htable)
>                 return -ENOMEM;
> -       for (i = 0; i < SIDTAB_SIZE; i++)
> -               s->htable[i] = (sidtab_ptr_t) NULL;
>         s->nel = 0;
>         s->next_sid = 1;
>         s->shutdown = 0;
> diff --git a/libsepol/src/user_record.c b/libsepol/src/user_record.c
> index 404fa3a8..dddd23b9 100644
> --- a/libsepol/src/user_record.c
> +++ b/libsepol/src/user_record.c
> @@ -267,7 +267,7 @@ int sepol_user_get_roles(sepol_handle_t * handle,
>
>         unsigned int i;
>         const char **tmp_roles =
> -           (const char **)mallocarray(user->num_roles, sizeof(char *));
> +           (const char **)calloc(user->num_roles, sizeof(char *));
>         if (!tmp_roles)
>                 goto omem;
>
> diff --git a/libsepol/src/write.c b/libsepol/src/write.c
> index 9df5b0bd..d7ac2b25 100644
> --- a/libsepol/src/write.c
> +++ b/libsepol/src/write.c
> @@ -2117,7 +2117,7 @@ static int scope_write(hashtab_key_t key, hashtab_datum_t datum, void *ptr)
>                  * buffer.  this would have been easier with C99's
>                  * dynamic arrays... */
>                 rc = POLICYDB_ERROR;
> -               dyn_buf = mallocarray(items, sizeof(*dyn_buf));
> +               dyn_buf = calloc(items, sizeof(*dyn_buf));
>                 if (!dyn_buf)
>                         goto err;
>                 buf = dyn_buf;
> --
> 2.34.1
>
diff mbox series

Patch

diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c
index 7da51a40..7316124f 100644
--- a/libsepol/src/expand.c
+++ b/libsepol/src/expand.c
@@ -3153,17 +3153,15 @@  int expand_module(sepol_handle_t * handle,
 		goto cleanup;
 
 	/* Build the type<->attribute maps and remove attributes. */
-	state.out->attr_type_map = mallocarray(state.out->p_types.nprim,
+	state.out->attr_type_map = calloc(state.out->p_types.nprim,
 					  sizeof(ebitmap_t));
-	state.out->type_attr_map = mallocarray(state.out->p_types.nprim,
+	state.out->type_attr_map = calloc(state.out->p_types.nprim,
 					  sizeof(ebitmap_t));
 	if (!state.out->attr_type_map || !state.out->type_attr_map) {
 		ERR(handle, "Out of memory!");
 		goto cleanup;
 	}
 	for (i = 0; i < state.out->p_types.nprim; i++) {
-		ebitmap_init(&state.out->type_attr_map[i]);
-		ebitmap_init(&state.out->attr_type_map[i]);
 		/* add the type itself as the degenerate case */
 		if (ebitmap_set_bit(&state.out->type_attr_map[i], i, 1)) {
 			ERR(handle, "Out of memory!");
diff --git a/libsepol/src/hashtab.c b/libsepol/src/hashtab.c
index 3ecaf165..922a8a4a 100644
--- a/libsepol/src/hashtab.c
+++ b/libsepol/src/hashtab.c
@@ -43,7 +43,6 @@  hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
 {
 
 	hashtab_t p;
-	unsigned int i;
 
 	p = (hashtab_t) malloc(sizeof(hashtab_val_t));
 	if (p == NULL)
@@ -54,13 +53,11 @@  hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
 	p->nel = 0;
 	p->hash_value = hash_value;
 	p->keycmp = keycmp;
-	p->htable = (hashtab_ptr_t *) mallocarray(size, sizeof(hashtab_ptr_t));
+	p->htable = (hashtab_ptr_t *) calloc(size, sizeof(hashtab_ptr_t));
 	if (p->htable == NULL) {
 		free(p);
 		return NULL;
 	}
-	for (i = 0; i < size; i++)
-		p->htable[i] = (hashtab_ptr_t) NULL;
 
 	return p;
 }
diff --git a/libsepol/src/link.c b/libsepol/src/link.c
index 21a5a935..ecfb5786 100644
--- a/libsepol/src/link.c
+++ b/libsepol/src/link.c
@@ -1681,14 +1681,10 @@  static int copy_scope_index(scope_index_t * src, scope_index_t * dest,
 	}
 
 	/* next copy the enabled permissions data  */
-	if ((dest->class_perms_map = mallocarray(largest_mapped_class_value,
-					    sizeof(*dest->class_perms_map))) ==
-	    NULL) {
+	if ((dest->class_perms_map = calloc(largest_mapped_class_value,
+					    sizeof(*dest->class_perms_map))) == NULL) {
 		goto cleanup;
 	}
-	for (i = 0; i < largest_mapped_class_value; i++) {
-		ebitmap_init(dest->class_perms_map + i);
-	}
 	dest->class_perms_len = largest_mapped_class_value;
 	for (i = 0; i < src->class_perms_len; i++) {
 		ebitmap_t *srcmap = src->class_perms_map + i;
diff --git a/libsepol/src/module.c b/libsepol/src/module.c
index d93d08a2..5246a599 100644
--- a/libsepol/src/module.c
+++ b/libsepol/src/module.c
@@ -409,14 +409,14 @@  static int module_package_read_offsets(sepol_module_package_t * mod,
 		goto err;
 	}
 
-	off = (size_t *) mallocarray(nsec + 1, sizeof(size_t));
+	off = (size_t *) calloc(nsec + 1, sizeof(size_t));
 	if (!off) {
 		ERR(file->handle, "out of memory");
 		goto err;
 	}
 
 	free(buf);
-	buf = mallocarray(nsec, sizeof(uint32_t));
+	buf = calloc(nsec, sizeof(uint32_t));
 	if (!buf) {
 		ERR(file->handle, "out of memory");
 		goto err;
diff --git a/libsepol/src/module_to_cil.c b/libsepol/src/module_to_cil.c
index c9e88f1e..07507852 100644
--- a/libsepol/src/module_to_cil.c
+++ b/libsepol/src/module_to_cil.c
@@ -430,7 +430,7 @@  static int stack_init(struct stack **stack)
 		goto exit;
 	}
 
-	s->stack = mallocarray(STACK_SIZE, sizeof(*s->stack));
+	s->stack = calloc(STACK_SIZE, sizeof(*s->stack));
 	if (s->stack == NULL) {
 		goto exit;
 	}
@@ -1008,7 +1008,7 @@  static int ebitmap_to_names(struct ebitmap *map, char **vals_to_names, char ***n
 		goto exit;
 	}
 
-	name_arr = mallocarray(num, sizeof(*name_arr));
+	name_arr = calloc(num, sizeof(*name_arr));
 	if (name_arr == NULL) {
 		log_err("Out of memory");
 		rc = -1;
diff --git a/libsepol/src/optimize.c b/libsepol/src/optimize.c
index 93ff2116..a38025ec 100644
--- a/libsepol/src/optimize.c
+++ b/libsepol/src/optimize.c
@@ -45,7 +45,7 @@  static int type_vec_init(struct type_vec *v)
 {
 	v->capacity = TYPE_VEC_INIT_SIZE;
 	v->count = 0;
-	v->types = mallocarray(v->capacity, sizeof(*v->types));
+	v->types = calloc(v->capacity, sizeof(*v->types));
 	if (!v->types)
 		return -1;
 	return 0;
@@ -97,7 +97,7 @@  static struct type_vec *build_type_map(const policydb_t *p)
 {
 	unsigned int i, k;
 	ebitmap_node_t *n;
-	struct type_vec *map = mallocarray(p->p_types.nprim, sizeof(*map));
+	struct type_vec *map = calloc(p->p_types.nprim, sizeof(*map));
 	if (!map)
 		return NULL;
 
diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index fc71463e..adc512fd 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -4126,7 +4126,7 @@  static int scope_read(policydb_t * p, int symnum, struct policy_file *fp)
 		goto cleanup;
 	}
 	if ((scope->decl_ids =
-	     mallocarray(scope->decl_ids_len, sizeof(uint32_t))) == NULL) {
+	     calloc(scope->decl_ids_len, sizeof(uint32_t))) == NULL) {
 		goto cleanup;
 	}
 	rc = next_entry(scope->decl_ids, fp, sizeof(uint32_t) * scope->decl_ids_len);
@@ -4517,14 +4517,10 @@  int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 	}
 
 	if (policy_type == POLICY_KERN) {
-		p->type_attr_map = mallocarray(p->p_types.nprim, sizeof(ebitmap_t));
-		p->attr_type_map = mallocarray(p->p_types.nprim, sizeof(ebitmap_t));
+		p->type_attr_map = calloc(p->p_types.nprim, sizeof(ebitmap_t));
+		p->attr_type_map = calloc(p->p_types.nprim, sizeof(ebitmap_t));
 		if (!p->type_attr_map || !p->attr_type_map)
 			goto bad;
-		for (i = 0; i < p->p_types.nprim; i++) {
-			ebitmap_init(&p->type_attr_map[i]);
-			ebitmap_init(&p->attr_type_map[i]);
-		}
 		for (i = 0; i < p->p_types.nprim; i++) {
 			if (r_policyvers >= POLICYDB_VERSION_AVTAB) {
 				if (ebitmap_read(&p->type_attr_map[i], fp))
diff --git a/libsepol/src/private.h b/libsepol/src/private.h
index a8cc1472..1833b497 100644
--- a/libsepol/src/private.h
+++ b/libsepol/src/private.h
@@ -84,15 +84,6 @@  extern size_t put_entry(const void *ptr, size_t size, size_t n,
 		        struct policy_file *fp);
 extern int str_read(char **strp, struct policy_file *fp, size_t len);
 
-static inline void* mallocarray(size_t nmemb, size_t size) {
-	if (size && nmemb > (size_t)-1 / size) {
-		errno = ENOMEM;
-		return NULL;
-	}
-
-	return malloc(nmemb * size);
-}
-
 #ifndef HAVE_REALLOCARRAY
 static inline void* reallocarray(void *ptr, size_t nmemb, size_t size) {
 	if (size && nmemb > (size_t)-1 / size) {
diff --git a/libsepol/src/services.c b/libsepol/src/services.c
index 29723729..909cfaff 100644
--- a/libsepol/src/services.c
+++ b/libsepol/src/services.c
@@ -712,7 +712,7 @@  mls_ops:
 	 * Generate the same number of answer buffer entries as expression
 	 * buffers (as there will never be more).
 	 */
-	answer_list = mallocarray(expr_count, sizeof(*answer_list));
+	answer_list = calloc(expr_count, sizeof(*answer_list));
 	if (!answer_list) {
 		ERR(NULL, "failed to allocate answer stack");
 		rc = -ENOMEM;
@@ -2163,12 +2163,11 @@  int sepol_get_user_sids(sepol_security_id_t fromsid,
 	}
 	usercon.user = user->s.value;
 
-	mysids = mallocarray(maxnel, sizeof(sepol_security_id_t));
+	mysids = calloc(maxnel, sizeof(sepol_security_id_t));
 	if (!mysids) {
 		rc = -ENOMEM;
 		goto out;
 	}
-	memset(mysids, 0, maxnel * sizeof(sepol_security_id_t));
 
 	ebitmap_for_each_positive_bit(&user->roles.roles, rnode, i) {
 		role = policydb->role_val_to_struct[i];
@@ -2198,17 +2197,12 @@  int sepol_get_user_sids(sepol_security_id_t fromsid,
 				mysids[mynel++] = sid;
 			} else {
 				maxnel += SIDS_NEL;
-				mysids2 =
-				    mallocarray(maxnel,
-					   sizeof(sepol_security_id_t));
-
+				mysids2 = calloc(maxnel, sizeof(sepol_security_id_t));
 				if (!mysids2) {
 					rc = -ENOMEM;
 					free(mysids);
 					goto out;
 				}
-				memset(mysids2, 0,
-				       maxnel * sizeof(sepol_security_id_t));
 				memcpy(mysids2, mysids,
 				       mynel * sizeof(sepol_security_id_t));
 				free(mysids);
diff --git a/libsepol/src/sidtab.c b/libsepol/src/sidtab.c
index adeae6eb..0cec41d2 100644
--- a/libsepol/src/sidtab.c
+++ b/libsepol/src/sidtab.c
@@ -26,13 +26,9 @@ 
 
 int sepol_sidtab_init(sidtab_t * s)
 {
-	int i;
-
-	s->htable = mallocarray(SIDTAB_SIZE, sizeof(sidtab_ptr_t));
+	s->htable = calloc(SIDTAB_SIZE, sizeof(sidtab_ptr_t));
 	if (!s->htable)
 		return -ENOMEM;
-	for (i = 0; i < SIDTAB_SIZE; i++)
-		s->htable[i] = (sidtab_ptr_t) NULL;
 	s->nel = 0;
 	s->next_sid = 1;
 	s->shutdown = 0;
diff --git a/libsepol/src/user_record.c b/libsepol/src/user_record.c
index 404fa3a8..dddd23b9 100644
--- a/libsepol/src/user_record.c
+++ b/libsepol/src/user_record.c
@@ -267,7 +267,7 @@  int sepol_user_get_roles(sepol_handle_t * handle,
 
 	unsigned int i;
 	const char **tmp_roles =
-	    (const char **)mallocarray(user->num_roles, sizeof(char *));
+	    (const char **)calloc(user->num_roles, sizeof(char *));
 	if (!tmp_roles)
 		goto omem;
 
diff --git a/libsepol/src/write.c b/libsepol/src/write.c
index 9df5b0bd..d7ac2b25 100644
--- a/libsepol/src/write.c
+++ b/libsepol/src/write.c
@@ -2117,7 +2117,7 @@  static int scope_write(hashtab_key_t key, hashtab_datum_t datum, void *ptr)
 		 * buffer.  this would have been easier with C99's
 		 * dynamic arrays... */
 		rc = POLICYDB_ERROR;
-		dyn_buf = mallocarray(items, sizeof(*dyn_buf));
+		dyn_buf = calloc(items, sizeof(*dyn_buf));
 		if (!dyn_buf)
 			goto err;
 		buf = dyn_buf;