mptcp: use sock_kmemdup for address entry
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 28 Feb 2025 10:01:33 +0000 (18:01 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 4 Mar 2025 01:16:34 +0000 (17:16 -0800)
Instead of using sock_kmalloc() to allocate an address
entry "e" and then immediately duplicate the input "entry"
to it, the newly added sock_kmemdup() helper can be used in
mptcp_userspace_pm_append_new_local_addr() to simplify the code.

More importantly, the code "*e = *entry;" that assigns "entry"
to "e" is not easy to implemented in BPF if we use the same code
to implement an append_new_local_addr() helper of a BFP path
manager. This patch avoids this type of memory assignment
operation.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Acked-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/3e5a307aed213038a87e44ff93b5793229b16279.1740735165.git.tanggeliang@kylinos.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm_userspace.c

index 6bf6a20ef7f3e50750b648032c9e8961d3222890..7e7d01bef5d403cb8569a3e26102eccf466745a5 100644 (file)
@@ -71,13 +71,12 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
                /* Memory for the entry is allocated from the
                 * sock option buffer.
                 */
-               e = sock_kmalloc(sk, sizeof(*e), GFP_ATOMIC);
+               e = sock_kmemdup(sk, entry, sizeof(*entry), GFP_ATOMIC);
                if (!e) {
                        ret = -ENOMEM;
                        goto append_err;
                }
 
-               *e = *entry;
                if (!e->addr.id && needs_id)
                        e->addr.id = find_next_zero_bit(id_bitmap,
                                                        MPTCP_PM_MAX_ADDR_ID + 1,