In the Linux kernel, the following vulnerability has been resolved: vfio/type1: fix capmigration information leak Fix an information leak where an uninitialized hole in struct vfioiommutype1infocapmigration on the stack is exposed to userspace. The definition of struct vfioiommutype1infocapmigration contains a hole as shown in this pahole(1) output: struct vfioiommutype1infocapmigration { struct vfioinfocapheader header; /* 0 8 / __u32 flags; / 8 4 / / XXX 4 bytes hole, try to pack / _u64 pgsizebitmap; / 16 8 / _u64 maxdirtybitmapsize; / 24 8 / / size: 32, cachelines: 1, members: 4 / / sum members: 28, holes: 1, sum holes: 4 / / last cacheline: 32 bytes */ }; The capmig variable is filled in without initializing the hole: static int vfioiommumigrationbuildcaps(struct vfioiommu *iommu, struct vfioinfocap caps) { struct vfioiommutype1infocapmigration capmig; capmig.header.id = VFIOIOMMUTYPE1INFOCAPMIGRATION; capmig.header.version = 1; capmig.flags = 0; / support minimum pgsize */ capmig.pgsizebitmap = (sizet)1 << _ffs(iommu->pgsizebitmap); capmig.maxdirtybitmapsize = DIRTYBITMAPSIZEMAX; return vfioinfoaddcapability(caps, &capmig.header, sizeof(capmig)); } The structure is then copied to a temporary location on the heap. At this point it's already too late and ioctl(VFIOIOMMUGETINFO) copies it to userspace later: int vfioinfoaddcapability(struct vfioinfocap *caps, struct vfioinfocapheader *cap, sizet size) { struct vfioinfocapheader *header; header = vfioinfocapadd(caps, size, cap->id, cap->version); if (ISERR(header)) return PTRERR(header); memcpy(header + 1, cap + 1, size - sizeof(*header)); return 0; } This issue was found by code inspection.