kvm: fix memory leak on failure to read stats descriptors
Reported by Coverity as CID 1490142. Since the size is constant and the lifetime is the same as the StatsDescriptors struct, embed the struct directly instead of using a separate allocation. Suggested-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
958e1dd130
commit
21adec30f6
@ -3908,7 +3908,7 @@ exit:
|
||||
typedef struct StatsDescriptors {
|
||||
const char *ident; /* cache key, currently the StatsTarget */
|
||||
struct kvm_stats_desc *kvm_stats_desc;
|
||||
struct kvm_stats_header *kvm_stats_header;
|
||||
struct kvm_stats_header kvm_stats_header;
|
||||
QTAILQ_ENTRY(StatsDescriptors) next;
|
||||
} StatsDescriptors;
|
||||
|
||||
@ -3939,7 +3939,7 @@ static StatsDescriptors *find_stats_descriptors(StatsTarget target, int stats_fd
|
||||
descriptors = g_new0(StatsDescriptors, 1);
|
||||
|
||||
/* Read stats header */
|
||||
kvm_stats_header = g_malloc(sizeof(*kvm_stats_header));
|
||||
kvm_stats_header = &descriptors->kvm_stats_header;
|
||||
ret = read(stats_fd, kvm_stats_header, sizeof(*kvm_stats_header));
|
||||
if (ret != sizeof(*kvm_stats_header)) {
|
||||
error_setg(errp, "KVM stats: failed to read stats header: "
|
||||
@ -3964,7 +3964,6 @@ static StatsDescriptors *find_stats_descriptors(StatsTarget target, int stats_fd
|
||||
g_free(kvm_stats_desc);
|
||||
return NULL;
|
||||
}
|
||||
descriptors->kvm_stats_header = kvm_stats_header;
|
||||
descriptors->kvm_stats_desc = kvm_stats_desc;
|
||||
descriptors->ident = ident;
|
||||
QTAILQ_INSERT_TAIL(&stats_descriptors, descriptors, next);
|
||||
@ -3989,7 +3988,7 @@ static void query_stats(StatsResultList **result, StatsTarget target,
|
||||
return;
|
||||
}
|
||||
|
||||
kvm_stats_header = descriptors->kvm_stats_header;
|
||||
kvm_stats_header = &descriptors->kvm_stats_header;
|
||||
kvm_stats_desc = descriptors->kvm_stats_desc;
|
||||
size_desc = sizeof(*kvm_stats_desc) + kvm_stats_header->name_size;
|
||||
|
||||
@ -4054,7 +4053,7 @@ static void query_stats_schema(StatsSchemaList **result, StatsTarget target,
|
||||
return;
|
||||
}
|
||||
|
||||
kvm_stats_header = descriptors->kvm_stats_header;
|
||||
kvm_stats_header = &descriptors->kvm_stats_header;
|
||||
kvm_stats_desc = descriptors->kvm_stats_desc;
|
||||
size_desc = sizeof(*kvm_stats_desc) + kvm_stats_header->name_size;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user