[lxc-devel] [lxc/master] Fix memory leak of 'lxc_tty_state'
lifeng68 on Github
lxc-bot at linuxcontainers.org
Wed Jun 21 05:54:20 UTC 2017
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 598 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170621/5d4ce109/attachment.bin>
-------------- next part --------------
From 0e6da90bc0f455c73ebb7e0b6da519146cb9aefb Mon Sep 17 00:00:00 2001
From: Li Feng <lifeng68 at huawei.com>
Date: Wed, 21 Jun 2017 13:38:06 +0800
Subject: [PATCH] Fix memory leak of 'lxc_tty_state'
Signed-off-by: Li Feng <lifeng68 at huawei.com>
---
src/lxc/console.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/lxc/console.c b/src/lxc/console.c
index 803c64f5c..666754d27 100755
--- a/src/lxc/console.c
+++ b/src/lxc/console.c
@@ -135,6 +135,7 @@ struct lxc_tty_state *lxc_console_sigwinch_init(int srcfd, int dstfd)
if (sigprocmask(SIG_BLOCK, &mask, &ts->oldmask)) {
SYSERROR("failed to block SIGWINCH");
ts->sigfd = -1;
+ lxc_list_del(&ts->node);
return ts;
}
@@ -143,6 +144,7 @@ struct lxc_tty_state *lxc_console_sigwinch_init(int srcfd, int dstfd)
SYSERROR("failed to create signal fd");
sigprocmask(SIG_SETMASK, &ts->oldmask, NULL);
ts->sigfd = -1;
+ lxc_list_del(&ts->node);
return ts;
}
@@ -152,11 +154,12 @@ struct lxc_tty_state *lxc_console_sigwinch_init(int srcfd, int dstfd)
void lxc_console_sigwinch_fini(struct lxc_tty_state *ts)
{
- if (ts->sigfd >= 0)
+ if (ts->sigfd >= 0) {
close(ts->sigfd);
+ lxc_list_del(&ts->node);
+ sigprocmask(SIG_SETMASK, &ts->oldmask, NULL);
+ }
- lxc_list_del(&ts->node);
- sigprocmask(SIG_SETMASK, &ts->oldmask, NULL);
free(ts);
}
@@ -297,7 +300,7 @@ int lxc_setup_tios(int fd, struct termios *oldtios)
static void lxc_console_peer_proxy_free(struct lxc_console *console)
{
- if (console->tty_state && console->tty_state->sigfd != -1) {
+ if (console->tty_state) {
lxc_console_sigwinch_fini(console->tty_state);
console->tty_state = NULL;
}
@@ -750,8 +753,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
err4:
lxc_mainloop_close(&descr);
err3:
- if (ts->sigfd != -1)
- lxc_console_sigwinch_fini(ts);
+ lxc_console_sigwinch_fini(ts);
err2:
close(masterfd);
close(ttyfd);
More information about the lxc-devel
mailing list