netdev: avoid CFI problems with sock priv helpers
Subsystems (3)
Jakub Kicinski
maintainerPATCH 1/1 netdev: avoid CFI problems with sock priv helpers
Li Li reports that casting away callback type may cause issues for CFI. Let's generate a small wrapper for each callback, to make sure compiler sees the anticipated types.
---
CC: [email protected]
CC: [email protected]
CC: [email protected]
--- net/core/netdev-genl-gen.c | 14 ++++++++++++-- tools/net/ynl/ynl-gen-c.py | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-)
net/core/netdev-genl-gen.c +12 -2
@@ -197,6 +197,16 @@ static const struct genl_multicast_group netdev_nl_mcgrps[] = { [NETDEV_NLGRP_PAGE_POOL] = { "page-pool", }, }; +static void __netdev_nl_sock_priv_init (void *priv) +{ +netdev_nl_sock_priv_init (priv); +} + +static void __netdev_nl_sock_priv_destroy (void *priv) +{ +netdev_nl_sock_priv_destroy (priv); +} +struct genl_family netdev_nl_family__ro_after_init = { .name =NETDEV_FAMILY_NAME , .version =NETDEV_FAMILY_VERSION ,
@@ -208,6 +218,6 @@ struct genl_family netdev_nl_family __ro_after_init = { .mcgrps = netdev_nl_mcgrps, .n_mcgrps = ARRAY_SIZE(netdev_nl_mcgrps), .sock_priv_size = sizeof(struct list_head), - .sock_priv_init = (void *)netdev_nl_sock_priv_init, - .sock_priv_destroy = (void *)netdev_nl_sock_priv_destroy, + .sock_priv_init = __netdev_nl_sock_priv_init, + .sock_priv_destroy = __netdev_nl_sock_priv_destroy, };
tools/net/ynl/ynl-gen-c.py +13 -3
@@ -2384,6 +2384,17 @@ _C_KW = { if not kernel_can_gen_family_struct(family): return + if 'sock-priv' in family.kernel_family: + # Generate "trampolines" to make CFI happy + cw.write_func("static void", f"__{family.c_name}_nl_sock_priv_init", + [f"{family.c_name}_nl_sock_priv_init(priv);"], + ["void *priv"]) + cw.nl() + cw.write_func("static void", f"__{family.c_name}_nl_sock_priv_destroy", + [f"{family.c_name}_nl_sock_priv_destroy(priv);"], + ["void *priv"]) + cw.nl() + cw.block_start(f"struct genl_family {family.ident_name}_nl_family __ro_after_init =") cw.p('.name\t\t= ' + family.fam_key + ',') cw.p('.version\t= ' + family.ver_key + ',')
@@ -2401,9 +2412,8 @@ _C_KW = { cw.p(f'.n_mcgrps\t= ARRAY_SIZE({family.c_name}_nl_mcgrps),') if 'sock-priv' in family.kernel_family: cw.p(f'.sock_priv_size\t= sizeof({family.kernel_family["sock-priv"]}),') - # Force cast here, actual helpers take pointer to the real type. - cw.p(f'.sock_priv_init\t= (void *){family.c_name}_nl_sock_priv_init,') - cw.p(f'.sock_priv_destroy = (void *){family.c_name}_nl_sock_priv_destroy,') + cw.p(f'.sock_priv_init\t= __{family.c_name}_nl_sock_priv_init,') + cw.p(f'.sock_priv_destroy = __{family.c_name}_nl_sock_priv_destroy,') cw.block_end(';')
Signature · 1 line
2.48.0
Quoted 9 lines · Jakub Kicinski
Li Li reports that casting away callback type may cause issues for CFI. Let's generate a small wrapper for each callback, to make sure compiler sees the anticipated types.
Reported-by Li Li <[email protected]>Link https://lore.kernel.org/CANBPYPjQVqmzZ4J=rVQX87a9iuwmaetULwbK_5_3YWk2eGzkaA@mail.gmail.com open hereFixes 170aafe35cb9 ("netdev: support binding dma-buf to netdevice")Signed-off-by Jakub Kicinski <[email protected]>
Thanks Jakub,
This patch was applied to netdev/net.git (main) by Paolo Abeni <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Paolo Abeni <[email protected]>:
Quoted 10 lines · On Wed, 15 Jan 2025 08:14:36 -0800 you wrote:
Li Li reports that casting away callback type may cause issues for CFI. Let's generate a small wrapper for each callback, to make sure compiler sees the anticipated types.
Reported-by Li Li <[email protected]>Link https://lore.kernel.org/CANBPYPjQVqmzZ4J=rVQX87a9iuwmaetULwbK_5_3YWk2eGzkaA@mail.gmail.com open hereFixes 170aafe35cb9 ("netdev: support binding dma-buf to netdevice")Signed-off-by Jakub Kicinski <[email protected]>[...]
Here is the summary with links:
- [net] netdev: avoid CFI problems with sock priv helpers
https://git.kernel.org/netdev/net/c/a50da36562cd
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
Paolo Abeni
maintainerQuoted 4 lines · Jakub Kicinski
Li Li reports that casting away callback type may cause issues for CFI. Let's generate a small wrapper for each callback, to make sure compiler sees the anticipated types.
Quoted 8 lines
Reported-by Li Li <[email protected]>Link https://lore.kernel.org/CANBPYPjQVqmzZ4J=rVQX87a9iuwmaetULwbK_5_3YWk2eGzkaA@mail.gmail.com open hereFixes 170aafe35cb9 ("netdev: support binding dma-buf to netdevice")Signed-off-by Jakub Kicinski <[email protected]>---
CC: [email protected]
CC: [email protected]
CC: [email protected]
FTR, I took the liberty of applying this patch before the 24H grace period to fit todays net PR and avoid shipping a 6.13 final with a known serious issue.
/P