Commit f3111502c065d32dcb021f55e30398aaebd8fb0f
Committed by
David S. Miller
1 parent
83de47cd0c
Exists in
master
and in
7 other branches
[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); |