• James Chapman's avatar
    ppp: fix segfaults introduced by netdev_priv changes · 739840d5
    James Chapman authored
    This patch fixes a segfault in ppp_shutdown_interface() and
    ppp_destroy_interface() when a PPP connection is closed. I bisected
    the problem to the following commit:
    
      commit c8019bf3
      Author: Wang Chen <wangchen@cn.fujitsu.com>
      Date:   Thu Nov 20 04:24:17 2008 -0800
    
        netdevice ppp: Convert directly reference of netdev->priv
    
        1. Use netdev_priv(dev) to replace dev->priv.
        2. Alloc netdev's private data by alloc_netdev().
    Signed-off-by: default avatarWang Chen <wangchen@cn.fujitsu.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    
    The original ppp_generic code treated the netdev and struct ppp as
    independent data structures which were freed separately. In moving the
    ppp struct into the netdev, it is now possible for the private data to
    be freed before the call to ppp_shutdown_interface(), which is bad.
    
    The kfree(ppp) in ppp_destroy_interface() is also wrong; presumably
    ppp hasn't worked since the above commit.
    
    The following patch fixes both problems.
    Signed-off-by: default avatarJames Chapman <jchapman@katalix.com>
    Reviewed-by: default avatarWang Chen <wangchen@cn.fujitsu.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    739840d5
ppp_generic.c 66.3 KB