|
@@ -2063,8 +2063,11 @@ xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir,
|
|
|
if (num_xfrms <= 0)
|
|
if (num_xfrms <= 0)
|
|
|
goto make_dummy_bundle;
|
|
goto make_dummy_bundle;
|
|
|
|
|
|
|
|
|
|
+ local_bh_disable();
|
|
|
xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family,
|
|
xdst = xfrm_resolve_and_create_bundle(pols, num_pols, fl, family,
|
|
|
- xflo->dst_orig);
|
|
|
|
|
|
|
+ xflo->dst_orig);
|
|
|
|
|
+ local_bh_enable();
|
|
|
|
|
+
|
|
|
if (IS_ERR(xdst)) {
|
|
if (IS_ERR(xdst)) {
|
|
|
err = PTR_ERR(xdst);
|
|
err = PTR_ERR(xdst);
|
|
|
if (err != -EAGAIN)
|
|
if (err != -EAGAIN)
|
|
@@ -2151,9 +2154,12 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
|
|
|
goto no_transform;
|
|
goto no_transform;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ local_bh_disable();
|
|
|
xdst = xfrm_resolve_and_create_bundle(
|
|
xdst = xfrm_resolve_and_create_bundle(
|
|
|
pols, num_pols, fl,
|
|
pols, num_pols, fl,
|
|
|
family, dst_orig);
|
|
family, dst_orig);
|
|
|
|
|
+ local_bh_enable();
|
|
|
|
|
+
|
|
|
if (IS_ERR(xdst)) {
|
|
if (IS_ERR(xdst)) {
|
|
|
xfrm_pols_put(pols, num_pols);
|
|
xfrm_pols_put(pols, num_pols);
|
|
|
err = PTR_ERR(xdst);
|
|
err = PTR_ERR(xdst);
|