All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: kvm@vger.kernel.org, sgarzare@redhat.com
Subject: Re: VFIO_IOMMU_GET_INFO capability struct alignment
Date: Tue, 1 Aug 2023 15:24:43 -0400	[thread overview]
Message-ID: <20230801192443.GB1414936@fedora> (raw)
In-Reply-To: <20230801101730.607d96ab.alex.williamson@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1741 bytes --]

On Tue, Aug 01, 2023 at 10:17:30AM -0600, Alex Williamson wrote:
> On Tue, 1 Aug 2023 11:38:46 -0400
> Stefan Hajnoczi <stefanha@redhat.com> wrote:
> 
> > 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.
> 
> Yes, I think the helpers should automatically align each added
> capability.  Thanks,

Thanks, I will give it a try and post a patch.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

      reply	other threads:[~2023-08-01 19:27 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-01 15:38 VFIO_IOMMU_GET_INFO capability struct alignment Stefan Hajnoczi
2023-08-01 16:17 ` Alex Williamson
2023-08-01 19:24   ` Stefan Hajnoczi [this message]

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=20230801192443.GB1414936@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.