Re: [PATCH] scsi/bfa: use designated initializers

2017-01-08 Thread Christoph Hellwig
On Tue, Jan 03, 2017 at 03:25:22PM -0800, Kees Cook wrote:
> 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.

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] scsi/bfa: use designated initializers

2017-01-03 Thread Kees Cook
On Wed, Dec 21, 2016 at 12:33 AM, Christoph Hellwig  wrote:
> On Fri, Dec 16, 2016 at 05:05:15PM -0800, Kees Cook wrote:
>> 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

-- 
Kees Cook
Nexus Security
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] scsi/bfa: use designated initializers

2016-12-21 Thread Christoph Hellwig
On Fri, Dec 16, 2016 at 05:05:15PM -0800, Kees Cook wrote:
> 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:

---
>From d20ca8dee2c620b8199e998269f8e0249bc1ba04 Mon Sep 17 00:00:00 2001
From: Christoph Hellwig 
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.

Signed-off-by: Christoph Hellwig 
---
 drivers/scsi/bfa/bfa_fcs.c | 181 -
 drivers/scsi/bfa/bfa_fcs.h |   4 -
 2 files changed, 46 insertions(+), 139 deletions(-)

diff --git a/drivers/scsi/bfa/bfa_fcs.c b/drivers/scsi/bfa/bfa_fcs.c
index 1e7e139..4aa61e2 100644
--- a/drivers/scsi/bfa/bfa_fcs.c
+++ b/drivers/scsi/bfa/bfa_fcs.c
@@ -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(>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 = _modules[i];
-   if (mod->attach)
-   mod->attach(fcs);
-   }
+   bfa_sm_send_event(>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 = _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(>wc, bfa_fcs_exit_comp, fcs);
-
-   nmods = ARRAY_SIZE(fcs_modules);
-
-   for (i = 0; i < nmods; i++) {
-
-   mod = _modules[i];
-   if (mod->modexit) {
-   bfa_wc_up(>wc);
-   mod->modexit(fcs);
-   }
-   }
-
+   bfa_wc_up(>wc);
+   bfa_trc(fcs, 0);
+   bfa_lps_delete(fcs->fabric.lps);
+   bfa_sm_send_event(>fabric, BFA_FCS_FABRIC_SM_DELETE);
bfa_wc_wait(>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 = >fabric;
-   memset(fabric, 0, sizeof(struct bfa_fcs_fabric_s));
-
-   /*
-* Initialize base fabric.
-*/
-   fabric->fcs = fcs;
-   INIT_LIST_HEAD(>vport_q);
-   INIT_LIST_HEAD(>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(>wc, bfa_fcs_fabric_delete_comp, fabric);
-   bfa_wc_up(>wc); /* For the base port */
-
-   bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
-   bfa_fcs_lport_attach(>bport, fabric->fcs, FC_VF_ID_NULL, NULL);
-}
-
-void
-bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs)
-{
-   bfa_sm_send_event(>fabric, BFA_FCS_FABRIC_SM_CREATE);
-   bfa_trc(fcs, 0);
-}
-
-/*
- *   Module cleanup
- */
-void
-bfa_fcs_fabric_modexit(struct bfa_fcs_s *fcs)
-{
-

[PATCH] scsi/bfa: use designated initializers

2016-12-16 Thread 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.

Signed-off-by: Kees Cook 
---
 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(-)

diff --git a/drivers/scsi/bfa/bfa_fcs.c b/drivers/scsi/bfa/bfa_fcs.c
index 1e7e139d71ea..f8f76501af90 100644
--- a/drivers/scsi/bfa/bfa_fcs.c
+++ b/drivers/scsi/bfa/bfa_fcs.c
@@ -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
+   },
 };
 
 /*
diff --git a/drivers/scsi/bfa/bfa_fcs_lport.c b/drivers/scsi/bfa/bfa_fcs_lport.c
index 4ddda72f60e6..64860c730ec9 100644
--- a/drivers/scsi/bfa/bfa_fcs_lport.c
+++ b/drivers/scsi/bfa/bfa_fcs_lport.c
@@ -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
diff --git a/drivers/scsi/bfa/bfa_modules.h b/drivers/scsi/bfa/bfa_modules.h
index 53135f21fa0e..640621b4c3da 100644
--- a/drivers/scsi/bfa/bfa_modules.h
+++ b/drivers/scsi/bfa/bfa_modules.h
@@ -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)
-- 
2.7.4


-- 
Kees Cook
Nexus Security
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html