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