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:
		
							parent
							
								
									8368d6a2b7
								
							
						
					
					
						commit
						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; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user