Message ID | 1445894544-21382-1-git-send-email-toshi.kani@hpe.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
> Signed-off-by: Toshi Kani <toshi.kani@hpe.com> > Reviewed-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Tony Luck <tony.luck@intel.com> -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Oct 26, 2015 at 03:22:24PM -0600, Toshi Kani wrote: > @@ -545,10 +545,15 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, > /* > * Disallow crazy address masks that give BIOS leeway to pick > * injection address almost anywhere. Insist on page or > - * better granularity and that target address is normal RAM. > + * better granularity and that target address is normal RAM or > + * NVDIMM. > */ > - pfn = PFN_DOWN(param1 & param2); > - if (!page_is_ram(pfn) || ((param2 & PAGE_MASK) != PAGE_MASK)) > + base_addr = param1 & param2; > + size = (~param2) + 1; Hmm, I missed this last time: why are the brackets there? AFAIK, bitwise NOT has a higher precedence than addition.
On Fri, 2015-10-30 at 10:40 +0100, Borislav Petkov wrote: > On Mon, Oct 26, 2015 at 03:22:24PM -0600, Toshi Kani wrote: > > @@ -545,10 +545,15 @@ static int einj_error_inject(u32 type, u32 flags, u64 > > param1, u64 param2, > > /* > > * Disallow crazy address masks that give BIOS leeway to pick > > * injection address almost anywhere. Insist on page or > > - * better granularity and that target address is normal RAM. > > + * better granularity and that target address is normal RAM or > > + * NVDIMM. > > */ > > - pfn = PFN_DOWN(param1 & param2); > > - if (!page_is_ram(pfn) || ((param2 & PAGE_MASK) != PAGE_MASK)) > > + base_addr = param1 & param2; > > + size = (~param2) + 1; > > Hmm, I missed this last time: why are the brackets there? > > AFAIK, bitwise NOT has a higher precedence than addition. Yes, the brackets are not necessary. I put them as self-explanatory of the precedence. Shall I remove them, and send you an updated patch? Thanks, -Toshi -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Oct 30, 2015 at 07:48:51AM -0600, Toshi Kani wrote: > Yes, the brackets are not necessary. I put them as self-explanatory of > the precedence. Shall I remove them, and send you an updated patch? Not necessary, I have my high hopes that Rafael can remove them when applying :-)
diff --git a/drivers/acpi/apei/einj.c b/drivers/acpi/apei/einj.c index 0431883..5d7c0b4 100644 --- a/drivers/acpi/apei/einj.c +++ b/drivers/acpi/apei/einj.c @@ -519,7 +519,7 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3, u64 param4) { int rc; - unsigned long pfn; + u64 base_addr, size; /* If user manually set "flags", make sure it is legal */ if (flags && (flags & @@ -545,10 +545,15 @@ static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, /* * Disallow crazy address masks that give BIOS leeway to pick * injection address almost anywhere. Insist on page or - * better granularity and that target address is normal RAM. + * better granularity and that target address is normal RAM or + * NVDIMM. */ - pfn = PFN_DOWN(param1 & param2); - if (!page_is_ram(pfn) || ((param2 & PAGE_MASK) != PAGE_MASK)) + base_addr = param1 & param2; + size = (~param2) + 1; + + if (((param2 & PAGE_MASK) != PAGE_MASK) || + ((region_intersects_ram(base_addr, size) != REGION_INTERSECTS) && + (region_intersects_pmem(base_addr, size) != REGION_INTERSECTS))) return -EINVAL; inject: