• Pavel Skripkin's avatar
    net: caif: fix memory leak in ldisc_open · 58af3d3d
    Pavel Skripkin authored
    Syzbot reported memory leak in tty_init_dev().
    The problem was in unputted tty in ldisc_open()
    
    static int ldisc_open(struct tty_struct *tty)
    {
    ...
    	ser->tty = tty_kref_get(tty);
    ...
    	result = register_netdevice(dev);
    	if (result) {
    		rtnl_unlock();
    		free_netdev(dev);
    		return -ENODEV;
    	}
    ...
    }
    
    Ser pointer is netdev private_data, so after free_netdev()
    this pointer goes away with unputted tty reference. So, fix
    it by adding tty_kref_put() before freeing netdev.
    
    Reported-and-tested-by: syzbot+f303e045423e617d2cad@syzkaller.appspotmail.com
    Signed-off-by: default avatarPavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    58af3d3d
caif_serial.c 10.3 KB