Commit cc9ab60e authored by Steffen Klassert's avatar Steffen Klassert

xfrm: Cleanup error handling of xfrm_state_clone

The error pointer passed to xfrm_state_clone() is unchecked,
so remove it and indicate an error by returning a null pointer.
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent d2c5f658
...@@ -1148,10 +1148,9 @@ int xfrm_state_add(struct xfrm_state *x) ...@@ -1148,10 +1148,9 @@ int xfrm_state_add(struct xfrm_state *x)
EXPORT_SYMBOL(xfrm_state_add); EXPORT_SYMBOL(xfrm_state_add);
#ifdef CONFIG_XFRM_MIGRATE #ifdef CONFIG_XFRM_MIGRATE
static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp) static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig)
{ {
struct net *net = xs_net(orig); struct net *net = xs_net(orig);
int err = -ENOMEM;
struct xfrm_state *x = xfrm_state_alloc(net); struct xfrm_state *x = xfrm_state_alloc(net);
if (!x) if (!x)
goto out; goto out;
...@@ -1200,15 +1199,13 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp) ...@@ -1200,15 +1199,13 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp)
} }
if (orig->replay_esn) { if (orig->replay_esn) {
err = xfrm_replay_clone(x, orig); if (xfrm_replay_clone(x, orig))
if (err)
goto error; goto error;
} }
memcpy(&x->mark, &orig->mark, sizeof(x->mark)); memcpy(&x->mark, &orig->mark, sizeof(x->mark));
err = xfrm_init_state(x); if (xfrm_init_state(x) < 0)
if (err)
goto error; goto error;
x->props.flags = orig->props.flags; x->props.flags = orig->props.flags;
...@@ -1223,8 +1220,6 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp) ...@@ -1223,8 +1220,6 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp)
error: error:
xfrm_state_put(x); xfrm_state_put(x);
out: out:
if (errp)
*errp = err;
return NULL; return NULL;
} }
...@@ -1276,9 +1271,8 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x, ...@@ -1276,9 +1271,8 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
struct xfrm_migrate *m) struct xfrm_migrate *m)
{ {
struct xfrm_state *xc; struct xfrm_state *xc;
int err;
xc = xfrm_state_clone(x, &err); xc = xfrm_state_clone(x);
if (!xc) if (!xc)
return NULL; return NULL;
...@@ -1291,7 +1285,7 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x, ...@@ -1291,7 +1285,7 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
state is to be updated as it is a part of triplet */ state is to be updated as it is a part of triplet */
xfrm_state_insert(xc); xfrm_state_insert(xc);
} else { } else {
if ((err = xfrm_state_add(xc)) < 0) if (xfrm_state_add(xc) < 0)
goto error; goto error;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment