lkml.org 
[lkml]   [2010]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH] af_key: fix netns ops ordering on module load/unload
    From
    On Sat, Jan 30, 2010 at 1:53 PM, Alexey Dobriyan <adobriyan@gmail.com> wrote:
    > On Fri, Jan 29, 2010 at 05:33:26PM +0100, Eric Dumazet wrote:
    >> @@ -3807,21 +3807,24 @@ static int __init ipsec_pfkey_init(void)
    >>       if (err != 0)
    >>               goto out;
    >>
    >> -     err = sock_register(&pfkey_family_ops);
    >> -     if (err != 0)
    >> -             goto out_unregister_key_proto;
    >>       err = xfrm_register_km(&pfkeyv2_mgr);
    >>       if (err != 0)
    >> -             goto out_sock_unregister;
    >> +             goto out_unregister_key_proto;
    >> +
    >>       err = register_pernet_subsys(&pfkey_net_ops);
    >>       if (err != 0)
    >>               goto out_xfrm_unregister_km;
    >> +
    >> +     err = sock_register(&pfkey_family_ops);
    >> +     if (err != 0)
    >> +             goto out_unregister_pernet;
    >>  out:
    >>       return err;
    >> +
    >> +out_unregister_pernet:
    >> +     unregister_pernet_subsys(&pfkey_net_ops);
    >>  out_xfrm_unregister_km:
    >>       xfrm_unregister_km(&pfkeyv2_mgr);
    >> -out_sock_unregister:
    >> -     sock_unregister(PF_KEY);
    >>  out_unregister_key_proto:
    >>       proto_unregister(&key_proto);
    >>       goto out;
    >
    > ACK analysis, except this is not enough.
    >
    > Here is patch which survived netns start/stop/modprobe/rmmod cycles.
    >
    >        Alexey, who still doesn't get why bug reproduces so easily for bug reporter.
    >
    > Luca, please confirm.

    Seems to work fine.

    > [PATCH] af_key: fix netns ops ordering on module load/unload
    >
    > 1. After sock_register() returns, it's possible to create sockets,
    >   even if module still not initialized fully (blame generic module code
    >   for that!)
    > 2. Consequently, pfkey_create() can be called with pfkey_net_id still not
    >   initialized which will BUG_ON in net_generic():
    >        kernel BUG at include/net/netns/generic.h:43!
    > 3. During netns shutdown, netns ops should be unregistered after
    >   key manager unregistered because key manager calls can be triggered
    >   from xfrm_user module:
    >
    >        general protection fault: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    >        pfkey_broadcast+0x111/0x210 [af_key]
    >        pfkey_send_notify+0x16a/0x300 [af_key]
    >        km_state_notify+0x41/0x70
    >        xfrm_flush_sa+0x75/0x90 [xfrm_user]
    > 4. Unregister netns ops after socket ops just in case and for symmetry.
    >
    > Reported by Luca Tettamanti.
    >
    > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>

    Tested-by: Luca Tettamanti <kronos.it@gmail.com>

    thanks,
    Luca
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-02-01 14:53    [W:0.028 / U:0.236 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site