mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
net: dsa: tag_8021q: avoid leaking ctx on dsa_tag_8021q_register() error path
If dsa_tag_8021q_setup() fails, for example due to the inability of the
device to install a VLAN, the tag_8021q context of the switch will leak.
Make sure it is freed on the error path.
Fixes: 328621f613
("net: dsa: tag_8021q: absorb dsa_8021q_setup into dsa_tag_8021q_{,un}register")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20221209235242.480344-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
0c87b545a2
commit
e095493091
@ -398,6 +398,7 @@ static void dsa_tag_8021q_teardown(struct dsa_switch *ds)
|
||||
int dsa_tag_8021q_register(struct dsa_switch *ds, __be16 proto)
|
||||
{
|
||||
struct dsa_8021q_context *ctx;
|
||||
int err;
|
||||
|
||||
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
|
||||
if (!ctx)
|
||||
@ -410,7 +411,15 @@ int dsa_tag_8021q_register(struct dsa_switch *ds, __be16 proto)
|
||||
|
||||
ds->tag_8021q_ctx = ctx;
|
||||
|
||||
return dsa_tag_8021q_setup(ds);
|
||||
err = dsa_tag_8021q_setup(ds);
|
||||
if (err)
|
||||
goto err_free;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free:
|
||||
kfree(ctx);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dsa_tag_8021q_register);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user