summaryrefslogtreecommitdiffstats
path: root/net/key
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-06-30 12:43:08 -0400
committerDavid S. Miller <davem@davemloft.net>2017-06-30 12:43:08 -0400
commitb07911593719828cac023bdcf6bf4da1c9ba546f (patch)
treec4d2f66e6f2506e5b5439ffca0449e646f677b33 /net/key
parent52a623bd6189b6ea8f06a0d7594c7604deaab24a (diff)
parent4d8a991d460d4fa4829beaffdcba45a217ca0fa7 (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.c19
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 */