From: Stefan Hajnoczi <stefanha@redhat.com>
To: kvm@vger.kernel.org
Cc: Alex Williamson <alex.williamson@redhat.com>, sgarzare@redhat.com
Subject: VFIO_IOMMU_GET_INFO capability struct alignment
Date: Tue, 1 Aug 2023 11:38:46 -0400 [thread overview]
Message-ID: <20230801153846.GA1371443@fedora> (raw)
[-- Attachment #1: Type: text/plain, Size: 1322 bytes --]
Hi,
It appears that ioctl(VFIO_IOMMU_GET_INFO) can produce misaligned
capability structures. Userspace workarounds exist but I wanted to ask
whether the kernel can align capability structures to save all userspace
programs the trouble?
The issue is:
struct vfio_iommu_type1_info_dma_avail {
struct vfio_info_cap_header header; /* 0 8 */
__u32 avail; /* 8 4 */
/* size: 12, cachelines: 1, members: 2 */
/* last cacheline: 12 bytes */
};
Once this capability is added, the next capability will be 4-byte
aligned but not 8-byte aligned. If there are __u64 fields in the next
capability, then they will be misaligned.
This was noticed when investigating a bug in userspace code that uses
ioctl(VFIO_IOMMU_GET_INFO):
https://gitlab.com/pci-driver/pci-driver/-/merge_requests/2#note_1495734084
One possible solution is to modify vfio_info_cap_add() so that
capability structures are always rounded up to 8 bytes. This does not
break the uapi because capability structure offsets are described at
runtime via the cap_offset and header->next fields. Existing userspace
programs would continue to work and all programs would find that
capability structures are now aligned.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next reply other threads:[~2023-08-01 15:40 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-01 15:38 Stefan Hajnoczi [this message]
2023-08-01 16:17 ` VFIO_IOMMU_GET_INFO capability struct alignment Alex Williamson
2023-08-01 19:24 ` Stefan Hajnoczi
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=20230801153846.GA1371443@fedora \
--to=stefanha@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=sgarzare@redhat.com \
/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.