On Mon, 2016-02-01 at 18:22 +0800, Xin Long wrote:
> But there may be an issue in __ip_do_redirect():
> } else {
> if (fib_lookup(net, fl4, &res, 0) == 0) {
> struct fib_nh *nh = &FIB_RES_NH(res);
>
> update_or_create_fnhe(nh, fl4->daddr, new_gw,
> 0, 0);
> }
>
> Which is not running in rcu_read_lock(), it may update a fnhe that
> has been freed.
>
> So fix it by adding rcu_read_lock() just like other parts.
But the whole __ip_do_redirect() needs to be called from rcu_read_lock()
already.
No need to add another rcu_read_lock() around fib_lookup()
How did you come doing this patch ? Any particular stack dump or
something ?