From: sashiko-bot@kernel.org
To: "Anthony Krowiak" <akrowiak@linux.ibm.com>
Cc: linux-s390@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH v4 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING
Date: Tue, 07 Jul 2026 09:23:55 +0000 [thread overview]
Message-ID: <20260707092355.7DDE91F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260707090226.3206695-9-akrowiak@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Migration file streams do not decouple their lifecycle from the vfio_device, allowing `matrix_mdev` to be accessed after being freed.
- [Medium] Concurrent reads on the migration state file cause a data race on `filp->f_pos`.
--
--- Patch [8]: [PATCH v4 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING ---
commit df7f5fdcda2503aec3804ab2b04e4b736cd6f0a1
Author: Anthony Krowiak <akrowiak@linux.ibm.com>
s390/vfio-ap: Transition device migration state from STOP to RESUMING
Transitioning from VFIO_DEVICE_STATE_STOP to VFIO_DEVICE_STATE_RESUMING
starts a process of restoring the device state of the vfio device on the
target system. To prepare for restoring the device state, open a file
stream to receive the guest's AP configuration saved when the device state
on the source system transitioned from VFIO_DEVICE_STATE_STOP to
VFIO_DEVICE_STATE_STOP_COPY.
> diff --git a/drivers/s390/crypto/vfio_ap_migration.c b/drivers/s390/crypto/vfio_ap_migration.c
> index 5ef7127b697a5..e917cc995d352 100644
> --- a/drivers/s390/crypto/vfio_ap_migration.c
> +++ b/drivers/s390/crypto/vfio_ap_migration.c
[ ... ]
> @@ -74,6 +85,8 @@ static int vfio_ap_release_mig_file(struct inode *file_inode, struct file *filp)
>
> if (filp == matrix_mdev->mig_data->stop_copy_mig_file)
> vfio_ap_release_stop_copy_file(matrix_mdev->mig_data);
> + else if (filp == matrix_mdev->mig_data->resuming_mig_state.filp)
> + vfio_ap_release_resuming_file(matrix_mdev->mig_data);
> else
> return -ENOENT;
[Severity: High]
Does this expose the matrix_mdev lifecycle to the file descriptor?
Migration file streams do not seem to decouple their lifecycle from the
vfio_device. The migration state file descriptor is created using
anon_inode_getfile() with matrix_mdev set as its private_data.
If a user closes the main device file descriptor but keeps the migration
file descriptor open, and the administrator unbinds the mdev device, the core
VFIO layer unregisters and frees matrix_mdev.
When the user later closes the migration file descriptor,
vfio_ap_release_mig_file() dereferences filp->private_data to access the
already freed matrix_mdev:
static int vfio_ap_release_mig_file(...)
{
struct ap_matrix_mdev *matrix_mdev = filp->private_data;
...
mutex_lock(&matrix_dev->mdevs_lock);
if (filp == matrix_mdev->mig_data->stop_copy_mig_file)
Could this lead to a use-after-free of matrix_mdev when attempting to clean
up the migration state?
[ ... ]
> @@ -311,6 +324,32 @@ static struct file *vfio_ap_open_file_stream(struct ap_matrix_mdev *matrix_mdev,
> return filp;
> }
[Severity: Medium]
Is it possible for concurrent operations on these migration state files to
cause a data race on filp->f_pos?
vfio_ap_open_file_stream() initializes the file with stream_open(), which sets
FMODE_STREAM and clears FMODE_ATOMIC_POS. In the VFS layer, this skips
acquiring f_pos_lock for stream files.
Looking at vfio_ap_stop_copy_read() which uses these stream files:
pos = &filp->f_pos;
...
mutex_unlock(&matrix_dev->mdevs_lock);
if (copy_to_user(buf, (char *)ap_config + *pos, len)) {
kfree(ap_config);
return -EFAULT;
}
kfree(ap_config);
*pos += len;
Since matrix_dev->mdevs_lock is released before copy_to_user() and before
*pos += len is executed, wouldn't concurrent read() calls read from the same
*pos offset, perform copy_to_user() with duplicate data, and concurrently
update *pos?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260707090226.3206695-1-akrowiak@linux.ibm.com?part=8
next prev parent reply other threads:[~2026-07-07 9:23 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-07 9:02 [PATCH v4 00/15] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-07-07 9:02 ` [PATCH v4 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
2026-07-07 9:02 ` [PATCH v4 02/15] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-07-07 9:09 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 03/15] s390/vfio-ap: Functions to initialize/release vfio device migration data Anthony Krowiak
2026-07-07 9:18 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 04/15] s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler Anthony Krowiak
2026-07-07 9:15 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 05/15] s390-vfio-ap: Callback to get/set vfio device mig state during guest migration Anthony Krowiak
2026-07-07 9:18 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 06/15] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-07-07 9:24 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 07/15] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-07-07 9:22 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-07-07 9:23 ` sashiko-bot [this message]
2026-07-07 9:02 ` [PATCH v4 09/15] s390/vfio-ap: Add method to set a new guest AP configuration Anthony Krowiak
2026-07-07 9:24 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 10/15] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-07-07 9:26 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 11/15] s390/vfio-ap: Transition device migration state to STOP Anthony Krowiak
2026-07-07 9:34 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 12/15] s390/vfio-ap: Transition device migration state from STOP to RUNNING and vice versa Anthony Krowiak
2026-07-07 9:33 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 13/15] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-07-07 9:32 ` sashiko-bot
2026-07-07 9:02 ` [PATCH v4 14/15] s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute Anthony Krowiak
2026-07-07 9:02 ` [PATCH v4 15/15] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak
2026-07-07 9: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=20260707092355.7DDE91F000E9@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 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.