diff --git a/components/desktop/mate/mate-control-center/patches/04-passwd-pty.patch b/components/desktop/mate/mate-control-center/patches/04-passwd-pty.patch
index 0bd5b0ecffe..c28646da44f 100644
--- a/components/desktop/mate/mate-control-center/patches/04-passwd-pty.patch
+++ b/components/desktop/mate/mate-control-center/patches/04-passwd-pty.patch
@@ -1,5 +1,5 @@
 --- mate-control-center-1.20.3/capplets/about-me/mate-about-me-password.c.~1~	2018-05-19 15:55:23.000000000 +0000
-+++ mate-control-center-1.20.3/capplets/about-me/mate-about-me-password.c	2018-11-10 07:32:06.233652988 +0000
++++ mate-control-center-1.20.3/capplets/about-me/mate-about-me-password.c	2018-11-10 08:59:36.935195423 +0000
 @@ -27,6 +27,11 @@
  #  include <config.h>
  #endif
@@ -29,21 +29,13 @@
  
  #if __sun
  #include <sys/types.h>
-@@ -67,6 +82,7 @@
- 
- 	/* Communication with the passwd program */
- 	GPid backend_pid;
-+	int pty_m;
- 
- 	GIOChannel *backend_stdin;
- 	GIOChannel *backend_stdout;
-@@ -170,85 +186,116 @@
+@@ -170,85 +185,123 @@
  spawn_passwd (PasswordDialog *pdialog, GError **error)
  {
  	gchar	*argv[2];
 -	gchar	*envp[1];
 -	gint	my_stdin, my_stdout, my_stderr;
-+	int	pid;
++	int	pid, pty_m;
 +	char	slave_name[PTY_MAX_NAME];
 +	char	*name;
  
@@ -75,13 +67,14 @@
 -		/* An error occurred */
 -		free_passwd_resources (pdialog);
 -
-+	pdialog->pty_m = open(PTMX, O_RDWR|O_NOCTTY);
-+	if (pdialog->pty_m > 0) {
-+		name = ptsname(pdialog->pty_m);
++	pty_m = open(PTMX, O_RDWR|O_NOCTTY);
++	if (pty_m > 0) {
++		name = ptsname(pty_m);
 +		if (name && (strlen(name) < PTY_MAX_NAME)) {
 +			strncpy(slave_name, name, PTY_MAX_NAME);
 +		} else {
 +			fprintf(stderr, "Couldn't get slave_name of pty\n");
++			close(pty_m);
 +			return FALSE;
 +		}
 +	} else {
@@ -101,8 +94,9 @@
 -		/* Clean up */
 -		stop_passwd (pdialog);
 -
-+	if (grantpt(pdialog->pty_m) < 0) {
++	if (grantpt(pty_m) < 0) {
 +		fprintf(stderr, "Couldn't set permission on slave device: %s\n", strerror(errno));
++		close(pty_m);
  		return FALSE;
  	}
  
@@ -119,8 +113,9 @@
 -
 -		/* Clean up */
 -		stop_passwd (pdialog);
-+	if (unlockpt(pdialog->pty_m) < 0) {
++	if (unlockpt(pty_m) < 0) {
 +		fprintf(stderr, "Couldn't unlock slave device: %s\n", strerror(errno));
++		close(pty_m);
  		return FALSE;
  	}
  
@@ -136,8 +131,8 @@
 +	if (pid == 0) {
 +		/* Child */
 +		int pty_s;
-+
 +		
++		close(pty_m);
 +		if (setsid() < 0) {
 +			fprintf(stderr, "Couldn't create new process group: %s\n", strerror(errno));
 +			return FALSE;
@@ -176,10 +171,14 @@
 +		close(pty_s);
 +		return FALSE;
 +	} else if (pid > 0) {
-+
+ 
+-	return TRUE;
 +		/* Open IO Channels */
-+		pdialog->backend_stdin = g_io_channel_unix_new (pdialog->pty_m);
-+		pdialog->backend_stdout = g_io_channel_unix_new (pdialog->pty_m);
++		pdialog->backend_stdin = g_io_channel_unix_new (pty_m);
++		/* g_io_channel_shutdown(pdialog->backend_stdin) will close associated file descriptor (pty_m),
++		   but this will generate warning on g_io_channel_shutdown(pdialog->backend_stdout).
++		   To avoid it, dup() file descriptor */
++		pdialog->backend_stdout = g_io_channel_unix_new (dup(pty_m));
 +		pdialog->backend_pid = pid;
 +
 +		/* Set raw encoding */
@@ -193,8 +192,7 @@
 +			stop_passwd (pdialog);
 +			return FALSE;
 +		}
- 
--	return TRUE;
++
 +		/* Turn off buffering */
 +		g_io_channel_set_buffered (pdialog->backend_stdin, FALSE);
 +		g_io_channel_set_buffered (pdialog->backend_stdout, FALSE);
@@ -213,23 +211,13 @@
 +	} else {
 +		/* Error */
 +		fprintf(stderr, "Couldn't fork: %s\n", strerror(errno));
++		close(pty_m);
 +		return FALSE;
 +	}
  }
  
  /* Stop passwd backend */
-@@ -316,6 +363,10 @@
- 		pdialog->backend_stdout = NULL;
- 	}
- 
-+	if (pdialog->pty_m != -1) {
-+		close(pdialog->pty_m);
-+	}
-+
- 	/* Remove IO watcher */
- 	if (pdialog->backend_stdout_watch_id != 0) {
- 
-@@ -822,7 +873,7 @@
+@@ -822,7 +875,7 @@
  
  		/* translators: Unable to launch <program>: <error message> */
  		details = g_strdup_printf (_("Unable to launch %s: %s"),
@@ -238,13 +226,3 @@
  
  		passdlg_error_dialog (GTK_WINDOW (parent),
  				      _("Unable to launch backend"),
-@@ -1030,6 +1081,9 @@
- 	/* Initialize backend_pid. -1 means the backend is not running */
- 	pdialog->backend_pid = -1;
- 
-+	/* Initialize pty master fd */
-+	pdialog->pty_m = -1;
-+
- 	/* Initialize IO Channels */
- 	pdialog->backend_stdin = NULL;
- 	pdialog->backend_stdout = NULL;