]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
uuid: fix possible non-terminated string
authorStefan Berger <stefanb@linux.vnet.ibm.com>
Fri, 4 May 2012 17:22:22 +0000 (13:22 -0400)
committerStefan Berger <stefanb@us.ibm.com>
Fri, 4 May 2012 17:22:22 +0000 (13:22 -0400)
Error: STRING_NULL:
/libvirt/src/util/uuid.c:273:
string_null_argument: Function "getDMISystemUUID" does not terminate string "*dmiuuid".
/libvirt/src/util/uuid.c:241:
string_null_argument: Function "saferead" fills array "*uuid" with a non-terminated string.
/libvirt/src/util/util.c:101:
string_null_argument: Function "read" fills array "*buf" with a non-terminated string.
/libvirt/src/util/uuid.c:274:
string_null: Passing unterminated string "dmiuuid" to a function expecting a null-terminated string.
/libvirt/src/util/uuid.c:138:
var_assign_parm: Assigning: "cur" = "uuidstr". They now point to the same thing.
/libvirt/src/util/uuid.c:164:
string_null_sink_loop: Searching for null termination in an unterminated array "cur".

src/util/uuid.c

index d9ff34896e0bff1d2c2e487c5705352b0e4607ed..a0ceb3e9be7921e1edf5a7011c2d3dd871e3d90a 100644 (file)
@@ -238,7 +238,8 @@ getDMISystemUUID(char *uuid, int len)
     while (paths[i]) {
         int fd = open(paths[i], O_RDONLY);
         if (fd >= 0) {
-            if (saferead(fd, uuid, len) == len) {
+            if (saferead(fd, uuid, len - 1) == len - 1) {
+                uuid[len - 1] = '\0';
                 VIR_FORCE_CLOSE(fd);
                 return 0;
             }
@@ -270,7 +271,7 @@ virSetHostUUIDStr(const char *uuid)
 
     if (!uuid) {
         memset(dmiuuid, 0, sizeof(dmiuuid));
-        if (!getDMISystemUUID(dmiuuid, sizeof(dmiuuid) - 1)) {
+        if (!getDMISystemUUID(dmiuuid, sizeof(dmiuuid))) {
             if (!virUUIDParse(dmiuuid, host_uuid))
                 return 0;
         }