The virSocketAddrFormatWithPrefix() function has a bug where the 'network' variable is left uninitialized when masked=false. This occurs because the function only assigns to 'network' inside the masked=true conditional branch.
When masked=false, the caller wants to format the original address with a prefix notation (e.g., "1.2.3.4/24") without applying the network mask. However, the code was only initializing 'network' when masking was requested, causing the subsequent virSocketAddrFormat(&network) call to operate on uninitialized data. Fix this by adding an else branch that copies the original address to 'network' when masking is not requested. This ensures 'network' is properly initialized in both code paths. Signed-off-by: Julio Faracco <[email protected]> --- src/util/virsocketaddr.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c index f53768878e..80ee3b4c51 100644 --- a/src/util/virsocketaddr.c +++ b/src/util/virsocketaddr.c @@ -549,10 +549,14 @@ virSocketAddrFormatWithPrefix(virSocketAddr *addr, return NULL; } - if (masked && virSocketAddrMaskByPrefix(addr, prefix, &network) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Failure to mask address")); - return NULL; + if (masked) { + if (virSocketAddrMaskByPrefix(addr, prefix, &network) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failure to mask address")); + return NULL; + } + } else { + network = *addr; } netstr = virSocketAddrFormat(&network); -- 2.52.0
