On allocation failure, dump_features() would set ret to -ENOMEM but then
return 0 anyway. As there is nothing to free in this case anyway, the
easiest fix is to simply return -ENOMEM rather than jumping to out_free
label - which can be dropped as well as this was its only use.

Fixes: f2c17e107900 ("netlink: add netlink handler for gfeatures (-k)")
Reported-by: Ivan Vecera <ivec...@redhat.com>
Signed-off-by: Michal Kubecek <mkube...@suse.cz>
---
 netlink/features.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/netlink/features.c b/netlink/features.c
index 3f1240437350..2a0899e6eb04 100644
--- a/netlink/features.c
+++ b/netlink/features.c
@@ -117,11 +117,9 @@ int dump_features(const struct nlattr *const *tb,
        ret = prepare_feature_results(tb, &results);
        if (ret < 0)
                return -EFAULT;
-
-       ret = -ENOMEM;
        feature_flags = calloc(results.count, sizeof(feature_flags[0]));
        if (!feature_flags)
-               goto out_free;
+               return -ENOMEM;
 
        /* map netdev features to legacy flags */
        for (i = 0; i < results.count; i++) {
@@ -182,7 +180,6 @@ int dump_features(const struct nlattr *const *tb,
                dump_feature(&results, NULL, NULL, i, name, "");
        }
 
-out_free:
        free(feature_flags);
        return 0;
 }
-- 
2.28.0

Reply via email to