[XFRM]: fix softirq-unsafe xfrm typemap->lock use
xfrm typemap->lock may be used in softirq context, so all write_lock() uses must be softirq-safe. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a76e07acd0
commit
8dff7c2970
1 changed files with 4 additions and 4 deletions
|
@ -57,12 +57,12 @@ int xfrm_register_type(struct xfrm_type *type, unsigned short family)
|
|||
return -EAFNOSUPPORT;
|
||||
typemap = afinfo->type_map;
|
||||
|
||||
write_lock(&typemap->lock);
|
||||
write_lock_bh(&typemap->lock);
|
||||
if (likely(typemap->map[type->proto] == NULL))
|
||||
typemap->map[type->proto] = type;
|
||||
else
|
||||
err = -EEXIST;
|
||||
write_unlock(&typemap->lock);
|
||||
write_unlock_bh(&typemap->lock);
|
||||
xfrm_policy_put_afinfo(afinfo);
|
||||
return err;
|
||||
}
|
||||
|
@ -78,12 +78,12 @@ int xfrm_unregister_type(struct xfrm_type *type, unsigned short family)
|
|||
return -EAFNOSUPPORT;
|
||||
typemap = afinfo->type_map;
|
||||
|
||||
write_lock(&typemap->lock);
|
||||
write_lock_bh(&typemap->lock);
|
||||
if (unlikely(typemap->map[type->proto] != type))
|
||||
err = -ENOENT;
|
||||
else
|
||||
typemap->map[type->proto] = NULL;
|
||||
write_unlock(&typemap->lock);
|
||||
write_unlock_bh(&typemap->lock);
|
||||
xfrm_policy_put_afinfo(afinfo);
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue