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
next prev parent 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