scsi/bfa: use designated initializers
Subsystems (2)
PATCH 1/1 scsi/bfa: use designated initializers
Prepare to mark sensitive kernel structures for randomization by making sure they're using designated initializers. These were identified during allyesconfig builds of x86, arm, and arm64, with most initializer fixes extracted from grsecurity.
--- drivers/scsi/bfa/bfa_fcs.c | 15 +++++++++++---- drivers/scsi/bfa/bfa_fcs_lport.c | 29 ++++++++++++++++++++--------- drivers/scsi/bfa/bfa_modules.h | 12 ++++++------ 3 files changed, 37 insertions(+), 19 deletions(-)
drivers/scsi/bfa/bfa_fcs.c +11 -4
@@ -39,10 +39,17 @@ struct bfa_fcs_mod_s {#define BFA_FCS_MODULE (_mod) { _mod ## _modinit, _mod ## _modexit }static struct bfa_fcs_mod_s fcs_modules[] = { - { bfa_fcs_port_attach,NULL ,NULL }, - { bfa_fcs_uf_attach,NULL ,NULL }, - { bfa_fcs_fabric_attach, bfa_fcs_fabric_modinit, - bfa_fcs_fabric_modexit }, + { + .attach = bfa_fcs_port_attach, + }, + { + .attach = bfa_fcs_uf_attach, + }, + { + .attach = bfa_fcs_fabric_attach, + .modinit = bfa_fcs_fabric_modinit, + .modexit = bfa_fcs_fabric_modexit + }, };/*
drivers/scsi/bfa/bfa_fcs_lport.c +20 -9
@@ -90,15 +90,26 @@ static struct {void (*offline) (struct bfa_fcs_lport_s *port); } __port_action[] = { { - bfa_fcs_lport_unknown_init, bfa_fcs_lport_unknown_online, - bfa_fcs_lport_unknown_offline}, { - bfa_fcs_lport_fab_init, bfa_fcs_lport_fab_online, - bfa_fcs_lport_fab_offline}, { - bfa_fcs_lport_n2n_init, bfa_fcs_lport_n2n_online, - bfa_fcs_lport_n2n_offline}, { - bfa_fcs_lport_loop_init, bfa_fcs_lport_loop_online, - bfa_fcs_lport_loop_offline}, - }; + .init = bfa_fcs_lport_unknown_init, + .online = bfa_fcs_lport_unknown_online, + .offline = bfa_fcs_lport_unknown_offline + }, + { + .init = bfa_fcs_lport_fab_init, + .online = bfa_fcs_lport_fab_online, + .offline = bfa_fcs_lport_fab_offline + }, + { + .init = bfa_fcs_lport_n2n_init, + .online = bfa_fcs_lport_n2n_online, + .offline = bfa_fcs_lport_n2n_offline + }, + { + .init = bfa_fcs_lport_loop_init, + .online = bfa_fcs_lport_loop_online, + .offline = bfa_fcs_lport_loop_offline + }, +}; /* * fcs_port_sm FCS logical port state machine
drivers/scsi/bfa/bfa_modules.h +6 -6
@@ -79,12 +79,12 @@ enum { \ extern struct bfa_module_s hal_mod_ ## __mod; \ struct bfa_module_s hal_mod_ ## __mod = { \ - bfa_ ## __mod ## _meminfo, \ - bfa_ ## __mod ## _attach, \ - bfa_ ## __mod ## _detach, \ - bfa_ ## __mod ## _start, \ - bfa_ ## __mod ## _stop, \ - bfa_ ## __mod ## _iocdisable, \ + .meminfo = bfa_ ## __mod ## _meminfo, \ + .attach = bfa_ ## __mod ## _attach, \ + .detach = bfa_ ## __mod ## _detach, \ + .start = bfa_ ## __mod ## _start, \ + .stop = bfa_ ## __mod ## _stop, \ + .iocdisable = bfa_ ## __mod ## _iocdisable, \ }#define BFA_CACHELINE_SZ (256)
Signature · 6 lines
2.7.4 -- Kees Cook Nexus Security
Quoted 4 lines · Kees Cook
Prepare to mark sensitive kernel structures for randomization by making sure they're using designated initializers. These were identified during allyesconfig builds of x86, arm, and arm64, with most initializer fixes extracted from grsecurity.
Instead of further bloating the idiotic dispatch table just kill it off entirely:
---
Quoted 1 line
From
d20ca8dee2c620b8199e998269f8e0249bc1ba04Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Wed, 21 Dec 2016 09:15:02 +0100
Subject: bfa: remove bfa_fcs_mod_s
Just call the functions directly instead of obsfucating the call chain.
--- drivers/scsi/bfa/bfa_fcs.c | 181 ++++++++++++--------------------------------- drivers/scsi/bfa/bfa_fcs.h | 4 - 2 files changed, 46 insertions(+), 139 deletions(-)
drivers/scsi/bfa/bfa_fcs.c +46 -135
@@ -28,24 +28,6 @@BFA_TRC_FILE (FCS ,FCS );/* -* FCS sub-modules -*/ -struct bfa_fcs_mod_s { -void (*attach) (struct bfa_fcs_s *fcs); -void (*modinit) (struct bfa_fcs_s *fcs); -void (*modexit) (struct bfa_fcs_s *fcs); -}; - -#define BFA_FCS_MODULE (_mod) { _mod ## _modinit, _mod ## _modexit } - -static struct bfa_fcs_mod_s fcs_modules[] = { - { bfa_fcs_port_attach,NULL ,NULL }, - { bfa_fcs_uf_attach,NULL ,NULL }, - { bfa_fcs_fabric_attach, bfa_fcs_fabric_modinit, - bfa_fcs_fabric_modexit }, -}; - -/* * fcs_api BFA FCS API */
@@ -58,52 +40,19 @@ bfa_fcs_exit_comp(void *fcs_cbarg)complete (&bfad->comp); } - -/* -* fcs_api BFA FCS API -*/ - -/* -* fcs attach -- called once to initialize data structures at driver attach time +* fcs initialization, called once after bfa initialization is complete */ void -bfa_fcs_attach (struct bfa_fcs_s *fcs,struct bfa_s *bfa,struct bfad_s *bfad, -bfa_boolean_t min_cfg) +bfa_fcs_init (struct bfa_fcs_s *fcs) { -int i; -struct bfa_fcs_mod_s *mod; - - fcs->bfa = bfa; - fcs->bfad = bfad; - fcs->min_cfg = min_cfg; - fcs->num_rport_logins =0 ; - - bfa->fcs =BFA_TRUE ; -fcbuild_init (); - -for (i =0 ; i <ARRAY_SIZE (fcs_modules); i++) { - mod = &fcs_modules[i]; -if (mod->attach) - mod->attach (fcs); - } +bfa_sm_send_event (&fcs->fabric,BFA_FCS_FABRIC_SM_CREATE ); +bfa_trc (fcs,0 ); }/* -* fcs initialization, called once after bfa initialization is complete +* fcs_api BFA FCS API */ -void -bfa_fcs_init (struct bfa_fcs_s *fcs) -{ -int i; -struct bfa_fcs_mod_s *mod; - -for (i =0 ; i <ARRAY_SIZE (fcs_modules); i++) { - mod = &fcs_modules[i]; -if (mod->modinit) - mod->modinit (fcs); - } -}/* * FCS update cfg - reset the pwwn/nwwn of fabric base logical port
@@ -180,26 +129,14 @@ bfa_fcs_driver_info_init(struct bfa_fcs_s *fcs,void bfa_fcs_exit (struct bfa_fcs_s *fcs) { -struct bfa_fcs_mod_s *mod; -int nmods, i; -bfa_wc_init (&fcs->wc, bfa_fcs_exit_comp, fcs); - - nmods =ARRAY_SIZE (fcs_modules); - -for (i =0 ; i < nmods; i++) { - - mod = &fcs_modules[i]; -if (mod->modexit) { -bfa_wc_up (&fcs->wc); - mod->modexit (fcs); - } - } - +bfa_wc_up (&fcs->wc); +bfa_trc (fcs,0 ); +bfa_lps_delete (fcs->fabric.lps); +bfa_sm_send_event (&fcs->fabric,BFA_FCS_FABRIC_SM_DELETE );bfa_wc_wait (&fcs->wc); } -/* * Fabric module implementation. */
@@ -1128,62 +1065,6 @@ bfa_fcs_fabric_stop_comp(void *cbarg)*/ /* -* Attach time initialization. -*/ -void -bfa_fcs_fabric_attach (struct bfa_fcs_s *fcs) -{ -struct bfa_fcs_fabric_s *fabric; - - fabric = &fcs->fabric; -memset (fabric,0 ,sizeof (struct bfa_fcs_fabric_s )); - -/* -* Initialize base fabric. -*/ - fabric->fcs = fcs; -INIT_LIST_HEAD (&fabric->vport_q); -INIT_LIST_HEAD (&fabric->vf_q); - fabric->lps =bfa_lps_alloc (fcs->bfa); -WARN_ON (!fabric->lps); - -/* -* Initialize fabric delete completion handler. Fabric deletion is -* complete when the last vport delete is complete. -*/ -bfa_wc_init (&fabric->wc, bfa_fcs_fabric_delete_comp, fabric); -bfa_wc_up (&fabric->wc);/* For the base port */ - -bfa_sm_set_state (fabric, bfa_fcs_fabric_sm_uninit); -bfa_fcs_lport_attach (&fabric->bport, fabric->fcs,FC_VF_ID_NULL ,NULL ); -} - -void -bfa_fcs_fabric_modinit (struct bfa_fcs_s *fcs) -{ -bfa_sm_send_event (&fcs->fabric,BFA_FCS_FABRIC_SM_CREATE ); -bfa_trc (fcs,0 ); -} - -/* -* Module cleanup -*/ -void -bfa_fcs_fabric_modexit (struct bfa_fcs_s *fcs) -{ -struct bfa_fcs_fabric_s *fabric; - -bfa_trc (fcs,0 ); - -/* -* Cleanup base fabric. -*/ - fabric = &fcs->fabric; -bfa_lps_delete (fabric->lps); -bfa_sm_send_event (fabric,BFA_FCS_FABRIC_SM_DELETE ); -} - -/* * Fabric module stop -- stop FCS actions */ void
@@ -1633,12 +1514,6 @@ bfa_fcs_port_event_handler(void *cbarg, enum bfa_port_linkstate event) } } -void -bfa_fcs_port_attach (struct bfa_fcs_s *fcs) -{ -bfa_fcport_event_register (fcs->bfa, bfa_fcs_port_event_handler, fcs); -} -/* * BFA FCS UF ( Unsolicited Frames) */
@@ -1706,8 +1581,44 @@ bfa_fcs_uf_recv(void *cbarg, struct bfa_uf_s *uf)bfa_uf_free (uf); } +/* +* fcs attach -- called once to initialize data structures at driver attach time +*/ void -bfa_fcs_uf_attach (struct bfa_fcs_s *fcs) +bfa_fcs_attach (struct bfa_fcs_s *fcs,struct bfa_s *bfa,struct bfad_s *bfad, +bfa_boolean_t min_cfg) { +struct bfa_fcs_fabric_s *fabric = &fcs->fabric; + + fcs->bfa = bfa; + fcs->bfad = bfad; + fcs->min_cfg = min_cfg; + fcs->num_rport_logins =0 ; + + bfa->fcs =BFA_TRUE ; +fcbuild_init (); + +bfa_fcport_event_register (fcs->bfa, bfa_fcs_port_event_handler, fcs);bfa_uf_recv_register (fcs->bfa, bfa_fcs_uf_recv, fcs); + +memset (fabric,0 ,sizeof (struct bfa_fcs_fabric_s )); + +/* +* Initialize base fabric. +*/ + fabric->fcs = fcs; +INIT_LIST_HEAD (&fabric->vport_q); +INIT_LIST_HEAD (&fabric->vf_q); + fabric->lps =bfa_lps_alloc (fcs->bfa); +WARN_ON (!fabric->lps); + +/* +* Initialize fabric delete completion handler. Fabric deletion is +* complete when the last vport delete is complete. +*/ +bfa_wc_init (&fabric->wc, bfa_fcs_fabric_delete_comp, fabric); +bfa_wc_up (&fabric->wc);/* For the base port */ + +bfa_sm_set_state (fabric, bfa_fcs_fabric_sm_uninit); +bfa_fcs_lport_attach (&fabric->bport, fabric->fcs,FC_VF_ID_NULL ,NULL ); }
drivers/scsi/bfa/bfa_fcs.h +0 -4
@@ -808,9 +808,7 @@ void bfa_fcs_vf_get_ports(bfa_fcs_vf_t *vf, wwn_t vpwwn[], int *nports);/* * fabric protected interface functions */ -void bfa_fcs_fabric_attach (struct bfa_fcs_s *fcs);void bfa_fcs_fabric_modinit (struct bfa_fcs_s *fcs); -void bfa_fcs_fabric_modexit (struct bfa_fcs_s *fcs);void bfa_fcs_fabric_link_up (struct bfa_fcs_fabric_s *fabric);void bfa_fcs_fabric_link_down (struct bfa_fcs_fabric_s *fabric); void bfa_fcs_fabric_addvport(struct bfa_fcs_fabric_s *fabric,
@@ -827,8 +825,6 @@ void bfa_fcs_fabric_nsymb_init(struct bfa_fcs_fabric_s *fabric);void bfa_fcs_fabric_set_fabric_name (struct bfa_fcs_fabric_s *fabric,wwn_t fabric_name);u16 bfa_fcs_fabric_get_switch_oui (struct bfa_fcs_fabric_s *fabric); -void bfa_fcs_uf_attach (struct bfa_fcs_s *fcs); -void bfa_fcs_port_attach (struct bfa_fcs_s *fcs);void bfa_fcs_fabric_modstop (struct bfa_fcs_s *fcs);void bfa_fcs_fabric_sm_online (struct bfa_fcs_fabric_s *fabric,enum bfa_fcs_fabric_event event);
Signature · 1 line
2.1.4
Quoted 8 lines · Christoph Hellwig
Quoted 4 lines · Kees Cook
Prepare to mark sensitive kernel structures for randomization by making sure they're using designated initializers. These were identified during allyesconfig builds of x86, arm, and arm64, with most initializer fixes extracted from grsecurity.
Instead of further bloating the idiotic dispatch table just kill it off entirely:
Sounds fine to me! Is this going via your tree?
Thanks!
-Kees
Signature · 2 lines
Kees Cook Nexus Security
Quoted 1 line · Kees Cook
Sounds fine to me! Is this going via your tree?
I don't have a suitable tree, but I'll resend it to the scsi list in a separate thread ASAP.