Skip to content

Commit b150f73

Browse files
Fix several bugs during configuration.
- Check result of `tfw_cfgop_sg_copy_sched_arg`. - dealloc resources if `tfw_sock_srv_init` fails.
1 parent cacbf78 commit b150f73

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

fw/sock_srv.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,7 @@ static TfwCfgSrvGroup *
10181018
__tfw_cfgop_new_sg_cfg(const char *name, unsigned int len)
10191019
{
10201020
TfwCfgSrvGroup *sg_cfg = kmem_cache_alloc(tfw_sg_cfg_cache, GFP_KERNEL);
1021+
10211022
if (!sg_cfg)
10221023
return NULL;
10231024

@@ -1842,11 +1843,12 @@ static int
18421843
tfw_cfgop_in_sched(TfwCfgSpec *cs, TfwCfgEntry *ce)
18431844
{
18441845
if (TFW_CFGOP_HAS_DFLT(ce, sched)) {
1845-
tfw_cfg_sg->parsed_sg->sched = tfw_cfg_sg_opts->parsed_sg->sched;
1846+
tfw_cfg_sg->parsed_sg->sched =
1847+
tfw_cfg_sg_opts->parsed_sg->sched;
18461848
tfw_cfg_sg->sched_flags = tfw_cfg_sg_opts->sched_flags;
1847-
tfw_cfgop_sg_copy_sched_arg(&tfw_cfg_sg->sched_arg,
1848-
tfw_cfg_sg_opts->sched_arg);
1849-
return 0;
1849+
1850+
return tfw_cfgop_sg_copy_sched_arg(&tfw_cfg_sg->sched_arg,
1851+
tfw_cfg_sg_opts->sched_arg);
18501852
}
18511853
return tfw_cfgop_sched(cs, ce, &tfw_cfg_sg->parsed_sg->sched,
18521854
&tfw_cfg_sg->sched_arg,
@@ -1979,8 +1981,8 @@ tfw_sock_srv_cfgclean(void)
19791981
static int
19801982
tfw_sock_srv_cfgend(void)
19811983
{
1982-
int r;
19831984
TfwCfgSrvGroup *sg_cfg;
1985+
int r;
19841986

19851987
/* Check health monitor existence for configured server groups. */
19861988
list_for_each_entry(sg_cfg, &sg_cfg_list, list)
@@ -2002,13 +2004,17 @@ tfw_sock_srv_cfgend(void)
20022004
/* Options for implicit group are not filled, use current defaults. */
20032005
tfw_cfgop_sg_copy_opts(tfw_cfg_sg_def->parsed_sg,
20042006
tfw_cfg_sg_opts->parsed_sg);
2005-
tfw_cfgop_sg_copy_sched_arg(&tfw_cfg_sg_def->sched_arg,
2006-
tfw_cfg_sg_opts->sched_arg);
2007+
2008+
r = tfw_cfgop_sg_copy_sched_arg(&tfw_cfg_sg_def->sched_arg,
2009+
tfw_cfg_sg_opts->sched_arg);
2010+
if (unlikely(r))
2011+
return r;
20072012
tfw_cfg_sg_def->parsed_sg->sched = tfw_cfg_sg_opts->parsed_sg->sched;
20082013
tfw_cfg_sg_def->nip_flags = tfw_cfg_sg_opts->nip_flags;
20092014
tfw_cfg_sg_def->sched_flags = tfw_cfg_sg_opts->sched_flags;
20102015

2011-
if ((r = tfw_cfgop_setup_srv_group(tfw_cfg_sg_def)))
2016+
r = tfw_cfgop_setup_srv_group(tfw_cfg_sg_def);
2017+
if (unlikely(r))
20122018
return r;
20132019
tfw_cfg_sg_def = NULL;
20142020

@@ -2463,8 +2469,10 @@ tfw_sock_srv_init(void)
24632469

24642470
tfw_sg_cfg_cache = kmem_cache_create("tfw_sg_cfg_cache",
24652471
sizeof(TfwCfgSrvGroup), 0, 0, NULL);
2466-
if (!tfw_sg_cfg_cache)
2472+
if (!tfw_sg_cfg_cache) {
2473+
kmem_cache_destroy(tfw_srv_conn_cache);
24672474
return -ENOMEM;
2475+
}
24682476

24692477
tfw_mod_register(&tfw_sock_srv_mod);
24702478

0 commit comments

Comments
 (0)