All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
Cc: "Heiko Carstens" <hca@linux.ibm.com>,
	linux-s390@vger.kernel.org,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>
Subject: Re: [PATCH v3 05/13] s390/cio: Use kzalloc() for CHSC work areas
Date: Wed, 16 Sep 2026 12:12:48 +0000	[thread overview]
Message-ID: <20260916121248.77BF91F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260916-s390-cio-ready-v3-5-39e4894637d6@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] s390/cio: kzalloc() breaks CHSC hardware 4K alignment requirement
--

commit a66087fda8920c920a2e60507dcf682684ee9966
Author: Mike Rapoport (Microsoft) <rppt@kernel.org>

    s390/cio: Use kzalloc() for CHSC work areas
    
    chsc_init() allocates the work area for CHSC commands and
    qdio_allocate() allocates one for CHSC calls during qdio_establish().
    
    This memory can be allocated with kmalloc() as there's nothing special
    about it to go directly to the page allocator.

    Link: https://lore.kernel.org/all/635405e4-9423-4a25-a6e7-e03c8ea0bcbe@redhat.com

> diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
> index c3186c0a372b4..d98f629e89295 100644
> --- a/drivers/s390/cio/chsc.c
> +++ b/drivers/s390/cio/chsc.c
> @@ -1143,7 +1143,7 @@ int __init chsc_init(void)
>  	int ret;
>  
>  	sei_page = kzalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
                   ^^^^^^^

[Severity: High]
Can this kzalloc() allocation for sei_page in chsc_init() cause a hardware
specification exception?

The s390 CHSC (Channel Subsystem Call) instruction requires its command-request
block operands to be strictly aligned on a 4K page boundary. Under kernel debug
configurations like CONFIG_SLUB_DEBUG or KASAN, kmalloc caches append redzones
and metadata, which shifts the payload offset within higher-order pages and
breaks the natural page alignment.

Since sei_page is passed to the CHSC instruction, an unaligned operand could
result in a kernel crash.

> -	chsc_page = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
> +	chsc_page = kzalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
                    ^^^^^^^

[Severity: High]
Does replacing get_zeroed_page() with kzalloc() here similarly break the 4K
page alignment guarantee for chsc_page?

Like sei_page, the global chsc_page in drivers/s390/cio/chsc.c is used directly
as a CHSC command block and will fault if it is unaligned. By moving from
get_zeroed_page() to kzalloc(), the strict page alignment guarantee is lost on
debug kernels.

[ ... ]

> diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
> index c1e09fa34e774..d137bf8c70664 100644
> --- a/drivers/s390/cio/qdio_main.c
> +++ b/drivers/s390/cio/qdio_main.c
[ ... ]
> @@ -986,7 +986,7 @@ int qdio_allocate(struct ccw_device *cdev, unsigned int no_input_qs,
>  	 * qdio_establish. In case of low memory and swap on a zfcp disk
>  	 * we may not be able to allocate memory otherwise.
>  	 */
> -	irq_ptr->chsc_page = get_zeroed_page(GFP_KERNEL);
> +	irq_ptr->chsc_page = kzalloc(PAGE_SIZE, GFP_KERNEL);
                             ^^^^^^^

[Severity: High]
Does using kzalloc() here in qdio_allocate() break the 4K alignment
requirement for the per-irq chsc_page?

This per-irq chsc_page in drivers/s390/cio/qdio_main.c is passed to hardware
in qdio_setup_get_ssqd() and set_subchannel_ind(). If CONFIG_SLUB_DEBUG or
KASAN is enabled, the kzalloc payload may not be 4K-aligned, causing a hardware
specification exception during device setup.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260916-s390-cio-ready-v3-0-39e4894637d6@kernel.org?part=5

  reply	other threads:[~2026-09-16 12:12 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 12:03 [PATCH v3 00/13] s390/cio: replace page allocator calls with k[mz]alloc() Mike Rapoport (Microsoft)
2026-09-16 12:03 ` [PATCH v3 01/13] s390/chsc: Use kzalloc() for CUBs Mike Rapoport (Microsoft)
2026-09-16 12:15   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 02/13] s390/chsc: Use kzalloc() for the SEI work area Mike Rapoport (Microsoft)
2026-09-16 12:15   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 03/13] s390/chsc_sch: Use kzalloc() for CHSC requests Mike Rapoport (Microsoft)
2026-09-16 12:14   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 04/13] s390/chsc_sch: Use __free(kfree) for synchronous " Mike Rapoport (Microsoft)
2026-09-16 12:10   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 05/13] s390/cio: Use kzalloc() for CHSC work areas Mike Rapoport (Microsoft)
2026-09-16 12:12   ` sashiko-bot [this message]
2026-09-16 12:03 ` [PATCH v3 06/13] s390/cmf: Use kmalloc() for the CMB area Mike Rapoport (Microsoft)
2026-09-16 12:18   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 07/13] s390/idals: Use kmalloc() for IDAL data buffers Mike Rapoport (Microsoft)
2026-09-16 12:16   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 08/13] s390/qdio_main: Use kzalloc() for the IRQ structure Mike Rapoport (Microsoft)
2026-09-16 12:17   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 09/13] s390/qdio_main: Use kzalloc() for the QDR Mike Rapoport (Microsoft)
2026-09-16 12:16   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 10/13] s390/qdio_setup: Use kzalloc() for QDIO buffers Mike Rapoport (Microsoft)
2026-09-16 12:21   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 11/13] s390/qdio_setup: Use kmalloc() for the storage list Mike Rapoport (Microsoft)
2026-09-16 12:23   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 12/13] s390/qdio_setup: Use kmalloc() for the SSQD request Mike Rapoport (Microsoft)
2026-09-16 12:23   ` sashiko-bot
2026-09-16 12:03 ` [PATCH v3 13/13] s390/scm: Use kmalloc() for SCM information Mike Rapoport (Microsoft)
2026-09-16 12:23   ` sashiko-bot
2026-09-16 13:06 ` [PATCH v3 00/13] s390/cio: replace page allocator calls with k[mz]alloc() Heiko Carstens
2026-09-18 16:23   ` Peter Oberparleiter
2026-09-20 18:20     ` Heiko Carstens

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260916121248.77BF91F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-s390@vger.kernel.org \
    --cc=rppt@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.