Skip to content

Commit f99737c

Browse files
Dan Carpentergregkh
authored andcommitted
xfrm: Oops on error in pfkey_msg2xfrm_state()
commit 1e3d0c2c70cd3edb5deed186c5f5c75f2b84a633 upstream. There are some missing error codes here so we accidentally return NULL instead of an error pointer. It results in a NULL pointer dereference. Fixes: df71837 ("[LSM-IPSec]: Security association restriction.") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ac78351 commit f99737c

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

net/key/af_key.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,8 +1147,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
11471147
if (key)
11481148
keysize = (key->sadb_key_bits + 7) / 8;
11491149
x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL);
1150-
if (!x->aalg)
1150+
if (!x->aalg) {
1151+
err = -ENOMEM;
11511152
goto out;
1153+
}
11521154
strcpy(x->aalg->alg_name, a->name);
11531155
x->aalg->alg_key_len = 0;
11541156
if (key) {
@@ -1167,8 +1169,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
11671169
goto out;
11681170
}
11691171
x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL);
1170-
if (!x->calg)
1172+
if (!x->calg) {
1173+
err = -ENOMEM;
11711174
goto out;
1175+
}
11721176
strcpy(x->calg->alg_name, a->name);
11731177
x->props.calgo = sa->sadb_sa_encrypt;
11741178
} else {
@@ -1182,8 +1186,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
11821186
if (key)
11831187
keysize = (key->sadb_key_bits + 7) / 8;
11841188
x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL);
1185-
if (!x->ealg)
1189+
if (!x->ealg) {
1190+
err = -ENOMEM;
11861191
goto out;
1192+
}
11871193
strcpy(x->ealg->alg_name, a->name);
11881194
x->ealg->alg_key_len = 0;
11891195
if (key) {
@@ -1228,8 +1234,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
12281234
struct xfrm_encap_tmpl *natt;
12291235

12301236
x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL);
1231-
if (!x->encap)
1237+
if (!x->encap) {
1238+
err = -ENOMEM;
12321239
goto out;
1240+
}
12331241

12341242
natt = x->encap;
12351243
n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1];

0 commit comments

Comments
 (0)