Skip to content

Commit b39ab98

Browse files
committed
Mark 'ioremap_page_range()' as possibly sleeping
It turns out that some drivers seem to think it's ok to remap page ranges from within interrupts and even NMI's. That is definitely not the case, since the page table build-up is simply not interrupt-safe. This showed up in the zero-day robot that reported it for the ACPI APEI GHES ("Generic Hardware Error Source") driver. Normally it had been hidden by the fact that no page table operations had been needed because the vmalloc area had been set up by other things. Apparently due to a recent change to the GHEI driver: commit 77b246b ("acpi: apei: check for pending errors when probing GHES entries") 0day actually caught a case during bootup whenthe ioremap called down to page allocation. But that recent change only showed the symptom, it wasn't the root cause of the problem. Hopefully it is limited to just that one driver. If you need to access random physical memory, you either need to ioremap in process context, or you need to use the FIXMAP facility to set one particular fixmap entry to the required mapping - that can be done safely. Cc: Borislav Petkov <[email protected]> Cc: Len Brown <[email protected]> Cc: Tony Luck <[email protected]> Cc: Fengguang Wu <[email protected]> Cc: Tyler Baicar <[email protected]> Cc: Will Deacon <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent daea3da commit b39ab98

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

lib/ioremap.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ int ioremap_page_range(unsigned long addr,
161161
unsigned long next;
162162
int err;
163163

164+
might_sleep();
164165
BUG_ON(addr >= end);
165166

166167
start = addr;

0 commit comments

Comments
 (0)