diff options
| author | Ingo Molnar <mingo@kernel.org> | 2023-10-07 11:32:24 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2023-10-07 11:32:24 +0200 |
| commit | 8db30574db25fa20cdcfa03e374edc3f8b8dc301 (patch) | |
| tree | 0b54686593694b68fb0537197eaa4bec7a44985d /drivers/net/ethernet/microchip/vcap/vcap_api.c | |
| parent | d4d6596b43868a1e05fe5b047e73c3aff96444c6 (diff) | |
| parent | 9e0bc36ab07c550d791bf17feeb479f1dfc42d89 (diff) | |
| download | linux-next-8db30574db25fa20cdcfa03e374edc3f8b8dc301.tar.gz linux-next-8db30574db25fa20cdcfa03e374edc3f8b8dc301.zip | |
Merge branch 'sched/urgent' into sched/core, to pick up fixes and refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/microchip/vcap/vcap_api.c')
| -rw-r--r-- | drivers/net/ethernet/microchip/vcap/vcap_api.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/ethernet/microchip/vcap/vcap_api.c b/drivers/net/ethernet/microchip/vcap/vcap_api.c index 300fe1a93dce..ef980e4e5bc2 100644 --- a/drivers/net/ethernet/microchip/vcap/vcap_api.c +++ b/drivers/net/ethernet/microchip/vcap/vcap_api.c @@ -1021,18 +1021,32 @@ static struct vcap_rule_internal *vcap_dup_rule(struct vcap_rule_internal *ri, list_for_each_entry(ckf, &ri->data.keyfields, ctrl.list) { newckf = kmemdup(ckf, sizeof(*newckf), GFP_KERNEL); if (!newckf) - return ERR_PTR(-ENOMEM); + goto err; list_add_tail(&newckf->ctrl.list, &duprule->data.keyfields); } list_for_each_entry(caf, &ri->data.actionfields, ctrl.list) { newcaf = kmemdup(caf, sizeof(*newcaf), GFP_KERNEL); if (!newcaf) - return ERR_PTR(-ENOMEM); + goto err; list_add_tail(&newcaf->ctrl.list, &duprule->data.actionfields); } return duprule; + +err: + list_for_each_entry_safe(ckf, newckf, &duprule->data.keyfields, ctrl.list) { + list_del(&ckf->ctrl.list); + kfree(ckf); + } + + list_for_each_entry_safe(caf, newcaf, &duprule->data.actionfields, ctrl.list) { + list_del(&caf->ctrl.list); + kfree(caf); + } + + kfree(duprule); + return ERR_PTR(-ENOMEM); } static void vcap_apply_width(u8 *dst, int width, int bytes) |
