lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 141/245] xfrm: Fix error reporting in xfrm_state_construct.
    Date
    From: Steffen Klassert <steffen.klassert@secunet.com>

    [ Upstream commit 6fd06963fa74197103cdbb4b494763127b3f2f34 ]

    When memory allocation for XFRMA_ENCAP or XFRMA_COADDR fails,
    the error will not be reported because the -ENOMEM assignment
    to the err variable is overwritten before. Fix this by moving
    these two in front of the function so that memory allocation
    failures will be reported.

    Reported-by: Tobias Brunner <tobias@strongswan.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/xfrm/xfrm_user.c | 28 ++++++++++++++--------------
    1 file changed, 14 insertions(+), 14 deletions(-)

    diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
    index feb24ca530f2..48139e1a0ac9 100644
    --- a/net/xfrm/xfrm_user.c
    +++ b/net/xfrm/xfrm_user.c
    @@ -566,6 +566,20 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,

    copy_from_user_state(x, p);

    + if (attrs[XFRMA_ENCAP]) {
    + x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
    + sizeof(*x->encap), GFP_KERNEL);
    + if (x->encap == NULL)
    + goto error;
    + }
    +
    + if (attrs[XFRMA_COADDR]) {
    + x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
    + sizeof(*x->coaddr), GFP_KERNEL);
    + if (x->coaddr == NULL)
    + goto error;
    + }
    +
    if (attrs[XFRMA_SA_EXTRA_FLAGS])
    x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);

    @@ -586,23 +600,9 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
    attrs[XFRMA_ALG_COMP])))
    goto error;

    - if (attrs[XFRMA_ENCAP]) {
    - x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
    - sizeof(*x->encap), GFP_KERNEL);
    - if (x->encap == NULL)
    - goto error;
    - }
    -
    if (attrs[XFRMA_TFCPAD])
    x->tfcpad = nla_get_u32(attrs[XFRMA_TFCPAD]);

    - if (attrs[XFRMA_COADDR]) {
    - x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
    - sizeof(*x->coaddr), GFP_KERNEL);
    - if (x->coaddr == NULL)
    - goto error;
    - }
    -
    xfrm_mark_get(attrs, &x->mark);

    err = __xfrm_init_state(x, false);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 17:22    [W:4.029 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site