[PATCH] Add lock in _g_get_unix_mount_points() around *fsent() functions

(cherry-picked from commit f43cf341511dd684a58c09e104e28c11987cbff1)
This commit is contained in:
Rozhuk Ivan 2022-06-25 18:46:08 +03:00 committed by Marco Trevisan (Treviño)
parent d1766e99e5
commit 07b062b4dc

View File

@ -1408,17 +1408,13 @@ _g_get_unix_mount_points (void)
{ {
struct fstab *fstab = NULL; struct fstab *fstab = NULL;
GUnixMountPoint *mount_point; GUnixMountPoint *mount_point;
GList *return_list; GList *return_list = NULL;
G_LOCK_DEFINE_STATIC (fsent);
#ifdef HAVE_SYS_SYSCTL_H #ifdef HAVE_SYS_SYSCTL_H
int usermnt = 0; int usermnt = 0;
struct stat sb; struct stat sb;
#endif #endif
if (!setfsent ())
return NULL;
return_list = NULL;
#ifdef HAVE_SYS_SYSCTL_H #ifdef HAVE_SYS_SYSCTL_H
#if defined(HAVE_SYSCTLBYNAME) #if defined(HAVE_SYSCTLBYNAME)
{ {
@ -1446,7 +1442,14 @@ _g_get_unix_mount_points (void)
} }
#endif #endif
#endif #endif
G_LOCK (fsent);
if (!setfsent ())
{
G_UNLOCK (fsent);
return NULL;
}
while ((fstab = getfsent ()) != NULL) while ((fstab = getfsent ()) != NULL)
{ {
gboolean is_read_only = FALSE; gboolean is_read_only = FALSE;
@ -1480,9 +1483,10 @@ _g_get_unix_mount_points (void)
return_list = g_list_prepend (return_list, mount_point); return_list = g_list_prepend (return_list, mount_point);
} }
endfsent (); endfsent ();
G_UNLOCK (fsent);
return g_list_reverse (return_list); return g_list_reverse (return_list);
} }
/* Interix {{{2 */ /* Interix {{{2 */