
Kaitlin Rupert wrote:
@@ -81,10 +81,21 @@ static CMPIStatus set_method_properties(
CMPIStatus get_migration_caps(const CMPIObjectPath *ref, CMPIInstance **_inst, - const CMPIBroker *broker) + const CMPIBroker *broker, + bool is_get_inst) { CMPIInstance *inst; CMPIStatus s;
Please initialize the Status s to become absolutely sure, that a valid status is returned.
+ virConnectPtr conn = NULL; + + conn = connect_by_classname(broker, CLASSNAME(ref), &s); + if (conn == NULL) { + if (is_get_inst) + cu_statusf(broker, &s, + CMPI_RC_ERR_NOT_FOUND, + "No such instance"); + goto out; + }
inst = get_typed_instance(broker, CLASSNAME(ref),
As the connection is established at this point in time and through all the other code we use pfx_from_conn(conn) in that case, it might be good to also use this here instead of CLASSNAME(ref). But that's more a convenience thing.
static CMPIStatus return_vsmc(const CMPIObjectPath *ref, const CMPIResult *results, - bool name_only) + bool name_only, + bool is_get_inst) { CMPIInstance *inst;
This is causing the reproducible seg fault on my system. Please initialize inst = NULL. In the case of a Xen request on a KVM only system this uninitialized inst is disorienting the check for inst ==NULL and afterwards seg faulting the return instance functions - as inst is only containing garbage.
CMPIStatus s;
- s = get_migration_caps(ref, &inst, _BROKER); - - if (s.rc == CMPI_RC_OK) { - if (name_only) - cu_return_instance_name(results, inst); - else - CMReturnInstance(results, inst); - } - + s = get_migration_caps(ref, &inst, _BROKER, is_get_inst); + if ((s.rc != CMPI_RC_OK) || (inst == NULL)) + goto out; + + if (name_only) + cu_return_instance_name(results, inst); + else + CMReturnInstance(results, inst); + + out: return s; }
-- Regards Heidi Eckhart Software Engineer IBM Linux Technology Center - Open Hypervisor