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:
parent
d2eb5e911e
commit
29805da6d1
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue