diff options
author | David S. Miller <davem@davemloft.net> | 2017-06-30 12:43:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-06-30 12:43:08 -0400 |
commit | b07911593719828cac023bdcf6bf4da1c9ba546f (patch) | |
tree | c4d2f66e6f2506e5b5439ffca0449e646f677b33 /net/key | |
parent | 52a623bd6189b6ea8f06a0d7594c7604deaab24a (diff) | |
parent | 4d8a991d460d4fa4829beaffdcba45a217ca0fa7 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
A set of overlapping changes in macvlan and the rocker
driver, nothing serious.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/key')
-rw-r--r-- | net/key/af_key.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/net/key/af_key.c b/net/key/af_key.c index ce9b8565d825..376fdcf7a6b9 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -1150,6 +1150,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, | |||
1150 | goto out; | 1150 | goto out; |
1151 | } | 1151 | } |
1152 | 1152 | ||
1153 | err = -ENOBUFS; | ||
1153 | key = ext_hdrs[SADB_EXT_KEY_AUTH - 1]; | 1154 | key = ext_hdrs[SADB_EXT_KEY_AUTH - 1]; |
1154 | if (sa->sadb_sa_auth) { | 1155 | if (sa->sadb_sa_auth) { |
1155 | int keysize = 0; | 1156 | int keysize = 0; |
@@ -1161,8 +1162,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, | |||
1161 | if (key) | 1162 | if (key) |
1162 | keysize = (key->sadb_key_bits + 7) / 8; | 1163 | keysize = (key->sadb_key_bits + 7) / 8; |
1163 | x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL); | 1164 | x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL); |
1164 | if (!x->aalg) | 1165 | if (!x->aalg) { |
1166 | err = -ENOMEM; | ||
1165 | goto out; | 1167 | goto out; |
1168 | } | ||
1166 | strcpy(x->aalg->alg_name, a->name); | 1169 | strcpy(x->aalg->alg_name, a->name); |
1167 | x->aalg->alg_key_len = 0; | 1170 | x->aalg->alg_key_len = 0; |
1168 | if (key) { | 1171 | if (key) { |
@@ -1181,8 +1184,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, | |||
1181 | goto out; | 1184 | goto out; |
1182 | } | 1185 | } |
1183 | x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL); | 1186 | x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL); |
1184 | if (!x->calg) | 1187 | if (!x->calg) { |
1188 | err = -ENOMEM; | ||
1185 | goto out; | 1189 | goto out; |
1190 | } | ||
1186 | strcpy(x->calg->alg_name, a->name); | 1191 | strcpy(x->calg->alg_name, a->name); |
1187 | x->props.calgo = sa->sadb_sa_encrypt; | 1192 | x->props.calgo = sa->sadb_sa_encrypt; |
1188 | } else { | 1193 | } else { |
@@ -1196,8 +1201,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, | |||
1196 | if (key) | 1201 | if (key) |
1197 | keysize = (key->sadb_key_bits + 7) / 8; | 1202 | keysize = (key->sadb_key_bits + 7) / 8; |
1198 | x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL); | 1203 | x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL); |
1199 | if (!x->ealg) | 1204 | if (!x->ealg) { |
1205 | err = -ENOMEM; | ||
1200 | goto out; | 1206 | goto out; |
1207 | } | ||
1201 | strcpy(x->ealg->alg_name, a->name); | 1208 | strcpy(x->ealg->alg_name, a->name); |
1202 | x->ealg->alg_key_len = 0; | 1209 | x->ealg->alg_key_len = 0; |
1203 | if (key) { | 1210 | if (key) { |
@@ -1242,8 +1249,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, | |||
1242 | struct xfrm_encap_tmpl *natt; | 1249 | struct xfrm_encap_tmpl *natt; |
1243 | 1250 | ||
1244 | x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL); | 1251 | x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL); |
1245 | if (!x->encap) | 1252 | if (!x->encap) { |
1253 | err = -ENOMEM; | ||
1246 | goto out; | 1254 | goto out; |
1255 | } | ||
1247 | 1256 | ||
1248 | natt = x->encap; | 1257 | natt = x->encap; |
1249 | n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1]; | 1258 | n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1]; |
@@ -2742,6 +2751,8 @@ static int pfkey_spdflush(struct sock *sk, struct sk_buff *skb, const struct sad | |||
2742 | int err, err2; | 2751 | int err, err2; |
2743 | 2752 | ||
2744 | err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, true); | 2753 | err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, true); |
2754 | if (!err) | ||
2755 | xfrm_garbage_collect(net); | ||
2745 | err2 = unicast_flush_resp(sk, hdr); | 2756 | err2 = unicast_flush_resp(sk, hdr); |
2746 | if (err || err2) { | 2757 | if (err || err2) { |
2747 | if (err == -ESRCH) /* empty table - old silent behavior */ | 2758 | if (err == -ESRCH) /* empty table - old silent behavior */ |