You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libcpuid/SOURCES/libcpuid-fix-handle-leaks-i...

34 lines
1.1 KiB

diff --git a/libcpuid/rdmsr.c b/libcpuid/rdmsr.c
index 7269652..0bb29c3 100644
--- a/libcpuid/rdmsr.c
+++ b/libcpuid/rdmsr.c
@@ -96,6 +96,7 @@ struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
handle = (struct msr_driver_t*) malloc(sizeof(struct msr_driver_t));
if (!handle) {
cpuid_set_error(ERR_NO_MEM);
+ close(fd);
return NULL;
}
handle->fd = fd;
@@ -1069,8 +1070,10 @@ int msr_serialize_raw_data(struct msr_driver_t* handle, const char* filename)
/* Get cached decoded CPUID information */
id = get_cached_cpuid();
- if (id->vendor == VENDOR_UNKNOWN)
+ if (id->vendor == VENDOR_UNKNOWN) {
+ fclose(f);
return cpuid_get_error();
+ }
/* Get CPU stock speed */
if (cpu_clock == 0)
@@ -1082,7 +1085,7 @@ int msr_serialize_raw_data(struct msr_driver_t* handle, const char* filename)
case VENDOR_HYGON:
case VENDOR_AMD: msr = amd_msr; break;
case VENDOR_INTEL: msr = intel_msr; break;
- default: return cpuid_set_error(ERR_CPU_UNKN);
+ default: fclose(f); return cpuid_set_error(ERR_CPU_UNKN);
}
/* Print raw MSR values */