gbproxy: Add gbprox_clear_patch_filter() (Coverity)

Add a separate function to clear the IMSI filter to be used instead of
gbprox_set_patch_filter(cfg, NULL, ...). Albeit it fixes a Coverity
issue (Unchecked return value), it is a false positive, since the
return value is always 0 in these cases. Nevertheless it is more
obvious what happens when an explicit clear function is called. Using
NULL as filter argument of gbprox_set_patch_filter still clears the
filter.

Fixes: Coverity CID 1231255
Sponsored-by: On-Waves ehf
This commit is contained in:
Jacob Erlbeck 2014-08-14 08:57:04 +02:00 committed by Holger Hans Peter Freyther
parent d2eb5e911e
commit 29805da6d1
4 changed files with 18 additions and 6 deletions

View File

@ -115,6 +115,7 @@ void gbprox_reset(struct gbproxy_config *cfg);
int gbprox_set_patch_filter(struct gbproxy_config *cfg, const char *filter, int gbprox_set_patch_filter(struct gbproxy_config *cfg, const char *filter,
const char **err_msg); const char **err_msg);
void gbprox_clear_patch_filter(struct gbproxy_config *cfg);
void gbprox_delete_tlli(struct gbproxy_peer *peer, void gbprox_delete_tlli(struct gbproxy_peer *peer,
struct gbproxy_tlli_info *tlli_info); struct gbproxy_tlli_info *tlli_info);

View File

@ -481,16 +481,21 @@ static void gbprox_delete_tllis(struct gbproxy_peer *peer)
OSMO_ASSERT(llist_empty(&state->enabled_tllis)); OSMO_ASSERT(llist_empty(&state->enabled_tllis));
} }
void gbprox_clear_patch_filter(struct gbproxy_config *cfg)
{
if (cfg->check_imsi) {
regfree(&cfg->imsi_re_comp);
cfg->check_imsi = 0;
}
}
int gbprox_set_patch_filter(struct gbproxy_config *cfg, const char *filter, int gbprox_set_patch_filter(struct gbproxy_config *cfg, const char *filter,
const char **err_msg) const char **err_msg)
{ {
static char err_buf[300]; static char err_buf[300];
int rc; int rc;
if (cfg->check_imsi) { gbprox_clear_patch_filter(cfg);
regfree(&cfg->imsi_re_comp);
cfg->check_imsi = 0;
}
if (!filter) if (!filter)
return 0; return 0;

View File

@ -193,7 +193,7 @@ static int set_core_apn(struct vty *vty, const char *apn, const char *filter)
talloc_free(g_cfg->core_apn); talloc_free(g_cfg->core_apn);
g_cfg->core_apn = NULL; g_cfg->core_apn = NULL;
g_cfg->core_apn_size = 0; g_cfg->core_apn_size = 0;
gbprox_set_patch_filter(g_cfg, NULL, NULL); gbprox_clear_patch_filter(g_cfg);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -206,7 +206,7 @@ static int set_core_apn(struct vty *vty, const char *apn, const char *filter)
} }
if (!filter) { if (!filter) {
gbprox_set_patch_filter(g_cfg, NULL, NULL); gbprox_clear_patch_filter(g_cfg);
} else if (gbprox_set_patch_filter(g_cfg, filter, &err_msg) != 0) { } else if (gbprox_set_patch_filter(g_cfg, filter, &err_msg) != 0) {
vty_out(vty, "Match expression invalid: %s%s", vty_out(vty, "Match expression invalid: %s%s",
err_msg, VTY_NEWLINE); err_msg, VTY_NEWLINE);

View File

@ -1571,6 +1571,12 @@ static void test_gbproxy_imsi_matching(void)
OSMO_ASSERT(gbprox_set_patch_filter(&cfg, NULL, &err_msg) == 0); OSMO_ASSERT(gbprox_set_patch_filter(&cfg, NULL, &err_msg) == 0);
OSMO_ASSERT(cfg.check_imsi == 0); OSMO_ASSERT(cfg.check_imsi == 0);
OSMO_ASSERT(gbprox_set_patch_filter(&cfg, filter_re2, &err_msg) == 0);
OSMO_ASSERT(cfg.check_imsi == 1);
gbprox_clear_patch_filter(&cfg);
OSMO_ASSERT(cfg.check_imsi == 0);
peer = gbproxy_peer_alloc(&cfg, 20); peer = gbproxy_peer_alloc(&cfg, 20);
OSMO_ASSERT(gbprox_set_patch_filter(&cfg, filter_re2, &err_msg) == 0); OSMO_ASSERT(gbprox_set_patch_filter(&cfg, filter_re2, &err_msg) == 0);