
On 1/26/23 15:48, Daniel P. Berrangé wrote:
On Thu, Jan 26, 2023 at 01:41:24PM +0100, Michal Privoznik wrote:
Recently, in v9.0.0-7-gb2034bb04c we've dropped initialization of @args variable. The reasoning was that eventually, all members of the variable will be set. Well, this is not correct. For instance, in remoteConnectGetAllDomainStats() the args.doms.doms_val pointer is set iff @ndoms != 0. However, regardless of that, the pointer is then passed to VIR_FREE().
Worse, the whole args is passed to xdr_remote_connect_get_all_domain_stats_args() which then calls xdr_array, which tests the (uninitialized) pointer against NULL.
Urgh, thanks for discovery this mistake.
I wonder if we should just go full paranoia and unconditionally initialize *every* '_args' variable, even in cases where we know it is redundant.
That's what I did in this patch. What we might do next is to have a syntax-check rule that would check whether _args and _ret are initialized to {0}. The difference in my testing is just a couple of instructions more (if we're concerned with performance penalty). Michal