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 ?