[lvm-devel] master - multipathd: fix fd leak when iscsi device logs in

Zdenek Kabelac zkabelac at redhat.com
Thu Jul 9 08:54:29 UTC 2020


Dne 09. 07. 20 v 9:02 lixiaokeng napsal(a):
> When one iscsi device logs in and logs out several times, the
> number of fd, which points to '/dev/mapper/control', increases in
> /proc/<multipathd-pid>/fd as follows,
> [root at localhost fd]# ll | grep control

> diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
> index 7ad549c..7168369 100644
> --- a/libdm/ioctl/libdm-iface.c
> +++ b/libdm/ioctl/libdm-iface.c
> @@ -23,6 +23,7 @@
>   #include <sys/ioctl.h>
>   #include <sys/utsname.h>
>   #include <limits.h>
> +#include <pthread.h>
> 
>   #ifdef __linux__
>   #  include "libdm/misc/kdev_t.h"
> @@ -81,6 +82,7 @@ static dm_bitset_t _dm_bitset = NULL;
>   static uint32_t _dm_device_major = 0;
> 
>   static int _control_fd = -1;
> +static pthread_mutex_t _control_fd_mutex = PTHREAD_MUTEX_INITIALIZER;
>   static int _hold_control_fd_open = 0;
>   static int _version_checked = 0;
>   static int _version_ok = 1;
> @@ -404,10 +406,19 @@ static void _close_control_fd(void)
>   #ifdef DM_IOCTLS
>   static int _open_and_assign_control_fd(const char *control)
>   {
> +	pthread_mutex_lock(&_control_fd_mutex);
> +
> +	if (_control_fd != -1) {



Hi

libdm is not pthread aware/safe library.

So the fix needs to happen on libdm user-side to prevent race call of this 
function.


Zdenek




More information about the lvm-devel mailing list