diff --git a/scripts/null-check-free.cocci b/scripts/null-check-free.cocci
new file mode 100644
index 0000000000000000000000000000000000000000..0aab4224347df33788f0a644c58c18f09ef865da
--- /dev/null
+++ b/scripts/null-check-free.cocci
@@ -0,0 +1,14 @@
+//
+// No null check required before calling free()
+//
+
+@@
+expression E;
+@@
+(
+-if (E) { free(E); }
++free(E);
+|
+-if (E != NULL) { free(E); }
++free(E);
+)
diff --git a/src/knot/conf/conf.c b/src/knot/conf/conf.c
index d0662eb74b8d440ef2d7146c57a304600d475103..24b1c64c94f9d4c022b8ad84018942532e2e8942 100644
--- a/src/knot/conf/conf.c
+++ b/src/knot/conf/conf.c
@@ -922,9 +922,7 @@ void conf_free_log(conf_log_t *log)
 		return;
 	}
 
-	if (log->file) {
-		free(log->file);
-	}
+	free(log->file);
 
 	/* Free loglevel mapping. */
 	node *n = 0, *nxt = 0;
diff --git a/src/libknot/dname.c b/src/libknot/dname.c
index f1afed8fabf2412f58d8ef6fc615e3686d4437ce..aab5929c35418a85f929b0c10ec1faa4f683a8cf 100644
--- a/src/libknot/dname.c
+++ b/src/libknot/dname.c
@@ -1113,13 +1113,9 @@ void knot_dname_free(knot_dname_t **dname)
 		return;
 	}
 
-	if ((*dname)->name != NULL) {
-		free((*dname)->name);
-	}
+	free((*dname)->name);
 
-	if((*dname)->labels != NULL) {
-		free((*dname)->labels);
-	}
+	free((*dname)->labels);
 
 
 //	slab_free(*dname);
diff --git a/src/libknot/edns.c b/src/libknot/edns.c
index 51b7b63feab98dca9bdc335cbe2623ae72607f19..5990f70cce0d0ef39fd5fc01b5197af14a636df4 100644
--- a/src/libknot/edns.c
+++ b/src/libknot/edns.c
@@ -423,9 +423,7 @@ void knot_edns_free_options(knot_opt_rr_t *opt_rr)
 		/* Free the option data, if any. */
 		for (int i = 0; i < opt_rr->option_count; i++) {
 			knot_opt_option_t *option = &(opt_rr->options[i]);
-			if (option->data != NULL) {
-				free(option->data);
-			}
+			free(option->data);
 		}
 		free(opt_rr->options);
 	}
diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index 54c29772db7a41eceac5dce86816213f5273a570..8197b6c26674b263af124fb2b90aa6ea3c58011a 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -448,9 +448,7 @@ dbg_ns_exec_verb(
 
 			++i;
 		}
-		if (rrsets != NULL) {
-			free(rrsets);
-		}
+		free(rrsets);
 		break;
 	}
 	case KNOT_RRTYPE_RRSIG: {
@@ -2645,9 +2643,7 @@ rrsigs:
 
 		++i;
 	}
-	if (rrsets != NULL) {
-		free(rrsets);
-	}
+	free(rrsets);
 
 	/*! \todo maybe distinguish some error codes. */
 	//params->ret = (ret == 0) ? KNOT_EOK : KNOT_ERROR;
diff --git a/src/libknot/nsec3.c b/src/libknot/nsec3.c
index 65c9923a357ec12a533eb7c1113ddd1df6954773..a239951028e406aa58336d9dd85d7942b5cb91ac 100644
--- a/src/libknot/nsec3.c
+++ b/src/libknot/nsec3.c
@@ -257,7 +257,5 @@ int knot_nsec3_sha1(const knot_nsec3_params_t *params,
 
 void knot_nsec3_params_free(knot_nsec3_params_t *params)
 {
-	if (params->salt != NULL) {
-		free(params->salt);
-	}
+	free(params->salt);
 }
diff --git a/src/libknot/sign/key.c b/src/libknot/sign/key.c
index 3ddee8a447fd07933cc88e1be1328326d16a19b1..9dd940cdb6928e21b6a6ac11d7f0e1ae71745b99 100644
--- a/src/libknot/sign/key.c
+++ b/src/libknot/sign/key.c
@@ -200,8 +200,7 @@ static int key_param_string(const void *save_to, char *value)
 {
 	char **parameter = (char **)save_to;
 
-	if (*parameter)
-		free(*parameter);
+	free(*parameter);
 	*parameter = strdup(value);
 
 	return *parameter ? KNOT_EOK : KNOT_ENOMEM;
@@ -353,8 +352,7 @@ int knot_load_key_params(const char *filename, knot_key_params_t *key_params)
 		if (result != KNOT_EOK)
 			break;
 	}
-	if (buffer)
-		free(buffer);
+	free(buffer);
 
 	fclose(fp);
 	free(public_key);
@@ -424,12 +422,6 @@ int knot_copy_key_params(const knot_key_params_t *src, knot_key_params_t *dst)
 	return KNOT_EOK;
 }
 
-static void free_string_if_set(char *string)
-{
-	if (string)
-		free(string);
-}
-
 /*!
  * \brief Frees the key parameters.
  */
@@ -440,25 +432,25 @@ int knot_free_key_params(knot_key_params_t *key_params)
 	if (key_params->name)
 		knot_dname_release(key_params->name);
 
-	free_string_if_set(key_params->secret);
-
-	free_string_if_set(key_params->modulus);
-	free_string_if_set(key_params->public_exponent);
-	free_string_if_set(key_params->private_exponent);
-	free_string_if_set(key_params->prime_one);
-	free_string_if_set(key_params->prime_two);
-	free_string_if_set(key_params->exponent_one);
-	free_string_if_set(key_params->exponent_two);
-	free_string_if_set(key_params->coefficient);
-
-	free_string_if_set(key_params->prime);
-	free_string_if_set(key_params->generator);
-	free_string_if_set(key_params->subprime);
-	free_string_if_set(key_params->base);
-	free_string_if_set(key_params->private_value);
-	free_string_if_set(key_params->public_value);
-
-	free_string_if_set(key_params->private_key);
+	free(key_params->secret);
+
+	free(key_params->modulus);
+	free(key_params->public_exponent);
+	free(key_params->private_exponent);
+	free(key_params->prime_one);
+	free(key_params->prime_two);
+	free(key_params->exponent_one);
+	free(key_params->exponent_two);
+	free(key_params->coefficient);
+
+	free(key_params->prime);
+	free(key_params->generator);
+	free(key_params->subprime);
+	free(key_params->base);
+	free(key_params->private_value);
+	free(key_params->public_value);
+
+	free(key_params->private_key);
 
 	memset(key_params, '\0', sizeof(knot_key_params_t));
 
diff --git a/src/libknot/zone/zone-contents.c b/src/libknot/zone/zone-contents.c
index 4d6562d01cbf66c35186987e840b80d76dc89597..d125ac029d072a3edca1239605ea28e6e99dc506 100644
--- a/src/libknot/zone/zone-contents.c
+++ b/src/libknot/zone/zone-contents.c
@@ -643,9 +643,7 @@ dbg_zone_exec_verb(
 		char *n = knot_dname_to_str(name);
 		dbg_zone("Error while encoding hashed name %s to base32.\n", n);
 		free(n);
-		if (name_b32 != NULL) {
-			free(name_b32);
-		}
+		free(name_b32);
 		return KNOT_ECRYPTO;
 	}
 
diff --git a/src/utils/common/exec.c b/src/utils/common/exec.c
index cbc0071d0bd1c1348770b8ae1d2868d0e7f74f7f..c7f28737da9b36ad7c87c3585a2d77fa054790af 100644
--- a/src/utils/common/exec.c
+++ b/src/utils/common/exec.c
@@ -571,9 +571,7 @@ void free_sign_context(sign_context_t *ctx)
 		knot_dnssec_key_free(&ctx->dnssec_key);
 	}
 
-	if (ctx->digest) {
-		free(ctx->digest);
-	}
+	free(ctx->digest);
 
 	memset(ctx, '\0', sizeof(sign_context_t));
 }