tty/n_gsm.c: fix a memory leak in gsmld_open
If gsmld_attach_gsm fails, the gsm is not used anymore. tty core will not call gsmld_close to do the cleanup work. tty core just restore to the tty old ldisc. That always causes memory leak. Signed-off-by: xinhui.pan <xinhuiX.pan@intel.com> Reported-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
8368d6a2b7
Коммит
5a64096700
|
@ -2366,6 +2366,7 @@ static void gsmld_close(struct tty_struct *tty)
|
|||
static int gsmld_open(struct tty_struct *tty)
|
||||
{
|
||||
struct gsm_mux *gsm;
|
||||
int ret;
|
||||
|
||||
if (tty->ops->write == NULL)
|
||||
return -EINVAL;
|
||||
|
@ -2380,7 +2381,13 @@ static int gsmld_open(struct tty_struct *tty)
|
|||
|
||||
/* Attach the initial passive connection */
|
||||
gsm->encoding = 1;
|
||||
return gsmld_attach_gsm(tty, gsm);
|
||||
|
||||
ret = gsmld_attach_gsm(tty, gsm);
|
||||
if (ret != 0) {
|
||||
gsm_cleanup_mux(gsm);
|
||||
mux_put(gsm);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче