On 5/31/23 20:50, Ján Tomko wrote:
> In virNodeDeviceGetSCSIHostCaps, there is a pattern of reusing
> a tmp value and stealing the pointer.
>
> But in two case it is not stolen. Use separate variables for them
> to avoid mixing autofree with manual free() calls.
>
> This fixes the memory leak of the "max_npiv_vports" string.
> (The other gets freed anyway because it was the last use of "tmp"
> in the function")
>
> Fixes: 8a0cb5f73ade3900546718eabe70cb064c6bd22c
> Signed-off-by: Ján Tomko <[email protected]>
> ---
> v3: fix "declaration after statement" warning
> src/conf/node_device_conf.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
> index fcee9c027c..172223225f 100644
> --- a/src/conf/node_device_conf.c
> +++ b/src/conf/node_device_conf.c
> @@ -2857,29 +2857,32 @@ virNodeDeviceGetSCSIHostCaps(virNodeDevCapSCSIHost
> *scsi_host)
> }
>
> if (virVHBAIsVportCapable(NULL, scsi_host->host)) {
> + g_autofree char *max_vports = NULL;
> + g_autofree char *vports = NULL;
> +
> scsi_host->flags |= VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS;
>
> - if (!(tmp = virVHBAGetConfig(NULL, scsi_host->host,
> + if (!(max_vports = virVHBAGetConfig(NULL, scsi_host->host,
> "max_npiv_vports"))) {
Any reason to not align this second argument?
> VIR_WARN("Failed to read max_npiv_vports for host%d",
> scsi_host->host);
> goto cleanup;
> }
>
> - if (virStrToLong_i(tmp, NULL, 10, &scsi_host->max_vports) < 0) {
> - VIR_WARN("Failed to parse value of max_npiv_vports '%s'", tmp);
> + if (virStrToLong_i(max_vports, NULL, 10, &scsi_host->max_vports) <
> 0) {
> + VIR_WARN("Failed to parse value of max_npiv_vports '%s'",
> max_vports);
> goto cleanup;
> }
>
> - if (!(tmp = virVHBAGetConfig(NULL, scsi_host->host,
> + if (!(vports = virVHBAGetConfig(NULL, scsi_host->host,
> "npiv_vports_inuse"))) {
Same question here.
> VIR_WARN("Failed to read npiv_vports_inuse for host%d",
> scsi_host->host);
> goto cleanup;
> }
>
> - if (virStrToLong_i(tmp, NULL, 10, &scsi_host->vports) < 0) {
> - VIR_WARN("Failed to parse value of npiv_vports_inuse '%s'", tmp);
> + if (virStrToLong_i(vports, NULL, 10, &scsi_host->vports) < 0) {
> + VIR_WARN("Failed to parse value of npiv_vports_inuse '%s'",
> vports);
> goto cleanup;
> }
> }
Reviewed-by: Michal Privoznik <[email protected]>
Michal