rtnl_unlock();
        if (ret < 0)
                goto err_cleanup;
-       reply_len = ops->reply_size(req_info, reply_data);
+       ret = ops->reply_size(req_info, reply_data);
        if (ret < 0)
                goto err_cleanup;
+       reply_len = ret;
        ret = -ENOMEM;
        rskb = ethnl_reply_init(reply_len, req_info->dev, ops->reply_cmd,
                                ops->hdr_attr, info, &reply_payload);
        ret = ops->prepare_data(req_info, reply_data, NULL);
        if (ret < 0)
                goto err_cleanup;
-       reply_len = ops->reply_size(req_info, reply_data);
+       ret = ops->reply_size(req_info, reply_data);
        if (ret < 0)
                goto err_cleanup;
+       reply_len = ret;
        ret = -ENOMEM;
        skb = genlmsg_new(reply_len, GFP_KERNEL);
        if (!skb)