|
@@ -146,6 +146,9 @@ static void xfrm_hash_resize(struct work_struct *work)
|
|
|
spin_unlock_bh(&net->xfrm.xfrm_state_lock);
|
|
|
|
|
|
osize = (ohashmask + 1) * sizeof(struct hlist_head);
|
|
|
+
|
|
|
+ synchronize_rcu();
|
|
|
+
|
|
|
xfrm_hash_free(odst, osize);
|
|
|
xfrm_hash_free(osrc, osize);
|
|
|
xfrm_hash_free(ospi, osize);
|
|
@@ -369,6 +372,8 @@ static void xfrm_state_gc_task(struct work_struct *work)
|
|
|
hlist_move_list(&net->xfrm.state_gc_list, &gc_list);
|
|
|
spin_unlock_bh(&xfrm_state_gc_lock);
|
|
|
|
|
|
+ synchronize_rcu();
|
|
|
+
|
|
|
hlist_for_each_entry_safe(x, tmp, &gc_list, gclist)
|
|
|
xfrm_state_gc_destroy(x);
|
|
|
}
|