From: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
To: wireless-regdb@lists.infradead.org
Cc: linux-wireless@vger.kernel.org,
"Luis R. Rodriguez" <mcgrof@do-not-panic.com>
Subject: [PATCH 11/40] crda: fix intersect.c memory management
Date: Thu, 30 May 2013 19:09:00 -0700 [thread overview]
Message-ID: <1369966169-23640-12-git-send-email-mcgrof@do-not-panic.com> (raw)
In-Reply-To: <1369966169-23640-1-git-send-email-mcgrof@do-not-panic.com>
From: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
We didn't free memory in some cases, fix this and
to help with the complexity also simplify the case
where any regdom_intersect() fails by completely
failing. In such cases we need an alternative strategy
to build "world regulatory" domains.
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
---
intersect.c | 34 +++++++++++++---------------------
1 file changed, 13 insertions(+), 21 deletions(-)
diff --git a/intersect.c b/intersect.c
index 169fe1a..970f4db 100644
--- a/intersect.c
+++ b/intersect.c
@@ -24,8 +24,10 @@ int main(int argc, char **argv)
/* We intersect only when we have to rd structures ready */
reglib_for_each_country(rd, idx, argv[1]) {
- if (is_world_regdom((const char *) rd->alpha2))
+ if (is_world_regdom((const char *) rd->alpha2)) {
+ free((struct ieee80211_regdomain *) rd);
continue;
+ }
if (!prev_world) {
prev_world = (struct ieee80211_regdomain *) rd;
@@ -39,18 +41,10 @@ int main(int argc, char **argv)
world = regdom_intersect(prev_world, rd);
if (!world) {
- /* Could be something else but we'll live with this */
- r = -ENOMEM;
- if (intersected)
- fprintf(stderr, "Could not intersect world "
- "with country (%.2s)\n",
- rd->alpha2);
- else
- fprintf(stderr, "Could not intersect country (%.2s) "
- "with country (%.2s)\n",
- prev_world->alpha2,
- rd->alpha2);
- continue;
+ free(prev_world);
+ free((struct ieee80211_regdomain *) rd);
+ fprintf(stderr, "Intersection not possible\n");
+ return -ENOENT;
}
if (intersected)
@@ -71,6 +65,7 @@ int main(int argc, char **argv)
rd->n_reg_rules,
world->n_reg_rules);
intersected++;
+ free((struct ieee80211_regdomain *) rd);
}
if (!idx) {
@@ -83,28 +78,25 @@ int main(int argc, char **argv)
printf("%d regulatory domains intersected\n", intersected);
else {
world = prev_world;
+ prev_world = NULL;
printf("No intersections completed\n");
if (idx > 1) {
printf("Since more than one regulatory domain is "
"present and no intersections were possible "
"no globally allowed spectrum is possible so "
"consider enabling passive scan flags\n");
+ free(world);
return r;
}
}
+ if (prev_world)
+ free(prev_world);
+
/* Tada! */
printf("== World regulatory domain: ==\n");
print_regdom(world);
- if (!intersected) {
- free(world);
- return r;
- }
- if (intersected > 1) {
- free((struct ieee80211_regdomain *)rd);
- free(prev_world);
- }
free(world);
return r;
}
--
1.7.10.4
next prev parent reply other threads:[~2013-05-31 2:10 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-31 2:08 [PATCH 00/40] crda: reglib enhancements Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 01/40] crda: make reg_rules_intersect() style match Linux Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 02/40] crda: port over Linux is_valid_reg_rule() change bd05f28e Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 03/40] crda: remove verbose errors out of regdom_intersect() Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 04/40] crda: constify usage of struct ieee80211_regdomain Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 05/40] crda: remove unused BUG_ON() from intersect.c Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 06/40] crda: move regdom_intersect() to reglib Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 07/40] crda: fix regression when using reglib_for_each_country() Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 08/40] crda: move intersection if first attempt failed Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 09/40] crda: do not double count on reglib_for_each_country() Luis R. Rodriguez
2013-05-31 2:08 ` [PATCH 10/40] crda: annotate intersection worst case scenerio Luis R. Rodriguez
2013-05-31 2:09 ` Luis R. Rodriguez [this message]
2013-05-31 2:09 ` [PATCH 12/40] crda: explicitly munmap() on reglib_get_rd_alpha2() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 13/40] crda: explicitly close file descriptor and munmap() on failures Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 14/40] crda: separate crda_verify_db_signature() implementations Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 15/40] crda: use gcry_sexp_release() on crda_verify_db_signature() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 16/40] crda: explicitly use close() and munmap() on reglib_get_rd_alpha2() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 17/40] crda: use gcry_mpi_release() when using gcry_mpi_scan() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 18/40] crda: rename world and prev_world on intersect.c Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 19/40] crda: remove verbosity out of intersect.c Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 20/40] crda: rename regdom_intersect() to reglib_intersect_rds() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 21/40] crda: rename crda_get_file_ptr() to reglib_get_file_ptr() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 22/40] crda: rename crda_verify_db_signature() to reglib_verify_db_signature() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 23/40] crda: rename print_regdom() to reglib_print_regdom() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 24/40] crda: add regdb_dfs_regions Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 25/40] crda: make print-regdom use internal flags Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 26/40] crda: move reg print helpers to reglib Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 27/40] crda: rename is_world_regdom() to reglib_is_world_regdom() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 28/40] crda: rename isalpha_upper() to reglib_isalpha_upper() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 29/40] crda: rename is_alpha2() to reglib_is_alpha2() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 30/40] crda: rename is_valid_regdom() to reglib_is_valid_regdom() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 31/40] crda: rename max() to reglib_max() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 32/40] crda: rename min() to reglib_min() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 33/40] crda: fix spacing on reglib_for_each_country() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 34/40] crda: clarify intersect.c only computes an intersection Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 35/40] crda: separate intersecting a full db into a helper Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 36/40] crda: move reglib_intersect_regdb() to reglib Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 37/40] crda: move regdbprint to its own helper Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 38/40] crda: add reglib regdb context helpers: reglib_(malloc|free)_regdb_ctx() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 39/40] crda: pass struct reglib_regdb_ctx to country2rd() Luis R. Rodriguez
2013-05-31 2:09 ` [PATCH 40/40] crda: make reglib_for_each_country() use the reglib context Luis R. Rodriguez
2013-06-30 23:08 ` [PATCH 00/40] crda: reglib enhancements Luis R. Rodriguez
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=1369966169-23640-12-git-send-email-mcgrof@do-not-panic.com \
--to=mcgrof@do-not-panic.com \
--cc=linux-wireless@vger.kernel.org \
--cc=wireless-regdb@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).