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>,
linux-s390@vger.kernel.org,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.vom>,
kvm@vger.kernel.org
Subject: Re: [PATCH v3 8/9] s390/vfio-ap: Fix NULL deref in status_show() during queue probe
Date: Wed, 12 Aug 2026 12:16:39 +0000 [thread overview]
Message-ID: <20260812121639.90CB51F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260812115139.576303-9-akrowiak@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] ABBA deadlock in the probe error path between kernfs active reference and guests_lock.
--
--- Patch [8]: [PATCH v3 8/9] s390/vfio-ap: Fix NULL deref in status_show() during queue probe ---
commit dd5ddcd73e238630c53e21354f9251a158e8bee2
Author: Anthony Krowiak <akrowiak@linux.ibm.com>
s390/vfio-ap: Fix NULL deref in status_show() during queue probe
This commit fixes a NULL pointer dereference in status_show() during queue
probe by acquiring update locks before creating the sysfs attribute group.
This ensures any concurrent read blocks until driver data is set and locks
are released.
> diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
> index cb1e5db69d8a7..3652ba792be73 100644
> --- a/drivers/s390/crypto/vfio_ap_ops.c
> +++ b/drivers/s390/crypto/vfio_ap_ops.c
> @@ -2419,14 +2419,17 @@ void vfio_ap_mdev_unregister(void)
>
> int vfio_ap_mdev_probe_queue(struct ap_device *apdev)
> {
> - int ret;
> + int ret, apqn;
> struct vfio_ap_queue *q;
> DECLARE_BITMAP(apm_filtered, AP_DEVICES);
> struct ap_matrix_mdev *matrix_mdev;
>
> + apqn = to_ap_queue(&apdev->device)->qid;
> + matrix_mdev = get_update_locks_by_apqn(apqn);
> +
> ret = sysfs_create_group(&apdev->device.kobj, &vfio_queue_attr_group);
> if (ret)
> - return ret;
> + goto err_release_locks;
>
> q = kzalloc_obj(*q);
> if (!q) {
> @@ -2434,11 +2437,10 @@ int vfio_ap_mdev_probe_queue(struct ap_device *apdev)
> goto err_remove_group;
> }
[ ... ]
> @@ -2468,6 +2470,8 @@ int vfio_ap_mdev_probe_queue(struct ap_device *apdev)
>
> err_remove_group:
> sysfs_remove_group(&apdev->device.kobj, &vfio_queue_attr_group);
[Severity: High]
Does this create an ABBA deadlock on the error path?
If kzalloc_obj() fails, we jump to err_remove_group and call
sysfs_remove_group() while still holding matrix_dev->guests_lock (acquired
via get_update_locks_by_apqn()).
If a concurrent reader opens the 'status' sysfs file before we hit the error
path, it acquires a kernfs active reference and blocks on:
status_show()
mutex_lock(&matrix_dev->guests_lock);
Then sysfs_remove_group() blocks in kernfs_drain() waiting for the reader to
release its active reference, resulting in a deadlock.
> +err_release_locks:
> + release_update_locks_for_mdev(matrix_mdev);
> return ret;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812115139.576303-1-akrowiak@linux.ibm.com?part=8
next prev parent reply other threads:[~2026-08-12 12:16 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-12 11:51 [PATCH v3 0/9] s390/vfio-ap: Fix bugs in vfio_ap device driver callback functions Anthony Krowiak
2026-08-12 11:51 ` [PATCH v3 1/9] s390/vfio-ap: Fix stale do_remove flag across iterations in vfio_ap_mdev_cfg_remove Anthony Krowiak
2026-08-12 12:12 ` sashiko-bot
2026-08-12 11:51 ` [PATCH v3 2/9] s390/vfio-ap: Fix dereference matrix_mdev->kvm without checking for NULL Anthony Krowiak
2026-08-12 12:12 ` sashiko-bot
2026-08-12 16:05 ` Anthony Krowiak
2026-08-12 11:51 ` [PATCH v3 3/9] s390/vfio-ap: Fix missing lock required to access list of ap_matrix_mdev objects Anthony Krowiak
2026-08-12 12:05 ` sashiko-bot
2026-08-12 15:46 ` Matthew Rosato
2026-08-12 11:51 ` [PATCH v3 4/9] s390/vfio-ap: Fix required lock not held during update of ap_matrix_mdev object Anthony Krowiak
2026-08-12 12:12 ` sashiko-bot
2026-08-12 11:51 ` [PATCH v3 5/9] s390/vfio-ap: Fix control domain removal in vfio_ap_mdev_cfg_remove Anthony Krowiak
2026-08-12 12:05 ` sashiko-bot
2026-08-12 11:51 ` [PATCH v3 6/9] s390/vfio-ap: fix potential use of uninitialized apm_filtered bitmap Anthony Krowiak
2026-08-12 12:04 ` sashiko-bot
2026-08-12 11:51 ` [PATCH v3 7/9] s390/vfio-ap: Fix hot-unplug skipped when last AP adapter or domain removed Anthony Krowiak
2026-08-12 11:59 ` sashiko-bot
2026-08-12 11:51 ` [PATCH v3 8/9] s390/vfio-ap: Fix NULL deref in status_show() during queue probe Anthony Krowiak
2026-08-12 12:16 ` sashiko-bot [this message]
2026-08-12 16:24 ` Anthony Krowiak
2026-08-12 11:51 ` [PATCH v3 9/9] s390/vfio-ap: Fix memory leak when queue removed from host AP config Anthony Krowiak
2026-08-12 12:34 ` sashiko-bot
2026-08-12 16:05 ` Matthew Rosato
2026-08-12 15:30 ` [PATCH v3 0/9] s390/vfio-ap: Fix bugs in vfio_ap device driver callback functions Christian Borntraeger
2026-08-12 15:36 ` Matthew Rosato
2026-08-12 15:39 ` Christian Borntraeger
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=20260812121639.90CB51F000E9@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.