All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Anthony Krowiak" <akrowiak@linux.ibm.com>
Cc: linux-s390@vger.kernel.org,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	kvm@vger.kernel.org,
	"Christian Borntraeger" <borntraeger@linux.ibm.vom>
Subject: Re: [PATCH v2 10/16] s390/vfio-ap: Transition device migration state from RESUMING to STOP
Date: Thu, 13 Aug 2026 23:53:12 +0000	[thread overview]
Message-ID: <20260813235317.00E2E1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260407205100.331150-11-akrowiak@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Userspace can trigger a host kernel panic via a NULL pointer dereference by calling read/write on the migration file descriptor concurrently with or after a state transition.
- [Critical] NULL pointer dereference during post-copy validation if a target queue is not bound to the vfio_ap driver.
--

--- Patch [10]: [PATCH v2 10/16] s390/vfio-ap: Transition device migration state from RESUMING to STOP ---
commit 198a0563141b8b9148b57d67d870dea7883422b2
Author: Anthony Krowiak <akrowiak@linux.ibm.com>

s390/vfio-ap: Transition device migration state from RESUMING to STOP

Leaving the RESUMING state terminates a data transfer of the internal
state of the vfio-ap device on the source host to the vfio-ap device on the
target host. This state transition indicates the vfio_ap driver should
complete the incorporation of data written to the data transfer FD. Since
a vfio-ap device does not virtualize a physical device, the only thing
left to do is release the migration files used to help facilitate the
migration process.

> diff --git a/drivers/s390/crypto/vfio_ap_migration.c b/drivers/s390/crypto/vfio_ap_migration.c
> index ce16028e50a41..ebb3b78b1e195 100644
> --- a/drivers/s390/crypto/vfio_ap_migration.c
> +++ b/drivers/s390/crypto/vfio_ap_migration.c
> @@ -915,10 +915,20 @@ vfio_ap_transition_to_state(struct ap_matrix_mdev *matrix_mdev,
>  		return migf->filp;
>  	}
>  
> +	/*
> +	 * Terminates the data transfer session of the vfio-ap device state
> +	 * between the source and target hosts. Since the vfio-ap device does
> +	 * not virtualize a DMA device, there is no internal device state to
> +	 * incorporate into the vfio-ap device on the target; so, the only
> +	 * thing left to do is release the migration files used to process
> +	 * the vfio device migration. Note that this state transition is for
> +	 * the vfio-ap device on the target host.
> +	 */
>  	if (cur_state == VFIO_DEVICE_STATE_RESUMING &&
>  	    new_state == VFIO_DEVICE_STATE_STOP) {
> -		/* TODO */
> -		return ERR_PTR(-EOPNOTSUPP);
> +		vfio_ap_release_mig_files(matrix_mdev);

[Severity: Critical]
Can this regression cause a host kernel panic via a NULL pointer
dereference if userspace calls read or write on the migration file
descriptor concurrently with or after this state transition?

When vfio_ap_release_mig_files() is called, it sets migf->matrix_mdev = NULL
and migf->disabled = true.

If a userspace process continues to read or write to the migration file
descriptor, it can block on matrix_dev->mdevs_lock and then blindly
dereference migf->matrix_mdev once unblocked:

drivers/s390/crypto/vfio_ap_migration.c:vfio_ap_resume_write() {
    ...
    mig_data = migf->matrix_mdev->mig_data;
    ret = validate_resume_write_parms(migf, len, pos);
    ...
}

Does the error logging also directly dereference migf->matrix_mdev after
confirming migf->disabled is true, even though disabled == true guarantees
matrix_mdev == NULL?

drivers/s390/crypto/vfio_ap_migration.c:validate_save_read_parms() {
    ...
    if (migf->disabled) {
        dev_err(migf->matrix_mdev->vdev.dev,
                "%s (%d): migration file is disabled\n",
                __func__, __LINE__);
    ...
}

[Severity: Critical]
Is it also possible to hit a NULL pointer dereference during post-copy
validation if a target queue is not bound to the vfio_ap driver?

If userspace writes an AP configuration containing an apqn that is assigned to
the guest matrix, but the physical queue object is not bound to the host
vfio_ap driver (e.g., it is offline or unassigned), vfio_ap_mdev_get_queue()
returns NULL.

drivers/s390/crypto/vfio_ap_migration.c:matrixes_compatible() {
    ...
    q = vfio_ap_mdev_get_queue(matrix_mdev, apqn);
    memcpy(&src_hwinfo, &migf->ap_config->qinfo[i].data,
           sizeof(src_hwinfo));

    if (!qinfo_compatible(matrix_mdev, apqn, &src_hwinfo, &q->hwinfo))
    ...
}

Will this dereference q->hwinfo and pass it to qinfo_compatible() when q is
NULL, leading to a host crash?

> +
> +		return NULL;
>  	}

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

  reply	other threads:[~2026-08-13 23:53 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-07 20:50 [PATCH v2 00/16] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 01/16] s390/vfio-ap: Store queue hardware info when probed Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 02/16] s390/vfio-ap: Provide access to queue objects and related info Anthony Krowiak
2026-08-13 23:40   ` sashiko-bot
2026-04-07 20:50 ` [PATCH v2 03/16] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 04/16] s390/vfio-ap: Initialize/release vfio device migration data Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 05/16] s390-vfio-ap: Callback to set vfio device mig state during guest migration Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 06/16] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 07/16] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 08/16] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 09/16] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 10/16] s390/vfio-ap: Transition device migration state from RESUMING to STOP Anthony Krowiak
2026-08-13 23:53   ` sashiko-bot [this message]
2026-04-07 20:50 ` [PATCH v2 11/16] s390/vfio-ap: Transition device migration state from STOP_COPY " Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 12/16] s390/vfio-ap: Transition device migration state from STOP to RUNNING and vice versa Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 13/16] s390-vfio-ap: Callback to get the current vfio device migration state Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 14/16] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 15/16] s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute Anthony Krowiak
2026-04-07 20:50 ` [PATCH v2 16/16] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak
2026-04-09 14:23 ` [PATCH v2 00/16] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-04-14 14:09 ` Anthony Krowiak
2026-04-21 18:34 ` Anthony Krowiak
2026-04-28 13:10 ` Anthony Krowiak
2026-04-28 13:56   ` Christian Borntraeger
2026-04-28 18:31     ` Anthony Krowiak

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=20260813235317.00E2E1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=akrowiak@linux.ibm.com \
    --cc=borntraeger@linux.ibm.vom \
    --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.