Commit f3111502c065d32dcb021f55e30398aaebd8fb0f

Authored by Ingo Molnar
Committed by David S. Miller
1 parent 83de47cd0c

[XFRM]: fix incorrect xfrm_state_afinfo_lock use

xfrm_state_afinfo_lock can be read-locked from bh context, so take it
in a bh-safe manner in xfrm_state_register_afinfo() and
xfrm_state_unregister_afinfo(). Found by the lock validator.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 4 additions and 4 deletions Side-by-side Diff

net/xfrm/xfrm_state.c
... ... @@ -1061,7 +1061,7 @@
1061 1061 return -EINVAL;
1062 1062 if (unlikely(afinfo->family >= NPROTO))
1063 1063 return -EAFNOSUPPORT;
1064   - write_lock(&xfrm_state_afinfo_lock);
  1064 + write_lock_bh(&xfrm_state_afinfo_lock);
1065 1065 if (unlikely(xfrm_state_afinfo[afinfo->family] != NULL))
1066 1066 err = -ENOBUFS;
1067 1067 else {
... ... @@ -1069,7 +1069,7 @@
1069 1069 afinfo->state_byspi = xfrm_state_byspi;
1070 1070 xfrm_state_afinfo[afinfo->family] = afinfo;
1071 1071 }
1072   - write_unlock(&xfrm_state_afinfo_lock);
  1072 + write_unlock_bh(&xfrm_state_afinfo_lock);
1073 1073 return err;
1074 1074 }
1075 1075 EXPORT_SYMBOL(xfrm_state_register_afinfo);
... ... @@ -1081,7 +1081,7 @@
1081 1081 return -EINVAL;
1082 1082 if (unlikely(afinfo->family >= NPROTO))
1083 1083 return -EAFNOSUPPORT;
1084   - write_lock(&xfrm_state_afinfo_lock);
  1084 + write_lock_bh(&xfrm_state_afinfo_lock);
1085 1085 if (likely(xfrm_state_afinfo[afinfo->family] != NULL)) {
1086 1086 if (unlikely(xfrm_state_afinfo[afinfo->family] != afinfo))
1087 1087 err = -EINVAL;
... ... @@ -1091,7 +1091,7 @@
1091 1091 afinfo->state_bydst = NULL;
1092 1092 }
1093 1093 }
1094   - write_unlock(&xfrm_state_afinfo_lock);
  1094 + write_unlock_bh(&xfrm_state_afinfo_lock);
1095 1095 return err;
1096 1096 }
1097 1097 EXPORT_SYMBOL(xfrm_state_unregister_afinfo);