From nobody Sat May 4 18:58:14 2024 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B1CDBA48 for ; Tue, 29 Nov 2022 21:08:34 +0000 (UTC) Received: by mail-ej1-f44.google.com with SMTP id b2so20530635eja.7 for ; Tue, 29 Nov 2022 13:08:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tessares.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sDkQm/Igbqn4yMwljYrb+bCgf8pesfJApfImuUram6c=; b=t6bmNlLiQshsVtG9APUJUJAbsl4ch3jnGjEdXaYoddScBbjv6OMtOJZiU/skeopRi2 Fy1C9qDBd5MgMLVHVmfeUDAxgA66/3pYErko+gZXUpCjMStl26c5c/zmbHi2vSoXODKI fJma8gnAur6y3bK8a+tA+ko28KcobEfWEBIXPwPL7fA65QOLsB5kYgyfimm5vwoIKLRY WoFLmbd+8fIv6LrkfmdHVcTCGlyiaMHDdkqBCqfUnOIQfFEw52eFOa2+IGbdTaAcvlyq +ks117Luh5DaK+BGh0KeyCbNIvdMXqEJ1fbbKyVZitiy2HZ1xwKjps0avxt+MVzuMoIS jYJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sDkQm/Igbqn4yMwljYrb+bCgf8pesfJApfImuUram6c=; b=TSaITxaglMhqGX2Pt2K0l1zwnGLdOdAO2B0gP7aUpe6VViQ/dR4vjAFEuMRlsJjU5e 7kbEuzXqJduh6XUpY1DSI99bESVImMUmPDQstPzpRkTvMIzt6gp/ewLJdIQ0Lg84dyY4 0qGTZAs2coOMnZOp7rYK8KHVoe1xIOdMczF02Epk8I1myBroknLQxbjbU1jKHxM6OWsI cD6GCGPBYqw33QwGGzk/JiOFOEHd8Y6vnoOVYk2oFXfygkEAwpvZUonnX5AFzMjJLp0a whED3AbnR+5yYATCHUHXIb3LxCjEh0xnip3XeBasHEQ9NVEps8uMy5tlkLJACtcCjbYM xySA== X-Gm-Message-State: ANoB5plcTYH153GgUoDSZfH1eQi9xwIojycWihiFNAuBCNP3hqvh/sRe 60An9KYCIJrKAfIZ4coK6/ma5XNs67Ab17e6THA= X-Google-Smtp-Source: AA0mqf7CL6Uav0lCb4QGKVTTrPdK/+ltIMLZB2DGwwjqV0+pAoB3+bKQHkqKsH6i0lLgAi9ZqAYCRw== X-Received: by 2002:a17:906:a293:b0:7bf:c6d3:b803 with SMTP id i19-20020a170906a29300b007bfc6d3b803mr10588348ejz.116.1669756112168; Tue, 29 Nov 2022 13:08:32 -0800 (PST) Received: from vdi08.nix.tessares.net (static.219.156.76.144.clients.your-server.de. [144.76.156.219]) by smtp.gmail.com with ESMTPSA id d14-20020a17090694ce00b007aed2057eacsm6516487ejy.221.2022.11.29.13.08.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 13:08:31 -0800 (PST) From: Matthieu Baerts To: mptcp@lists.linux.dev Cc: Matthieu Baerts , Paolo Abeni Subject: [PATCH mptcp-net 1/3] mptcp: remove MPTCP 'ifdef' in TCP SYN cookies Date: Tue, 29 Nov 2022 22:08:02 +0100 Message-Id: <20221129210804.3769157-2-matthieu.baerts@tessares.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221129210804.3769157-1-matthieu.baerts@tessares.net> References: <20221129210804.3769157-1-matthieu.baerts@tessares.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3232; i=matthieu.baerts@tessares.net; h=from:subject; bh=G5Jigfxrz+PZHTLlMDvp3PvM4NMKe3ZPisN3SNA98z8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBjhnSzolzY65p7BkoG95o4BVTF9qbVkCsIt1B3uMGR NsFtN3yJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCY4Z0swAKCRD2t4JPQmmgc+tXD/ 4k5RDWr4Dht66b0HXlYBFq6rCDsLtIyBYy4Ena67VbRYFNlUL4q+0sgqTFrGb8+cSIOIp7H7+IMpYU vhddhzRuRwyu9TTPehNq6i059wKhFcSu4jv5cgjNZ5QePs6hu8+/GfaWX+JIIPtJyTF2I3d37HcK5a xL2FB0dwYnaXyG2mPI2hiB6edgu7dyNwP5qgz720qrYZisbd1edG+JMCZxYDODqvKSHvifM4knX9tU 3B9LVuFLE7FK/fQDfM7b8wvgcygP3+16qpAfwjj35ICVhJFsVMk9Icfr4MPlx8yrmlQ9dvO19/CCF3 ChfIY3j5JQ4IFVPdfYFOFNvQ1CTr+6HQt5XpbHWJv85nh62HqRObVwse1tt7rJysQ0+TYPwzIFOXDl fVrCnuoIglRFuGjAfOUAoOWBgK+dr22kW9emphM9KMAgHQ9m/kKI0gOUlxALtvDMiCfesrTLcLW+5n mR0GVRBAbBIzSGn4DGuygtgw/erTeMGyMEx5ZA4QvsJ1PjwmREdVRDS+HGcxq1HU9DRN5Q41tKVPXH jzjyyy3nDSaQYumqk0taBGnh9435Zc/1iR+hLu1vdpqB+QgrNQIPwZ7j3dTG/F5oVMrefADHtHvKzi xe7p9rOFN76CfoYjET0OA6pGBvWYIBF/JJ85T4imjIcNFZ4Xglz2bCnqPgnA== X-Developer-Key: i=matthieu.baerts@tessares.net; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" To ease the maintenance, it is often recommended to avoid having #ifdef preprocessor conditions. Here the section related to CONFIG_MPTCP was quite short but the next commit needs to add more code around. It is then cleaner to move specific MPTCP code to functions located in net/mptcp directory. Suggested-by: Paolo Abeni Signed-off-by: Matthieu Baerts --- include/net/mptcp.h | 12 ++++++++++-- net/ipv4/syncookies.c | 7 +++---- net/mptcp/subflow.c | 10 ++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 412479ebf5ad..3c5c68618fcc 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -97,8 +97,6 @@ struct mptcp_out_options { }; =20 #ifdef CONFIG_MPTCP -extern struct request_sock_ops mptcp_subflow_request_sock_ops; - void mptcp_init(void); =20 static inline bool sk_is_mptcp(const struct sock *sk) @@ -188,6 +186,9 @@ void mptcp_seq_show(struct seq_file *seq); int mptcp_subflow_init_cookie_req(struct request_sock *req, const struct sock *sk_listener, struct sk_buff *skb); +struct request_sock *mptcp_subflow_reqsk_alloc(const struct request_sock_o= ps *ops, + struct sock *sk_listener, + bool attach_listener); =20 __be32 mptcp_get_reset_option(const struct sk_buff *skb); =20 @@ -274,6 +275,13 @@ static inline int mptcp_subflow_init_cookie_req(struct= request_sock *req, return 0; /* TCP fallback */ } =20 +static inline struct request_sock *mptcp_subflow_reqsk_alloc(const struct = request_sock_ops *ops, + struct sock *sk_listener, + bool attach_listener) +{ + return NULL; +} + static inline __be32 mptcp_reset_option(const struct sk_buff *skb) { retu= rn htonl(0u); } #endif /* CONFIG_MPTCP */ =20 diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c index 942d2dfa1115..26fb97d1d4d9 100644 --- a/net/ipv4/syncookies.c +++ b/net/ipv4/syncookies.c @@ -288,12 +288,11 @@ struct request_sock *cookie_tcp_reqsk_alloc(const str= uct request_sock_ops *ops, struct tcp_request_sock *treq; struct request_sock *req; =20 -#ifdef CONFIG_MPTCP if (sk_is_mptcp(sk)) - ops =3D &mptcp_subflow_request_sock_ops; -#endif + req =3D mptcp_subflow_reqsk_alloc(ops, sk, false); + else + req =3D inet_reqsk_alloc(ops, sk, false); =20 - req =3D inet_reqsk_alloc(ops, sk, false); if (!req) return NULL; =20 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 2159b5f9988f..97a354aea25f 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -582,6 +582,16 @@ static int subflow_v6_conn_request(struct sock *sk, st= ruct sk_buff *skb) } #endif =20 +struct request_sock *mptcp_subflow_reqsk_alloc(const struct request_sock_o= ps *ops, + struct sock *sk_listener, + bool attach_listener) +{ + ops =3D &mptcp_subflow_request_sock_ops; + + return inet_reqsk_alloc(ops, sk_listener, attach_listener); +} +EXPORT_SYMBOL(mptcp_subflow_reqsk_alloc); + /* validate hmac received in third ACK */ static bool subflow_hmac_valid(const struct request_sock *req, const struct mptcp_options_received *mp_opt) --=20 2.37.2 From nobody Sat May 4 18:58:14 2024 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFE78BA49 for ; Tue, 29 Nov 2022 21:08:35 +0000 (UTC) Received: by mail-ej1-f44.google.com with SMTP id e27so36803033ejc.12 for ; Tue, 29 Nov 2022 13:08:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tessares.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cXlmKccEesmZovUEsGDiZsalt0MAyWophvAm7FOrmFU=; b=ux38CguJHFgUP6ttGczlBAG2WwWIrv/6GDkPQwXRIl++mCZDyKjtHCBFoM6ubf03Zx 6pyE5TOdQIHjKdiibHlFVwzlQmKg042lXvXvTSeWLAlJ+lXt1b1owksUrwfCAVGFuABC vdTisL8qza1/NW8wzHnln+I/gA6GNDImGP7iMM7tjBjNo9bBfQEo4UQGWhAzWD6jW0g8 M4qB7gDGujhq8q+zu7V9l+lXEUZt7gsNdjVfEe8ffO0B4shp0yxj5hQ3Rdl+R9NLHPeR 5PrBLUDKaEcXS3Myk/r065/1Q/XQMXhp5iqU7x/QD08Ic4sHBWTvyl4yAp79+2G7+slU gQag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cXlmKccEesmZovUEsGDiZsalt0MAyWophvAm7FOrmFU=; b=hfsrSxXCOHFTXUnJYCvuIfZbAeqG9tM55enAPl50dkG4eQ2gpZg2buET/cn45TIRCc UqDhvdtP38I17gUSoGeGaxE5Y+Cl0znj4VP3fhZWFI8tD295QH9E9aZB3l/y1VOksQxE 67DMDTWFzl49LdpPRe09lpVaDogklX6LYrjAbXfbzFjnV9u+35iAs/Kz483TWMR/0Axi bTz2jwWly+n5RSUBIUyhrLAbqEwgQZP8/EouK3wEK5UfzjQ5dBpxlaiPYnHvD38PrdbO Tcv/HBV4maNpIlwprINPsLC+39wIyb8MjznJ7FcuewYbLjtX1QLusWuj4bTGN/wvws/V +T4Q== X-Gm-Message-State: ANoB5pnS859TqIRBJ127KcBeCazlp/SgrVeNGVPACNvdGzwAhLF3kPKI mEBKlVfQqHfxkVsUz1MFGyUgvbKsSRdZtxkgulA= X-Google-Smtp-Source: AA0mqf5zAfanzmMtdGLGrD246PTLOB5pj3nbswPwQALNZJZkJDvWEbVLhbNnQpULzI0xFMR+AZ9Kzw== X-Received: by 2002:a17:906:3293:b0:7bd:f540:9be7 with SMTP id 19-20020a170906329300b007bdf5409be7mr14920988ejw.434.1669756113378; Tue, 29 Nov 2022 13:08:33 -0800 (PST) Received: from vdi08.nix.tessares.net (static.219.156.76.144.clients.your-server.de. [144.76.156.219]) by smtp.gmail.com with ESMTPSA id d14-20020a17090694ce00b007aed2057eacsm6516487ejy.221.2022.11.29.13.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 13:08:32 -0800 (PST) From: Matthieu Baerts To: mptcp@lists.linux.dev Cc: Matthieu Baerts Subject: [PATCH mptcp-net 2/3] mptcp: dedicated request sock for subflow in v6 Date: Tue, 29 Nov 2022 22:08:03 +0100 Message-Id: <20221129210804.3769157-3-matthieu.baerts@tessares.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221129210804.3769157-1-matthieu.baerts@tessares.net> References: <20221129210804.3769157-1-matthieu.baerts@tessares.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5269; i=matthieu.baerts@tessares.net; h=from:subject; bh=SO2iD+cklJishPzqSr5K+q8Er4ry5HsTY583VM8YNAs=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBjhnSz3+QI4jcr87Pssa3g5vl4JRFl1ZvZ7Ifvdnxe GwgcxZGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCY4Z0swAKCRD2t4JPQmmgcxRZD/ 9v09+QaIE+rsQB9ycwFKIkTVJWdFLfJJh10RqVlR+LGn2l9Eg2L/zFHOofDGnB0NlPg5i4q7/JC3DU wHZ2KTnpTkvu2qd4Ej5si5X2KE8XRptqNUi/aqC7Tqshrx8oYQxRNWi5FTGb1LmEfB22F85V4se6Vr eR5OeLzo54D81OPnZOL11h/NsTxQLqWGoNtLGNqh6L/aZeaGBPEM1UppWZEcrp734KbClM9N/g/leC HaNFxQxw/uG+DBECi8NrRxnJHhMajmrbMFhifySOsEbqZsRKfpoN+HzI5gLzWssdU9gAhaEKGdUtD2 +UvWH6SIUu0brSlFSXIzznpcp5R5TINxvKzWUYW46o8uaIda+zFDbdX0QrDyWHkHxiCwcFVa2Yyisk P/2/tk6kkwIno1oZH/RNW6EG/HvO3SdRxLl9oexFeUE3ZVKs4TjReyzronGlakvOmkxJXIlj2VwHSV 73/Pj7eG8a3uxe/plJF5NLvDlGp8QoPhgv8pOuOasEzmJLdHBF8I6RgUGsKPLBkjmWDDEYAMMygnps 0iUjYIh5BDl/v9+1TnG5ViHzIl2/Has2XViXvfVknN0bJkbyLrYp50Tg9PNQfHiRw4Owcp7n5HeFX8 NeVZxKIHKZi4wSfBeoE3YuZjWBXwo92p6EQkxz5RBInof6RmAjhemG6cDrMQ== X-Developer-Key: i=matthieu.baerts@tessares.net; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tcp_request_sock_ops structure is specific to IPv4. It should then not be used with MPTCP subflows on top of IPv6. For example, it contains the 'family' field, initialised to AF_INET. This 'family' field is used by TCP FastOpen code to generate the cookie but also by TCP Metrics, SELinux and SYN Cookies. Using the wrong family will not lead to crashes but displaying/using/checking wrong things. Note that 'send_reset' callback from request_sock_ops structure is used in some error paths. It is then also important to use the correct one for IPv4 or IPv6. The slab name can also be different in IPv4 and IPv6, it will be used when printing some log messages. The slab pointer will anyway be the same because the object size is the same for both v4 and v6. A BUILD_BUG_ON() has also been added to make sure this size is the same. Fixes: cec37a6e41aa ("mptcp: Handle MP_CAPABLE options for outgoing connect= ions") Signed-off-by: Matthieu Baerts --- net/mptcp/subflow.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 97a354aea25f..16498dd9e0a1 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -529,7 +529,7 @@ static int subflow_v6_rebuild_header(struct sock *sk) } #endif =20 -struct request_sock_ops mptcp_subflow_request_sock_ops; +struct request_sock_ops mptcp_subflow_v4_request_sock_ops; static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops __ro_afte= r_init; =20 static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb) @@ -542,7 +542,7 @@ static int subflow_v4_conn_request(struct sock *sk, str= uct sk_buff *skb) if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) goto drop; =20 - return tcp_conn_request(&mptcp_subflow_request_sock_ops, + return tcp_conn_request(&mptcp_subflow_v4_request_sock_ops, &subflow_request_sock_ipv4_ops, sk, skb); drop: @@ -551,6 +551,7 @@ static int subflow_v4_conn_request(struct sock *sk, str= uct sk_buff *skb) } =20 #if IS_ENABLED(CONFIG_MPTCP_IPV6) +struct request_sock_ops mptcp_subflow_v6_request_sock_ops; static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops __ro_afte= r_init; static struct inet_connection_sock_af_ops subflow_v6_specific __ro_after_i= nit; static struct inet_connection_sock_af_ops subflow_v6m_specific __ro_after_= init; @@ -573,7 +574,7 @@ static int subflow_v6_conn_request(struct sock *sk, str= uct sk_buff *skb) return 0; } =20 - return tcp_conn_request(&mptcp_subflow_request_sock_ops, + return tcp_conn_request(&mptcp_subflow_v6_request_sock_ops, &subflow_request_sock_ipv6_ops, sk, skb); =20 drop: @@ -586,7 +587,12 @@ struct request_sock *mptcp_subflow_reqsk_alloc(const s= truct request_sock_ops *op struct sock *sk_listener, bool attach_listener) { - ops =3D &mptcp_subflow_request_sock_ops; + if (ops->family =3D=3D AF_INET) + ops =3D &mptcp_subflow_v4_request_sock_ops; +#if IS_ENABLED(CONFIG_MPTCP_IPV6) + else if (ops->family =3D=3D AF_INET6) + ops =3D &mptcp_subflow_v6_request_sock_ops; +#endif =20 return inet_reqsk_alloc(ops, sk_listener, attach_listener); } @@ -1914,7 +1920,6 @@ static struct tcp_ulp_ops subflow_ulp_ops __read_most= ly =3D { static int subflow_ops_init(struct request_sock_ops *subflow_ops) { subflow_ops->obj_size =3D sizeof(struct mptcp_subflow_request_sock); - subflow_ops->slab_name =3D "request_sock_subflow"; =20 subflow_ops->slab =3D kmem_cache_create(subflow_ops->slab_name, subflow_ops->obj_size, 0, @@ -1931,9 +1936,10 @@ static int subflow_ops_init(struct request_sock_ops = *subflow_ops) =20 void __init mptcp_subflow_init(void) { - mptcp_subflow_request_sock_ops =3D tcp_request_sock_ops; - if (subflow_ops_init(&mptcp_subflow_request_sock_ops) !=3D 0) - panic("MPTCP: failed to init subflow request sock ops\n"); + mptcp_subflow_v4_request_sock_ops =3D tcp_request_sock_ops; + mptcp_subflow_v4_request_sock_ops.slab_name =3D "request_sock_subflow_v4"; + if (subflow_ops_init(&mptcp_subflow_v4_request_sock_ops) !=3D 0) + panic("MPTCP: failed to init subflow v4 request sock ops\n"); =20 subflow_request_sock_ipv4_ops =3D tcp_request_sock_ipv4_ops; subflow_request_sock_ipv4_ops.route_req =3D subflow_v4_route_req; @@ -1948,6 +1954,18 @@ void __init mptcp_subflow_init(void) tcp_prot_override.release_cb =3D tcp_release_cb_override; =20 #if IS_ENABLED(CONFIG_MPTCP_IPV6) + /* In struct mptcp_subflow_request_sock, we assume the TCP request sock + * structures for v4 and v6 have the same size. It should not changed in + * the future but better to make sure to be warned if it is no longer + * the case. + */ + BUILD_BUG_ON(sizeof(struct tcp_request_sock) !=3D sizeof(struct tcp6_requ= est_sock)); + + mptcp_subflow_v6_request_sock_ops =3D tcp6_request_sock_ops; + mptcp_subflow_v6_request_sock_ops.slab_name =3D "request_sock_subflow_v6"; + if (subflow_ops_init(&mptcp_subflow_v6_request_sock_ops) !=3D 0) + panic("MPTCP: failed to init subflow v6 request sock ops\n"); + subflow_request_sock_ipv6_ops =3D tcp_request_sock_ipv6_ops; subflow_request_sock_ipv6_ops.route_req =3D subflow_v6_route_req; =20 --=20 2.37.2 From nobody Sat May 4 18:58:14 2024 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFB0FBA28 for ; Tue, 29 Nov 2022 21:08:36 +0000 (UTC) Received: by mail-ej1-f43.google.com with SMTP id e27so36803141ejc.12 for ; Tue, 29 Nov 2022 13:08:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tessares.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YNL4Tl95wNHbkIQj46VKxVWtH+eLGg64lZJ5BLjgduA=; b=a894OARWSyhJVUYsJItQG2vT+kJgyjYifafKCaZdeI0o9DBYr5121nMiwK5vXF/zku 3T8KPeNQjCO8XixDBvMQsC+GDIHOZ3qNWFN3hiMXteBTUPgjVakZEYKjkqWwFBR7beDr gm8CG5ennpYYOU+bxCeSBTkSbfz3GNw8WIDPpyamShpPIBqWNrpHRR6dd7X5OACFsWek 2O06SzztpSsyI1fBqU2+PSraCFMJ9NMXyGMMM1ZJs7Dx/bDOv2zJpJTAweMPKXbZtdXj fRPneE63d29vtS58umlkYWHRFyyF0nb58avW8z+ijKOVO09eD4cXTUCf38/09BQ7TfVJ 5CDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YNL4Tl95wNHbkIQj46VKxVWtH+eLGg64lZJ5BLjgduA=; b=qr++sN74ImFe0CJj3z36jTqoCQnC/xKROR1Xis1L4PjfP/vdnxvJEpmNql4kzxp8ju VsfnJVkgpGEb3W4ZX4tl3Xjk8w5GLt+s3pZ3wbVTdtUWMCwED+7BxEvAkQ9lcc3tzrdo eWlSVRq/9TNTZRN+p/iMR8boPtdgTSTlWtrv/XaDJg+RWvMBfQoZPBMcZCuSmjw4I/V/ 4Uo5uhIBgJPZHEKlOyoR2fu/J3Xygj7mQVwiGzfagucTR/xGPH81oBQZ51Lk8LnEIb+L k5mATGI9kJjZEn6vnQ0nFj5kI4dWH2sneahc5dwSyLfJe0L41WnHJfxmstEPGaRJKAKw hDww== X-Gm-Message-State: ANoB5plcGKZC2RkvaTKMrGsG9O7w9ioo0iVqrCYgq17hGRBD1A7hd7ok J9jG2YYAJswml2uD9ruwoYTOKkDfe52F1BzBV0M= X-Google-Smtp-Source: AA0mqf6t/2mwXO/EkWd9jlI+i1PPUJE+ZFJiGzlLylEa/CCalskJn/eCeMRL2AemvjQvDJ26ADB1AQ== X-Received: by 2002:a17:906:54cf:b0:7ae:43f5:a2a3 with SMTP id c15-20020a17090654cf00b007ae43f5a2a3mr47926014ejp.595.1669756114426; Tue, 29 Nov 2022 13:08:34 -0800 (PST) Received: from vdi08.nix.tessares.net (static.219.156.76.144.clients.your-server.de. [144.76.156.219]) by smtp.gmail.com with ESMTPSA id d14-20020a17090694ce00b007aed2057eacsm6516487ejy.221.2022.11.29.13.08.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 13:08:33 -0800 (PST) From: Matthieu Baerts To: mptcp@lists.linux.dev Cc: Matthieu Baerts Subject: [PATCH mptcp-net 3/3] mptcp: use proper req destructor for IPv6 Date: Tue, 29 Nov 2022 22:08:04 +0100 Message-Id: <20221129210804.3769157-4-matthieu.baerts@tessares.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221129210804.3769157-1-matthieu.baerts@tessares.net> References: <20221129210804.3769157-1-matthieu.baerts@tessares.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2860; i=matthieu.baerts@tessares.net; h=from:subject; bh=FXCKpA8i/LwrN7laCoId//D1HNem9y4whs0qcG8fT44=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBjhnS0xf0IXnYUrVTfNmS7Pl8eX5k0Y2F2TQ0XTaFa qmI9kQOJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCY4Z0tAAKCRD2t4JPQmmgc2w6EA CCKe2FL7S7v1gTPqiSfgZ+1R1JpdaT0veEUKYNbpjf/8ZPpatZR4JXDO61d/SCHXM6VYnqur6K55us l1not/9T2IhNa0ol6yd06uKQNogbb3glT5rXv0S/PlO0U5nQgXP+K5pR1ko/q0+lqfR/JhdKqk0IB7 UylITcunZfqeCxksYCf8BlapbJaYpEFeS4scd8vTPTcpgb9Ddr/JVPR31ws6waZo56ddYVoo6JRllW AL82arnkwv7p91KzuxDtljJ+obIhRKQ9Tv0WmoQyk80WHPf92D0VJu3PdzuZM63FnHn1iTKFh3H3PT SOfbl/9OWOHoGjWVAD776d9sP7+ql0adGERIE1fshfPIIS4Q7QLmDmg7YwpudjEwp4b97a/NecxZFH JVg5mrumOn3R95bz9UUgtKlXDrEWhNbzCjLHzX4TqUP9CSQZfR2A2tNpqjRRc/pSAf/f9U8kTF7p3N A/ez7y6TmXjvD8tJKd/JoVbp/hQYGd/JBhKhPyTp6L1mDLw3ciU0wqt8X49Ovugl+leb7ofDSKZYca 2zACg558OlmdKpQllahlT6rEu5Dk7P8DWd1qeCHLODfjytlUHwqE+9cayggrfY1FhoQk8aAO1N22Mr NRtf7hg7Fuy7CLZzHibr740pZTSGgfSWOvVzLZ2RKHnQmnUESRR+o0KsyS3A== X-Developer-Key: i=matthieu.baerts@tessares.net; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Before, only the destructor from TCP request sock in IPv4 was called even if the subflow was in v4. It is important to use the right destructor to avoid memory leaks with some advanced IPv6 features, e.g. when the request socks contain specific IPv6 options. Fixes: 79c0949e9a09 ("mptcp: Add key generation and token tree") Signed-off-by: Matthieu Baerts --- net/mptcp/subflow.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 16498dd9e0a1..2e1d70e2272b 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -45,7 +45,6 @@ static void subflow_req_destructor(struct request_sock *r= eq) sock_put((struct sock *)subflow_req->msk); =20 mptcp_token_destroy_request(req); - tcp_request_sock_ops.destructor(req); } =20 static void subflow_generate_hmac(u64 key1, u64 key2, u32 nonce1, u32 nonc= e2, @@ -550,6 +549,12 @@ static int subflow_v4_conn_request(struct sock *sk, st= ruct sk_buff *skb) return 0; } =20 +static void subflow_v4_req_destructor(struct request_sock *req) +{ + subflow_req_destructor(req); + tcp_request_sock_ops.destructor(req); +} + #if IS_ENABLED(CONFIG_MPTCP_IPV6) struct request_sock_ops mptcp_subflow_v6_request_sock_ops; static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops __ro_afte= r_init; @@ -581,6 +586,12 @@ static int subflow_v6_conn_request(struct sock *sk, st= ruct sk_buff *skb) tcp_listendrop(sk); return 0; /* don't send reset */ } + +static void subflow_v6_req_destructor(struct request_sock *req) +{ + subflow_req_destructor(req); + tcp6_request_sock_ops.destructor(req); +} #endif =20 struct request_sock *mptcp_subflow_reqsk_alloc(const struct request_sock_o= ps *ops, @@ -1929,8 +1940,6 @@ static int subflow_ops_init(struct request_sock_ops *= subflow_ops) if (!subflow_ops->slab) return -ENOMEM; =20 - subflow_ops->destructor =3D subflow_req_destructor; - return 0; } =20 @@ -1938,6 +1947,8 @@ void __init mptcp_subflow_init(void) { mptcp_subflow_v4_request_sock_ops =3D tcp_request_sock_ops; mptcp_subflow_v4_request_sock_ops.slab_name =3D "request_sock_subflow_v4"; + mptcp_subflow_v4_request_sock_ops.destructor =3D subflow_v4_req_destructo= r; + if (subflow_ops_init(&mptcp_subflow_v4_request_sock_ops) !=3D 0) panic("MPTCP: failed to init subflow v4 request sock ops\n"); =20 @@ -1963,6 +1974,8 @@ void __init mptcp_subflow_init(void) =20 mptcp_subflow_v6_request_sock_ops =3D tcp6_request_sock_ops; mptcp_subflow_v6_request_sock_ops.slab_name =3D "request_sock_subflow_v6"; + mptcp_subflow_v6_request_sock_ops.destructor =3D subflow_v6_req_destructo= r; + if (subflow_ops_init(&mptcp_subflow_v6_request_sock_ops) !=3D 0) panic("MPTCP: failed to init subflow v6 request sock ops\n"); =20 --=20 2.37.2