s390/sthyi: enforce 4k alignment of vmalloc'ed area
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 3 Jul 2023 12:34:25 +0000 (14:34 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 24 Jul 2023 10:12:21 +0000 (12:12 +0200)
vmalloc() does not guarantee any alignment, unless it is explicitly
requested with e.g. __vmalloc_node(). Using diag204() with subcode 7
requires a 4k aligned virtual buffer. Therefore switch to __vmalloc_node().

Note: with the current vmalloc() implementation callers would still get a
4k aligned area, even though this is quite non-obvious looking at the
code. So changing this in sthyi doesn't fix a real bug. It is just to make
sure the code will not suffer from some obscure options, like it happened
in the past with kmalloc() where debug options changed the assumed
alignment of allocated memory areas.

Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/sthyi.c

index 4d141e2c132e5d5ad38ef6b132c69f4f607fd899..98ebedbb5761d37942eb6bafccbe00a8cabae12f 100644 (file)
@@ -317,7 +317,9 @@ static void fill_diag(struct sthyi_sctns *sctns)
        if (pages <= 0)
                return;
 
-       diag204_buf = vmalloc(array_size(pages, PAGE_SIZE));
+       diag204_buf = __vmalloc_node(array_size(pages, PAGE_SIZE),
+                                    PAGE_SIZE, GFP_KERNEL, NUMA_NO_NODE,
+                                    __builtin_return_address(0));
        if (!diag204_buf)
                return;