net: microchip: sparx5: Fix error handling in vcap_show_admin()
If vcap_dup_rule() fails that leads to an error pointer dereference side the call to vcap_free_rule(). Also it only returns an error if the very last call to vcap_read_rule() fails and it returns success for other errors. I've changed it to just stop printing after the first error and return an error code. Fixes: 3a7921560d2f ("net: microchip: sparx5: Add VCAP rule debugFS support for the VCAP API") Signed-off-by: Dan Carpenter <error27@gmail.com> Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com> Link: https://lore.kernel.org/r/Y4XUUx9kzurBN+BV@kili Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
e5214f363d
commit
682f560b8a
@ -639,17 +639,24 @@ static int vcap_show_admin(struct vcap_control *vctrl,
|
||||
mutex_lock(&admin->lock);
|
||||
list_for_each_entry(elem, &admin->rules, list) {
|
||||
ri = vcap_dup_rule(elem);
|
||||
if (IS_ERR(ri))
|
||||
goto free_rule;
|
||||
if (IS_ERR(ri)) {
|
||||
ret = PTR_ERR(ri);
|
||||
goto err_unlock;
|
||||
}
|
||||
/* Read data from VCAP */
|
||||
ret = vcap_read_rule(ri);
|
||||
if (ret)
|
||||
goto free_rule;
|
||||
goto err_free_rule;
|
||||
out->prf(out->dst, "\n");
|
||||
vcap_show_admin_rule(vctrl, admin, out, ri);
|
||||
free_rule:
|
||||
vcap_free_rule((struct vcap_rule *)ri);
|
||||
}
|
||||
mutex_unlock(&admin->lock);
|
||||
return 0;
|
||||
|
||||
err_free_rule:
|
||||
vcap_free_rule((struct vcap_rule *)ri);
|
||||
err_unlock:
|
||||
mutex_unlock(&admin->lock);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user