Message ID | 20240202215332.118728-16-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | libvhost-user: support more memslots and cleanup memslot handling code | expand |
On Fri, Feb 2, 2024 at 4:56 PM David Hildenbrand <david@redhat.com> wrote: > > We already use MADV_NORESERVE to deal with sparse memory regions. Let's > also set madvise(MADV_DONTDUMP), otherwise a crash of the process can > result in us allocating all memory in the mmap'ed region for dumping > purposes. > > This change implies that the mmap'ed rings won't be included in a > coredump. If ever required for debugging purposes, we could mark only > the mapped rings MADV_DODUMP. > > Ignore errors during madvise() for now. > > Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Raphael Norwitz <raphael@enfabrica.net> > --- > subprojects/libvhost-user/libvhost-user.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c > index 738e84ab63..26c289518c 100644 > --- a/subprojects/libvhost-user/libvhost-user.c > +++ b/subprojects/libvhost-user/libvhost-user.c > @@ -458,6 +458,12 @@ _vu_add_mem_reg(VuDev *dev, VhostUserMemoryRegion *msg_region, int fd) > DPRINT(" mmap_addr: 0x%016"PRIx64"\n", > (uint64_t)(uintptr_t)mmap_addr); > > +#if defined(__linux__) > + /* Don't include all guest memory in a coredump. */ > + madvise(mmap_addr, msg_region->memory_size + mmap_offset, > + MADV_DONTDUMP); > +#endif > + > /* Shift all affected entries by 1 to open a hole at idx. */ > r = &dev->regions[idx]; > memmove(r + 1, r, sizeof(VuDevRegion) * (dev->nregions - idx)); > -- > 2.43.0 > >
diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c index 738e84ab63..26c289518c 100644 --- a/subprojects/libvhost-user/libvhost-user.c +++ b/subprojects/libvhost-user/libvhost-user.c @@ -458,6 +458,12 @@ _vu_add_mem_reg(VuDev *dev, VhostUserMemoryRegion *msg_region, int fd) DPRINT(" mmap_addr: 0x%016"PRIx64"\n", (uint64_t)(uintptr_t)mmap_addr); +#if defined(__linux__) + /* Don't include all guest memory in a coredump. */ + madvise(mmap_addr, msg_region->memory_size + mmap_offset, + MADV_DONTDUMP); +#endif + /* Shift all affected entries by 1 to open a hole at idx. */ r = &dev->regions[idx]; memmove(r + 1, r, sizeof(VuDevRegion) * (dev->nregions - idx));
We already use MADV_NORESERVE to deal with sparse memory regions. Let's also set madvise(MADV_DONTDUMP), otherwise a crash of the process can result in us allocating all memory in the mmap'ed region for dumping purposes. This change implies that the mmap'ed rings won't be included in a coredump. If ever required for debugging purposes, we could mark only the mapped rings MADV_DODUMP. Ignore errors during madvise() for now. Signed-off-by: David Hildenbrand <david@redhat.com> --- subprojects/libvhost-user/libvhost-user.c | 6 ++++++ 1 file changed, 6 insertions(+)