mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-07-24 12:33:06 +00:00
Remove pathconf which may fall
Corosync has problem with readdir_r 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. git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2962 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
824467e602
commit
eda1e364f4
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user