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>,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	kvm@vger.kernel.org, linux-s390@vger.kernel.org
Subject: Re: [PATCH v6 10/15] s390/vfio-ap: File ops called to resume the vfio device migration
Date: Mon, 27 Jul 2026 18:12:20 +0000	[thread overview]
Message-ID: <20260727181221.355E61F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260727173239.2420754-11-akrowiak@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Critical] Double fetch vulnerability in the resuming write path allows out-of-bounds kernel reads.
- [Critical] Use-After-Free during concurrent device teardown while executing copy_from_user.
- [High] Lack of rate limiting in validation error paths allows userspace to flood the kernel log and cause a Denial of Service.
- [High] Unsynchronized concurrent writes can trigger premature configuration validation on uninitialized memory.
--

--- Patch [10]: [PATCH v6 10/15] s390/vfio-ap: File ops called to resume the vfio device migration ---
commit 56776518d352cfe0d799d4f95bc7d9c8703337bf
Author: Anthony Krowiak <akrowiak@linux.ibm.com>
Subject: s390/vfio-ap: File ops called to resume the vfio device migration

This commit implements the write callback for the vfio-ap device migration
file stream. It restores the source guest's AP configuration by validating
and hot-plugging it into the destination guest.

> diff --git a/drivers/s390/crypto/vfio_ap_migration.c b/drivers/s390/crypto/vfio_ap_migration.c
> index c7fecad0b6769..c12ba82ec5277 100644
> --- a/drivers/s390/crypto/vfio_ap_migration.c
> +++ b/drivers/s390/crypto/vfio_ap_migration.c

[ ... ]

> @@ -881,14 +881,20 @@
>  static void report_qinfo_incompatibilities(const char *mdev_name,
>  					   unsigned long apqn,
>  					   struct ap_tapq_hwinfo *src_hwinfo,
>  					   struct ap_tapq_hwinfo *target_hwinfo)
>  {
> +	pr_err("vfio_ap_mdev %s: Migration failed: Source and target queue (%02lx.%04lx) not compatible\n",
> +	       mdev_name, AP_QID_CARD(apqn), AP_QID_QUEUE(apqn));

[Severity: High]
Is it possible for userspace to flood the kernel log here?

If a configuration with a large number of incompatible queues is provided,
verify_ap_configs_are_compatible() continues processing rather than aborting.

Since report_qinfo_incompatibilities() and its helpers issue unconditional
pr_err() calls for each mismatch, could this cause CPU stalls or a denial
of service?

> +
> +	report_facilities_compatibility(mdev_name, apqn, src_hwinfo, target_hwinfo);
> +	report_mode_compatibility(mdev_name, apqn, src_hwinfo, target_hwinfo);

[ ... ]

> @@ -1071,61 +1071,80 @@
>  static ssize_t vfio_ap_resuming_write(struct file *filp, const char __user *buf,
>  				      size_t len, loff_t *pos)
>  {

[ ... ]

> +	/*
> +	 * Snapshot and advance *pos under the lock before dropping it for
> +	 * copy_from_user().  This prevents concurrent write()s on the same
> +	 * stream file from computing the same destination offset and clobbering
> +	 * each other's data or racing to reassign mig_data->resuming_mig_file.
> +	 */
> +	write_pos = *pos;
> +	*pos += len;
> +
> +	mutex_unlock(&matrix_dev->mdevs_lock);
> +
> +	if (copy_from_user((char *)ap_config + write_pos, buf, len)) {
> +		if (new_allocation)
> +			kvfree(ap_config);
> +		return -EIO;
> +	}

[Severity: Critical]
Can a concurrent device teardown cause a use-after-free here?

The mdevs_lock is dropped to perform copy_from_user(). If a concurrent
thread closes the VFIO device, vfio_ap_release_mig_files() will call
kvfree(mig_data->resuming_mig_file.ap_config). Would this result in
copy_from_user() writing into freed kernel memory?

[Severity: Critical]
Could this sequence introduce a double-fetch vulnerability?

The first fetch in allocate_ap_config() reads num_queues to determine the
allocation size. The lock is then dropped, and this second copy_from_user()
overwrites the entire buffer, including the num_queues field.

If userspace modifies num_queues between these fetches, could it inflate
ap_config->num_queues beyond the allocated size, causing out-of-bounds
reads in queues_available() when it loops over source_config->num_queues?

> +
> +	/* Check if we've completed writing the entire configuration */
> +	if (write_pos + len == cfg_sz) {
> +		/*
> +		 * do_post_copy_validation() calls ap_tapq() which is a slow
> +		 * hardware instruction.  Run it before acquiring the update
> +		 * locks to avoid holding guests_lock, kvm->lock, and
> +		 * mdevs_lock across the hardware calls.
> +		 */
> +		ret = do_post_copy_validation(mdev_name, ap_config);

[Severity: High]
Does this completion check safely handle concurrent writes?

If userspace issues asynchronous write() syscalls for different chunks of
the payload, they might execute copy_from_user() concurrently. If the
thread writing the final chunk completes its copy before threads writing
earlier chunks finish theirs, could do_post_copy_validation() be called
on a buffer that still contains uninitialized data?

> +		if (ret < 0) {
> +			if (new_allocation)
> +				kvfree(ap_config);
> +			return ret;
> +		}

[ ... ]

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

  reply	other threads:[~2026-07-27 18:12 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-27 17:32 [PATCH v6 00/15] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-07-27 17:32 ` [PATCH v6 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
2026-07-27 17:38   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 02/15] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-07-27 17:40   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 03/15] s390/vfio-ap: Functions to initialize/release vfio device migration data Anthony Krowiak
2026-07-27 17:48   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 04/15] s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler Anthony Krowiak
2026-07-27 17:52   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 05/15] s390-vfio-ap: Callback to get/set vfio device mig state during guest migration Anthony Krowiak
2026-07-27 17:59   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 06/15] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-07-27 18:00   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 07/15] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-07-27 18:02   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-07-27 18:14   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 09/15] s390/vfio-ap: Add method to set a new guest AP configuration Anthony Krowiak
2026-07-27 18:11   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 10/15] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-07-27 18:12   ` sashiko-bot [this message]
2026-07-27 17:32 ` [PATCH v6 11/15] s390/vfio-ap: Transition device migration state to STOP Anthony Krowiak
2026-07-27 18:26   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 12/15] s390/vfio-ap: Transition device migration state from STOP to RUNNING and vice versa Anthony Krowiak
2026-07-27 18:28   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 13/15] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-07-27 18:19   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 14/15] s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute Anthony Krowiak
2026-07-27 18:45   ` sashiko-bot
2026-07-27 17:32 ` [PATCH v6 15/15] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak
2026-07-27 18:27   ` 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=20260727181221.355E61F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=akrowiak@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