Corosync has problem with readdir_r and if pathconf function fails.

Main problem is hidden in calling pathconf (internally calls statfs)
which may fail. After this fail, newly allocated memory for readdir_r
was smaller than expected and memory was overwritten by readdir_r.

Patch removes calling of pathconf and rather use NAME_MAX constant which
is always large enough for all file systems.

Also return value of malloc SHOULD be checked.

Regards,
  Honza
diff --git a/trunk/exec/coroparse.c b/trunk/exec/coroparse.c
index f3a26ee..677c5c0 100644
--- a/trunk/exec/coroparse.c
+++ b/trunk/exec/coroparse.c
@@ -278,9 +278,12 @@ static int read_uidgid_files_into_objdb(
        if (dp == NULL)
                return 0;
 
-       len = offsetof(struct dirent, d_name) +
-                     pathconf(dirname, _PC_NAME_MAX) + 1;
+       len = offsetof(struct dirent, d_name) + NAME_MAX + 1;
+
        entry = malloc(len);
+       if (entry == NULL) {
+               return 0;
+       }
 
        for (return_code = readdir_r(dp, entry, &dirent);
                dirent != NULL && return_code == 0;
@@ -331,9 +334,12 @@ static int read_service_files_into_objdb(
        if (dp == NULL)
                return 0;
 
-       len = offsetof(struct dirent, d_name) +
-                     pathconf(dirname, _PC_NAME_MAX) + 1;
+       len = offsetof(struct dirent, d_name) + NAME_MAX + 1;
+
        entry = malloc(len);
+       if (entry == NULL) {
+               return 0;
+       }
 
        for (return_code = readdir_r(dp, entry, &dirent);
                dirent != NULL && return_code == 0;
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to