Messages in this thread | | | Date | Tue, 20 Nov 2007 10:58:22 -0800 | From | mark gross <> | Subject | Re: [PATCH] More Sanity checks for DMAR |
| |
On Mon, Nov 19, 2007 at 03:03:48PM -0800, Fenghua Yu wrote: > > This patch adds and changes a few sanity checks in dmar.c. > > 1. The haw field in ACPI DMAR table in VT-d spec doesn't describe the range of > haw. But since DMA page size is 4KB in DMA remapping, haw should be at least > 4KB. The current VT-d code in dmar.c returns failure when haw==0. This sanity > check is not accurate and execution can pass when haw is less than one page > size 4KB. This patch changes the haw sanity check to validate if haw is less > than 4KB. > 2. Add dmar_rmrr_units verification. > 3. Add parse_dmar_table() verification. > > Thanks. > > -Fenghua > > Signed-off-by: Fenghua Yu <fenghua.yu@intel.com> > > --- > > dmar.c | 20 +++++++++++++++++--- > 1 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c > index 5dfdfda..a5b6ed0 100644 > --- a/drivers/pci/dmar.c > +++ b/drivers/pci/dmar.c > @@ -25,6 +25,7 @@ > > #include <linux/pci.h> > #include <linux/dmar.h> > +#include "iova.h" > > #undef PREFIX > #define PREFIX "DMAR:" > @@ -263,8 +264,8 @@ parse_dmar_table(void) > if (!dmar) > return -ENODEV; > > - if (!dmar->width) { > - printk (KERN_WARNING PREFIX "Zero: Invalid DMAR haw\n"); > + if (dmar->width < PAGE_SHIFT_4K - 1) { > + printk (KERN_WARNING PREFIX "Invalid DMAR haw\n"); > return -EINVAL; > } > > @@ -301,11 +302,24 @@ parse_dmar_table(void) > int __init dmar_table_init(void) > { > > - parse_dmar_table(); > + int ret; > + > + ret = parse_dmar_table(); > + if (ret) { > + printk(KERN_INFO PREFIX "parse DMAR table failure.\n"); > + return ret; > + } > + > if (list_empty(&dmar_drhd_units)) { > printk(KERN_INFO PREFIX "No DMAR devices found\n"); > return -ENODEV; > } > + > + if (list_empty(&dmar_rmrr_units)) { > + printk(KERN_INFO PREFIX "No RMRR found\n"); > + return -ENODEV; > + } > + > return 0; > } > > - Ack : mark gross <mgross@linux.intel.com>
Thanks,
--mgross - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |