[libvirt] [PATCH] Fix up nodeinfo parsing code.
Chris Lalancette
clalance at redhat.com
Wed Mar 10 13:50:08 UTC 2010
On 03/09/2010 04:02 PM, Eric Blake wrote:
> On 03/09/2010 12:30 PM, Chris Lalancette wrote:
>> 1) Do more work at compile time instead of runtime (minor)
>> 2) Properly handle the hex digits that come from
>> /sys/devices/system/cpu/cpu*/topology/thread_siblings
>> 3) Fix up some error paths that could cause SEGV
>> 4) Used unsigned's for the cpu numbers (cpu -1 doesn't
>> make any sense)
>
> Kudos for catching some that I missed.
>
>> -static int parse_socket(int cpu)
>> +static int parse_socket(unsigned int cpu)
>> {
>> - char *path = NULL;
>> + char *path;
>> FILE *pathfp;
>> char socket_str[1024];
>> char *tmp;
>> - int socket;
>> + int socket = -1;
>>
>> - if (virAsprintf(&path, "%s/cpu%d/topology/physical_package_id",
>> - CPU_SYS_PATH, cpu) < 0) {
>> + if (virAsprintf(&path, CPU_SYS_PATH "/cpu%u/topology/physical_package_id",
>> + cpu) < 0) {
>> virReportOOMError();
>> return -1;
>> }
>> @@ -120,7 +124,8 @@ static int parse_socket(int cpu)
>> pathfp = fopen(path, "r");
>> if (pathfp == NULL) {
>> virReportSystemError(errno, _("cannot open %s"), path);
>> - goto cleanup;
>> + VIR_FREE(path);
>> + return -1;
>> }
>
> Definitely some SEGV avoidance factors.
>
>> @@ -244,6 +249,18 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo,
>>
>> closedir(cpudir);
>>
>> + /* there should always be at least one socket and one thread */
>> + if (nodeinfo->sockets == 0) {
>> + nodeReportError(conn, VIR_ERR_INTERNAL_ERROR,
>> + "%s", _("no sockets found"));
>> + return -1;
>> + }
>> + if (nodeinfo->threads == 0) {
>> + nodeReportError(conn, VIR_ERR_INTERNAL_ERROR,
>> + "%s", _("no threads found"));
>> + return -1;
>> + }
>
> I didn't see this mentioned in the commit log, but it's a good change.
>
> Overall: ACK.
Thanks, I've pushed this now.
--
Chris Lalancette
More information about the libvir-list
mailing list