@@ -2384,6 +2384,17 @@ def print_kernel_family_struct_src(family, cw):
2384
2384
if not kernel_can_gen_family_struct (family ):
2385
2385
return
2386
2386
2387
+ if 'sock-priv' in family .kernel_family :
2388
+ # Generate "trampolines" to make CFI happy
2389
+ cw .write_func ("static void" , f"__{ family .c_name } _nl_sock_priv_init" ,
2390
+ [f"{ family .c_name } _nl_sock_priv_init(priv);" ],
2391
+ ["void *priv" ])
2392
+ cw .nl ()
2393
+ cw .write_func ("static void" , f"__{ family .c_name } _nl_sock_priv_destroy" ,
2394
+ [f"{ family .c_name } _nl_sock_priv_destroy(priv);" ],
2395
+ ["void *priv" ])
2396
+ cw .nl ()
2397
+
2387
2398
cw .block_start (f"struct genl_family { family .ident_name } _nl_family __ro_after_init =" )
2388
2399
cw .p ('.name\t \t = ' + family .fam_key + ',' )
2389
2400
cw .p ('.version\t = ' + family .ver_key + ',' )
@@ -2401,9 +2412,8 @@ def print_kernel_family_struct_src(family, cw):
2401
2412
cw .p (f'.n_mcgrps\t = ARRAY_SIZE({ family .c_name } _nl_mcgrps),' )
2402
2413
if 'sock-priv' in family .kernel_family :
2403
2414
cw .p (f'.sock_priv_size\t = sizeof({ family .kernel_family ["sock-priv" ]} ),' )
2404
- # Force cast here, actual helpers take pointer to the real type.
2405
- cw .p (f'.sock_priv_init\t = (void *){ family .c_name } _nl_sock_priv_init,' )
2406
- cw .p (f'.sock_priv_destroy = (void *){ family .c_name } _nl_sock_priv_destroy,' )
2415
+ cw .p (f'.sock_priv_init\t = __{ family .c_name } _nl_sock_priv_init,' )
2416
+ cw .p (f'.sock_priv_destroy = __{ family .c_name } _nl_sock_priv_destroy,' )
2407
2417
cw .block_end (';' )
2408
2418
2409
2419
0 commit comments