lkml.org 
[lkml]   [2021]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.10 080/137] 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 d0c32a8fcc4a..45f86a97eaf2 100644
    --- a/net/xfrm/xfrm_user.c
    +++ b/net/xfrm/xfrm_user.c
    @@ -580,6 +580,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]);

    @@ -600,23 +614,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);

    xfrm_smark_init(attrs, &x->props.smark);
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-06 14:11    [W:4.222 / U:1.652 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site