NTB: Fix/improve memory window index validation
Subsystems (2)
cover NTB: Fix/improve memory window index validation
Fix a range check on validating a memory window index, and make validation more strict for using memory window as a hardware errata workaround.
Allen Hubbe (2):
NTB: Improve index handling in B2B MW workaround
NTB: Fix range check on memory window index
drivers/ntb/hw/intel/ntb_hw_intel.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-)
Signature · 1 line
2.5.0.rc1
PATCH 1/2 NTB: Improve index handling in B2B MW workaround
Check that b2b_mw_idx is in range of the number of memory windows when initializing the device. The workaround is considered to be in effect only if the device b2b_idx is exactly UINT_MAX, instead of any index past the last memory window.
Only print B2B MW workaround information in debugfs if the workaround is in effect.
--- drivers/ntb/hw/intel/ntb_hw_intel.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
drivers/ntb/hw/intel/ntb_hw_intel.c +16 -6
@@ -575,10 +575,13 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,"Connection Topology -\t%s\n" , ntb_topo_string(ndev->ntb.topo)); - off +=scnprintf (buf + off, buf_size - off, -"B2B Offset -\t\t%#lx\n" , ndev->b2b_off); - off +=scnprintf (buf + off, buf_size - off, -"B2B MW Idx -\t\t%d\n" , ndev->b2b_idx); +if (ndev->b2b_idx !=UINT_MAX ) { + off +=scnprintf (buf + off, buf_size - off, +"B2B MW Idx -\t\t%u\n" , ndev->b2b_idx); + off +=scnprintf (buf + off, buf_size - off, +"B2B Offset -\t\t%#lx\n" , ndev->b2b_off); + } + off +=scnprintf (buf + off, buf_size - off,"BAR4 Split -\t\t%s\n" , ndev->bar4_split ?"yes" :"no" );
@@ -1487,7 +1490,7 @@ static int xeon_setup_b2b_mw(struct intel_ntb_dev *ndev, pdev =ndev_pdev (ndev); mmio = ndev->self_mmio; -if (ndev->b2b_idx >= ndev->mw_count) { +if (ndev->b2b_idx ==UINT_MAX ) {dev_dbg (ndev_dev (ndev),"not using b2b mw\n" ); b2b_bar =0 ; ndev->b2b_off =0 ;
@@ -1779,6 +1782,13 @@ static int xeon_init_ntb(struct intel_ntb_dev *ndev)else ndev->b2b_idx = b2b_mw_idx; +if (ndev->b2b_idx >= ndev->mw_count) { +dev_dbg (ndev_dev (ndev), +"b2b_mw_idx %d invalid for mw_count %u\n" , + b2b_mw_idx, ndev->mw_count); +return -EINVAL ; + } +dev_dbg (ndev_dev (ndev),"setting up b2b mw idx %d means %d\n" , b2b_mw_idx, ndev->b2b_idx);
@@ -2008,7 +2018,7 @@ static inline void ndev_init_struct(struct intel_ntb_dev *ndev, ndev->ntb.ops = &intel_ntb_ops; ndev->b2b_off =0 ; - ndev->b2b_idx =INT_MAX ; + ndev->b2b_idx =UINT_MAX ; ndev->bar4_split =0 ;
Signature · 1 line
2.5.0.rc1
PATCH 2/2 NTB: Fix range check on memory window index
In reply to Allen HubbeThe range check must exclude the upper bound.
--- drivers/ntb/hw/intel/ntb_hw_intel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ntb/hw/intel/ntb_hw_intel.c +1 -1
@@ -240,7 +240,7 @@ static inline int ndev_ignore_unsafe(struct intel_ntb_dev *ndev,static int ndev_mw_to_bar (struct intel_ntb_dev *ndev,int idx) { -if (idx <0 || idx > ndev->mw_count) +if (idx <0 || idx >= ndev->mw_count)return -EINVAL ;return ndev->reg->mw_bar[idx]; }
Signature · 1 line
2.5.0.rc1
Jon Mason
maintainerQuoted 6 lines · Allen Hubbe
Fix a range check on validating a memory window index, and make validation more strict for using memory window as a hardware errata workaround.
Allen Hubbe (2):
NTB: Improve index handling in B2B MW workaround
NTB: Fix range check on memory window index
Both of these look fine to me. Applying to my tree for 4.3.
Thanks,
Jon
Quoted 12 lines
drivers/ntb/hw/intel/ntb_hw_intel.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-)--
2.5.0.rc1--
You received this message because you are subscribed to the Google Groups "linux-ntb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/linux-ntb/cover.1441027457.git.Allen.Hubbe%40emc.com.
For more options, visit https://groups.google.com/d/optout.