All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian Göttsche" <cgzones@googlemail.com>
To: selinux@vger.kernel.org
Subject: [PATCH v3 08/36] libsepol: use mallocarray wrapper to avoid overflows
Date: Thu,  9 Dec 2021 17:49:00 +0100	[thread overview]
Message-ID: <20211209164928.87459-9-cgzones@googlemail.com> (raw)
In-Reply-To: <20211209164928.87459-1-cgzones@googlemail.com>

Use a wrapper to guard `malloc(a * b)` type allocations, to detect
multiplication overflows, which result in too few memory being
allocated.

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
---
 libsepol/src/conditional.c   | 2 +-
 libsepol/src/expand.c        | 4 ++--
 libsepol/src/hashtab.c       | 4 +++-
 libsepol/src/link.c          | 3 ++-
 libsepol/src/module.c        | 4 ++--
 libsepol/src/module_to_cil.c | 4 ++--
 libsepol/src/optimize.c      | 6 ++++--
 libsepol/src/policydb.c      | 6 +++---
 libsepol/src/private.h       | 9 +++++++++
 libsepol/src/services.c      | 6 +++---
 libsepol/src/sidtab.c        | 3 ++-
 libsepol/src/user_record.c   | 3 ++-
 libsepol/src/write.c         | 2 +-
 13 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/libsepol/src/conditional.c b/libsepol/src/conditional.c
index 1edac65d..cc3f4d82 100644
--- a/libsepol/src/conditional.c
+++ b/libsepol/src/conditional.c
@@ -522,7 +522,7 @@ int cond_init_bool_indexes(policydb_t * p)
 	if (p->bool_val_to_struct)
 		free(p->bool_val_to_struct);
 	p->bool_val_to_struct = (cond_bool_datum_t **)
-	    malloc(p->p_bools.nprim * sizeof(cond_bool_datum_t *));
+	    mallocarray(p->p_bools.nprim, sizeof(cond_bool_datum_t *));
 	if (!p->bool_val_to_struct)
 		return -1;
 	return 0;
diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c
index a6a466f7..8a7259a0 100644
--- a/libsepol/src/expand.c
+++ b/libsepol/src/expand.c
@@ -3146,9 +3146,9 @@ int expand_module(sepol_handle_t * handle,
 		goto cleanup;
 
 	/* Build the type<->attribute maps and remove attributes. */
-	state.out->attr_type_map = malloc(state.out->p_types.nprim *
+	state.out->attr_type_map = mallocarray(state.out->p_types.nprim,
 					  sizeof(ebitmap_t));
-	state.out->type_attr_map = malloc(state.out->p_types.nprim *
+	state.out->type_attr_map = mallocarray(state.out->p_types.nprim,
 					  sizeof(ebitmap_t));
 	if (!state.out->attr_type_map || !state.out->type_attr_map) {
 		ERR(handle, "Out of memory!");
diff --git a/libsepol/src/hashtab.c b/libsepol/src/hashtab.c
index 21143b76..2eb35212 100644
--- a/libsepol/src/hashtab.c
+++ b/libsepol/src/hashtab.c
@@ -32,6 +32,8 @@
 #include <string.h>
 #include <sepol/policydb/hashtab.h>
 
+#include "private.h"
+
 hashtab_t hashtab_create(unsigned int (*hash_value) (hashtab_t h,
 						     const_hashtab_key_t key),
 			 int (*keycmp) (hashtab_t h,
@@ -52,7 +54,7 @@ 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 *) malloc(sizeof(hashtab_ptr_t) * size);
+	p->htable = (hashtab_ptr_t *) mallocarray(size, sizeof(hashtab_ptr_t));
 	if (p->htable == NULL) {
 		free(p);
 		return NULL;
diff --git a/libsepol/src/link.c b/libsepol/src/link.c
index b14240d5..dfcb0673 100644
--- a/libsepol/src/link.c
+++ b/libsepol/src/link.c
@@ -34,6 +34,7 @@
 #include <assert.h>
 
 #include "debug.h"
+#include "private.h"
 
 #undef min
 #define min(a,b) (((a) < (b)) ? (a) : (b))
@@ -1680,7 +1681,7 @@ static int copy_scope_index(scope_index_t * src, scope_index_t * dest,
 	}
 
 	/* next copy the enabled permissions data  */
-	if ((dest->class_perms_map = malloc(largest_mapped_class_value *
+	if ((dest->class_perms_map = mallocarray(largest_mapped_class_value,
 					    sizeof(*dest->class_perms_map))) ==
 	    NULL) {
 		goto cleanup;
diff --git a/libsepol/src/module.c b/libsepol/src/module.c
index b718751e..d93d08a2 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 *) malloc((nsec + 1) * sizeof(size_t));
+	off = (size_t *) mallocarray(nsec + 1, sizeof(size_t));
 	if (!off) {
 		ERR(file->handle, "out of memory");
 		goto err;
 	}
 
 	free(buf);
-	buf = malloc(sizeof(uint32_t) * nsec);
+	buf = mallocarray(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 b231d7f8..33a11a15 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 = malloc(sizeof(*s->stack) * STACK_SIZE);
+	s->stack = mallocarray(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 = malloc(sizeof(*name_arr) * num);
+	name_arr = mallocarray(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 6826155c..f8298fb7 100644
--- a/libsepol/src/optimize.c
+++ b/libsepol/src/optimize.c
@@ -31,6 +31,8 @@
 #include <sepol/policydb/policydb.h>
 #include <sepol/policydb/conditional.h>
 
+#include "private.h"
+
 #define TYPE_VEC_INIT_SIZE 16
 
 struct type_vec {
@@ -42,7 +44,7 @@ static int type_vec_init(struct type_vec *v)
 {
 	v->capacity = TYPE_VEC_INIT_SIZE;
 	v->count = 0;
-	v->types = malloc(v->capacity * sizeof(*v->types));
+	v->types = mallocarray(v->capacity, sizeof(*v->types));
 	if (!v->types)
 		return -1;
 	return 0;
@@ -93,7 +95,7 @@ static struct type_vec *build_type_map(const policydb_t *p)
 {
 	unsigned int i, k;
 	ebitmap_node_t *n;
-	struct type_vec *map = malloc(p->p_types.nprim * sizeof(*map));
+	struct type_vec *map = mallocarray(p->p_types.nprim, sizeof(*map));
 	if (!map)
 		return NULL;
 
diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index 587ba64a..dcea1807 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -4111,7 +4111,7 @@ static int scope_read(policydb_t * p, int symnum, struct policy_file *fp)
 		goto cleanup;
 	}
 	if ((scope->decl_ids =
-	     malloc(scope->decl_ids_len * sizeof(uint32_t))) == NULL) {
+	     mallocarray(scope->decl_ids_len, sizeof(uint32_t))) == NULL) {
 		goto cleanup;
 	}
 	rc = next_entry(scope->decl_ids, fp, sizeof(uint32_t) * scope->decl_ids_len);
@@ -4500,8 +4500,8 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 	}
 
 	if (policy_type == POLICY_KERN) {
-		p->type_attr_map = malloc(p->p_types.nprim * sizeof(ebitmap_t));
-		p->attr_type_map = malloc(p->p_types.nprim * sizeof(ebitmap_t));
+		p->type_attr_map = mallocarray(p->p_types.nprim, sizeof(ebitmap_t));
+		p->attr_type_map = mallocarray(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++) {
diff --git a/libsepol/src/private.h b/libsepol/src/private.h
index 6146f59f..d3d65a57 100644
--- a/libsepol/src/private.h
+++ b/libsepol/src/private.h
@@ -83,3 +83,12 @@ extern int next_entry(void *buf, struct policy_file *fp, size_t bytes);
 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);
+}
diff --git a/libsepol/src/services.c b/libsepol/src/services.c
index 3407058f..edcdde21 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 = malloc(expr_count * sizeof(*answer_list));
+	answer_list = mallocarray(expr_count, sizeof(*answer_list));
 	if (!answer_list) {
 		ERR(NULL, "failed to allocate answer stack");
 		rc = -ENOMEM;
@@ -2163,7 +2163,7 @@ int sepol_get_user_sids(sepol_security_id_t fromsid,
 	}
 	usercon.user = user->s.value;
 
-	mysids = malloc(maxnel * sizeof(sepol_security_id_t));
+	mysids = mallocarray(maxnel, sizeof(sepol_security_id_t));
 	if (!mysids) {
 		rc = -ENOMEM;
 		goto out;
@@ -2199,7 +2199,7 @@ int sepol_get_user_sids(sepol_security_id_t fromsid,
 			} else {
 				maxnel += SIDS_NEL;
 				mysids2 =
-				    malloc(maxnel *
+				    mallocarray(maxnel,
 					   sizeof(sepol_security_id_t));
 
 				if (!mysids2) {
diff --git a/libsepol/src/sidtab.c b/libsepol/src/sidtab.c
index 255e0725..adeae6eb 100644
--- a/libsepol/src/sidtab.c
+++ b/libsepol/src/sidtab.c
@@ -15,6 +15,7 @@
 #include <sepol/policydb/sidtab.h>
 
 #include "flask.h"
+#include "private.h"
 
 #define SIDTAB_HASH(sid) \
 (sid & SIDTAB_HASH_MASK)
@@ -27,7 +28,7 @@ int sepol_sidtab_init(sidtab_t * s)
 {
 	int i;
 
-	s->htable = malloc(sizeof(sidtab_ptr_t) * SIDTAB_SIZE);
+	s->htable = mallocarray(SIDTAB_SIZE, sizeof(sidtab_ptr_t));
 	if (!s->htable)
 		return -ENOMEM;
 	for (i = 0; i < SIDTAB_SIZE; i++)
diff --git a/libsepol/src/user_record.c b/libsepol/src/user_record.c
index ac520060..c1356a6b 100644
--- a/libsepol/src/user_record.c
+++ b/libsepol/src/user_record.c
@@ -4,6 +4,7 @@
 
 #include "user_internal.h"
 #include "debug.h"
+#include "private.h"
 
 struct sepol_user {
 	/* This user's name */
@@ -265,7 +266,7 @@ int sepol_user_get_roles(sepol_handle_t * handle,
 
 	unsigned int i;
 	const char **tmp_roles =
-	    (const char **)malloc(sizeof(char *) * user->num_roles);
+	    (const char **)mallocarray(user->num_roles, sizeof(char *));
 	if (!tmp_roles)
 		goto omem;
 
diff --git a/libsepol/src/write.c b/libsepol/src/write.c
index 3bd034d6..9df5b0bd 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 = malloc(items * sizeof(*dyn_buf));
+		dyn_buf = mallocarray(items, sizeof(*dyn_buf));
 		if (!dyn_buf)
 			goto err;
 		buf = dyn_buf;
-- 
2.34.1


  parent reply	other threads:[~2021-12-09 16:51 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-11 16:24 [RFC PATCH 00/35] libsepol: add fuzzer for reading binary policies Christian Göttsche
2021-10-11 16:24 ` [RFC PATCH 01/35] cifuzz: enable report-unreproducible-crashes Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 02/35] cifuzz: use the default runtime of 600 seconds Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 03/35] libsepol/fuzz: silence secilc-fuzzer Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 04/35] libsepol: add libfuzz based fuzzer for reading binary policies Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 05/35] libsepol/fuzz: limit element sizes for fuzzing Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 06/35] libsepol: use logging framework in conditional.c Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 07/35] libsepol: use logging framework in ebitmap.c Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 08/35] libsepol: use mallocarray wrapper to avoid overflows Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 09/35] libsepol: use reallocarray " Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 10/35] libsepol: add checks for read sizes Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 11/35] libsepol: enforce avtab item limit Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 12/35] libsepol: clean memory on conditional read failure Christian Göttsche
2021-10-13 14:10   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 13/35] libsepol: validate MLS levels Christian Göttsche
2021-10-13 15:38   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 14/35] libsepol: reject invalid fsuse types Christian Göttsche
2021-10-18 19:57   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 15/35] libsepol: reject invalid default targets Christian Göttsche
2021-10-18 19:58   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 16/35] libsepol: validate expanded user range and level Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 17/35] libsepol: validate types Christian Göttsche
2021-10-13 15:39   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 18/35] libsepol: use size_t for indexes in strs helpers Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 19/35] libsepol: reject abnormal huge sid ids Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 20/35] libsepol: do not crash on class gaps Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 21/35] libsepol: do not crash on user gaps Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 22/35] libsepol: validate permission count of classes Christian Göttsche
2021-10-13 15:41   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 23/35] libsepol: resolve log message mismatch Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 24/35] libsepol: zero member before potential dereference Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 25/35] libsepol: validate avtab types Christian Göttsche
2021-10-18 19:54   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 26/35] libsepol: validate constraint expression operators and attributes Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 27/35] libsepol: validate type of avtab type rules Christian Göttsche
2021-10-13 15:44   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 28/35] libsepol: validate ocontexts Christian Göttsche
2021-10-14 14:10   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 29/35] libsepol: validate genfs contexts Christian Göttsche
2021-10-14 14:10   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 30/35] libsepol: validate permissive types Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 31/35] libsepol: validate policy properties Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 32/35] libsepol: do not underflow on short format arguments Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 33/35] libsepol: validate categories Christian Göttsche
2021-10-13 15:40   ` James Carter
2021-10-11 16:25 ` [RFC PATCH 34/35] libsepol: use correct size for initial string list Christian Göttsche
2021-10-11 16:25 ` [RFC PATCH 35/35] libsepol: do not create a string list with initial size zero Christian Göttsche
2021-10-13 14:07 ` [RFC PATCH 00/35] libsepol: add fuzzer for reading binary policies James Carter
2021-11-05 15:45 ` [RFC PATCH v2 00/36] " Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 01/36] cifuzz: enable report-unreproducible-crashes Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 02/36] cifuzz: use the default runtime of 600 seconds Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 03/36] libsepol/fuzz: silence secilc-fuzzer Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 04/36] libsepol: add libfuzz based fuzzer for reading binary policies Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 05/36] libsepol/fuzz: limit element sizes for fuzzing Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 06/36] libsepol: use logging framework in conditional.c Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 07/36] libsepol: use logging framework in ebitmap.c Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 08/36] libsepol: use mallocarray wrapper to avoid overflows Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 09/36] libsepol: use reallocarray " Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 10/36] libsepol: add checks for read sizes Christian Göttsche
2021-11-09 18:46     ` James Carter
2021-11-09 18:58       ` Christian Göttsche
2021-11-09 19:17         ` James Carter
2021-11-05 15:45   ` [RFC PATCH v2 11/36] libsepol: enforce avtab item limit Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 12/36] libsepol: clean memory on conditional insertion failure Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 13/36] libsepol: reject abnormal huge sid ids Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 14/36] libsepol: reject invalid filetrans source type Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 15/36] libsepol: zero member before potential dereference Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 16/36] libsepol: use size_t for indexes in strs helpers Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 17/36] libsepol: do not underflow on short format arguments Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 18/36] libsepol: do not crash on class gaps Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 19/36] libsepol: do not crash on user gaps Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 20/36] libsepol: use correct size for initial string list Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 21/36] libsepol: do not create a string list with initial size zero Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 22/36] libsepol: split validation of datum array gaps and entries Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 23/36] libsepol: validate MLS levels Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 24/36] libsepol: validate expanded user range and level Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 25/36] libsepol: validate permission count of classes Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 26/36] libsepol: resolve log message mismatch Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 27/36] libsepol: validate avtab and avrule types Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 28/36] libsepol: validate constraint expression operators and attributes Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 29/36] libsepol: validate type of avtab type rules Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 30/36] libsepol: validate ocontexts Christian Göttsche
2021-11-09 19:04     ` James Carter
2021-11-05 15:45   ` [RFC PATCH v2 31/36] libsepol: validate genfs contexts Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 32/36] libsepol: validate permissive types Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 33/36] libsepol: validate policy properties Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 34/36] libsepol: validate categories Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 35/36] libsepol: validate fsuse types Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 36/36] libsepol: validate class default targets Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 37/40] [WIP] libsepol: export policydb_validate Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 38/40] [WIP] checkpolicy: validate generated policies Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 39/40] [CROSS-PATCH] libsepol: avoid passing NULL pointer to memcpy Christian Göttsche
2021-11-05 15:45   ` [RFC PATCH v2 40/40] [CROSS-PATCH] libsepol: do not pass NULL " Christian Göttsche
2021-11-09 18:42   ` [RFC PATCH v2 00/36] libsepol: add fuzzer for reading binary policies James Carter
2021-11-09 18:43     ` James Carter
2021-12-09 16:48   ` [PATCH v3 " Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 01/36] cifuzz: enable report-unreproducible-crashes Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 02/36] cifuzz: use the default runtime of 600 seconds Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 03/36] libsepol/fuzz: silence secilc-fuzzer Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 04/36] libsepol: add libfuzz based fuzzer for reading binary policies Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 05/36] libsepol/fuzz: limit element sizes for fuzzing Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 06/36] libsepol: use logging framework in conditional.c Christian Göttsche
2021-12-09 16:48     ` [PATCH v3 07/36] libsepol: use logging framework in ebitmap.c Christian Göttsche
2021-12-09 16:49     ` Christian Göttsche [this message]
2021-12-09 16:49     ` [PATCH v3 09/36] libsepol: use reallocarray wrapper to avoid overflows Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 10/36] libsepol: add checks for read sizes Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 11/36] libsepol: enforce avtab item limit Christian Göttsche
2021-12-15 17:39       ` James Carter
2021-12-09 16:49     ` [PATCH v3 12/36] libsepol: clean memory on conditional insertion failure Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 13/36] libsepol: reject abnormal huge sid ids Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 14/36] libsepol: reject invalid filetrans source type Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 15/36] libsepol: zero member before potential dereference Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 16/36] libsepol: use size_t for indexes in strs helpers Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 17/36] libsepol: do not underflow on short format arguments Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 18/36] libsepol: do not crash on class gaps Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 19/36] libsepol: do not crash on user gaps Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 20/36] libsepol: use correct size for initial string list Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 21/36] libsepol: do not create a string list with initial size zero Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 22/36] libsepol: split validation of datum array gaps and entries Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 23/36] libsepol: validate MLS levels Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 24/36] libsepol: validate expanded user range and level Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 25/36] libsepol: validate permission count of classes Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 26/36] libsepol: resolve log message mismatch Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 27/36] libsepol: validate avtab and avrule types Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 28/36] libsepol: validate constraint expression operators and attributes Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 29/36] libsepol: validate type of avtab type rules Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 30/36] libsepol: validate ocontexts Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 31/36] libsepol: validate genfs contexts Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 32/36] libsepol: validate permissive types Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 33/36] libsepol: validate policy properties Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 34/36] libsepol: validate categories Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 35/36] libsepol: validate fsuse types Christian Göttsche
2021-12-09 16:49     ` [PATCH v3 36/36] libsepol: validate class default targets Christian Göttsche
2021-12-15 17:41     ` [PATCH v3 00/36] libsepol: add fuzzer for reading binary policies James Carter
2021-12-17 13:59       ` James Carter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211209164928.87459-9-cgzones@googlemail.com \
    --to=cgzones@googlemail.com \
    --cc=selinux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.