lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 040/371] xfrm: Fix xfrm sel prefix length validation
    Date
    [ Upstream commit b38ff4075a80b4da5cb2202d7965332ca0efb213 ]

    Family of src/dst can be different from family of selector src/dst.
    Use xfrm selector family to validate address prefix length,
    while verifying new sa from userspace.

    Validated patch with this command:
    ip xfrm state add src 1.1.6.1 dst 1.1.6.2 proto esp spi 4260196 \
    reqid 20004 mode tunnel aead "rfc4106(gcm(aes))" \
    0x1111016400000000000000000000000044440001 128 \
    sel src 1011:1:4::2/128 sel dst 1021:1:4::2/128 dev Port5

    Fixes: 07bf7908950a ("xfrm: Validate address prefix lengths in the xfrm selector.")
    Signed-off-by: Anirudh Gupta <anirudh.gupta@sophos.com>
    Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/xfrm/xfrm_user.c | 16 ++++++++++++++++
    1 file changed, 16 insertions(+)

    diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
    index 6916931b1de1..ee91f939903e 100644
    --- a/net/xfrm/xfrm_user.c
    +++ b/net/xfrm/xfrm_user.c
    @@ -150,6 +150,22 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,

    err = -EINVAL;
    switch (p->family) {
    + case AF_INET:
    + break;
    +
    + case AF_INET6:
    +#if IS_ENABLED(CONFIG_IPV6)
    + break;
    +#else
    + err = -EAFNOSUPPORT;
    + goto out;
    +#endif
    +
    + default:
    + goto out;
    + }
    +
    + switch (p->sel.family) {
    case AF_INET:
    if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
    goto out;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-07-24 22:22    [W:3.632 / U:1.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site