Linux s390 Architecture development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Anthony Krowiak" <akrowiak@linux.ibm.com>
Cc: "Heiko Carstens" <hca@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>
Subject: Re: [PATCH v8 11/15] s390/vfio-ap: File ops called to resume the vfio device migration
Date: Fri, 09 Oct 2026 11:56:21 +0000	[thread overview]
Message-ID: <sashiko-outbox-165452@kernel.org> (raw)
In-Reply-To: <20261009114244.1213173-12-akrowiak@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] locking: DoS via userfaultfd stalling under global mutexes in vfio_ap_resuming_write()
--

commit 0439535c7d2f8e78d7863822666908892163a421
Author: Anthony Krowiak <akrowiak@linux.ibm.com>
s390/vfio-ap: File ops called to resume the vfio device migration

This commit implements the write callback for the file stream used to
restore the vfio-ap device state on a destination system during the
RESUMING migration phase. It copies the source guest's AP configuration
from userspace, validates its compatibility with the destination host,
and applies it if compatible.

> diff --git a/drivers/s390/crypto/vfio_ap_migration.c b/drivers/s390/crypto/vfio_ap_migration.c
> index 7b9851b79ec5f..caae95b47a9aa 100644
> --- a/drivers/s390/crypto/vfio_ap_migration.c
> +++ b/drivers/s390/crypto/vfio_ap_migration.c
[ ... ]
> @@ -448,11 +504,644 @@ static struct file *vfio_ap_open_file_stream(struct ap_matrix_mdev *matrix_mdev,
>  	return filp;
>  }
[ ... ]
> +static ssize_t vfio_ap_resuming_write(struct file *filp, const char __user *buf,
> +				      size_t len, loff_t *pos)
> +{
[ ... ]
> +	/*
> +	 * Hold ap_attr_mutex for the full duration of the write, just as
> +	 * (un)assign_adapter_store() and (un)assign_domain_store() do.  This
> +	 * prevents the AP bus apmask/aqmask attributes from being changed
> +	 * while the guest's AP configuration is being updated.
> +	 *
> +	 * get_update_locks_for_mdev() then acquires guests_lock, kvm->lock,
> +	 * and mdevs_lock in the correct order. This serialises
> +	 * the entire operation against concurrent AP attribute writers
> +	 * while the guest's AP configuration is being changed.
> +	 *
> +	 * Holding these locks for the full duration of a potentially chunked
> +	 * write could in theory affect performance, but this is acceptable for
> +	 * several reasons: migration is an infrequent operation; real-world
> +	 * guest AP configurations are small (each CEX8 card has 2 adapters and
> +	 * up to 16 domains, and the 85 cards in a system are shared across all
> +	 * LPARs and guests); and each chunk write completes quickly.
> +	 */
> +	matrix_mdev = filp->private_data;
> +	mutex_lock(&ap_attr_mutex);
> +	get_update_locks_for_mdev(matrix_mdev);
> +	pos = &filp->f_pos;
> +
> +	ret = validate_resuming_write_parms(filp, len);
> +	if (ret)
> +		goto out_unlock;
> +
> +	ap_config = matrix_mdev->mig_data->resuming_mig_file.ap_config;
> +
> +	if (copy_from_user((char *)ap_config + *pos, buf, len)) {

[Severity: High]
Does this code allow a malicious userspace process to stall the kernel
indefinitely using userfaultfd?

Holding global subsystem mutexes (ap_attr_mutex, matrix_dev->guests_lock,
matrix_dev->mdevs_lock) and the VM's kvm->lock during copy_from_user()
allows a compromised userspace process (such as a QEMU instance) to stall
execution by mapping the buffer with userfaultfd and never resolving the
page fault. 

This would freeze all AP bus attribute changes and vfio_ap mdev lifecycle
operations globally across the host, and lock up the affected KVM instance.
Even without userfaultfd, normal page faults from swap or network
filesystems could cause unpredictable and severe global latency spikes.

> +		ret = -EFAULT;
> +		goto out_unlock;
> +	}
> +
> +	*pos += len;
[ ... ]

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261009114244.1213173-1-akrowiak@linux.ibm.com?part=11

  reply	other threads:[~2026-10-09 11:56 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-09 11:42 [PATCH v8 00/15] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-10-09 11:42 ` [PATCH v8 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
2026-10-09 11:48   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 02/15] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-10-09 11:55   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 03/15] s390/vfio-ap: Functions to initialize/release vfio device migration data Anthony Krowiak
2026-10-09 11:52   ` sashiko-bot
2026-10-10  0:37   ` kernel test robot
2026-10-09 11:42 ` [PATCH v8 04/15] s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler Anthony Krowiak
2026-10-09 11:54   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 05/15] s390/vfio-ap: Callback to get/set vfio device mig state during guest migration Anthony Krowiak
2026-10-09 11:51   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 06/15] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-10-09 11:57   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 07/15] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-10-09 11:54   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-10-09 11:52   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 09/15] s390/vfio-ap: Prepare lock helpers and matrix init for cross-file use Anthony Krowiak
2026-10-09 11:51   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 10/15] s390/vfio-ap: Add method to set a new guest AP configuration Anthony Krowiak
2026-10-09 11:53   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 11/15] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-10-09 11:56   ` sashiko-bot [this message]
2026-10-09 11:42 ` [PATCH v8 12/15] s390/vfio-ap: Transition device migration state to from/to STOP Anthony Krowiak
2026-10-09 11:54   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 13/15] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-10-09 11:54   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 14/15] s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute Anthony Krowiak
2026-10-09 11:56   ` sashiko-bot
2026-10-09 11:42 ` [PATCH v8 15/15] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak
2026-10-09 11:53   ` sashiko-bot

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=sashiko-outbox-165452@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=akrowiak@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox