Re: [PATCH v7 03/14] x86/cet/ibt: Add IBT legacy code bitmap setup function

From: Yu-cheng Yu
Date: Fri Jun 14 2019 - 13:26:19 EST

On Fri, 2019-06-14 at 09:13 -0700, Dave Hansen wrote:
> On 6/14/19 8:25 AM, Yu-cheng Yu wrote:
> > On Mon, 2019-06-10 at 15:59 -0700, Dave Hansen wrote:
> > > On 6/10/19 3:40 PM, Yu-cheng Yu wrote:
> > > > Ok, we will go back to do_mmap() with MAP_PRIVATE, MAP_NORESERVE and
> > > > VM_DONTDUMP. The bitmap will cover only 48-bit address space.
> > >
> > > Could you make sure to discuss the downsides of only doing a 48-bit
> > > address space?
> >
> > The downside is that we cannot load legacy lib's above 48-bit address space,
> > but
> > currently ld-linux does not do that. Should ld-linux do that in the future,
> > dlopen() fails. Considering CRIU migration, we probably need to do this
> > anyway?
> Again, I was thinking about JITs. Please remember that not all code in
> the system is from files on the disk. Please. We need to be really,
> really sure that we don't addle this implementation by being narrow
> minded about this.
> Please don't forget about JITs.
> > > What are the reasons behind and implications of VM_DONTDUMP?
> >
> > The bitmap is very big.
> Really? It's actually, what, 8*4096=32k, so 1/32,768th of the size of
> the libraries legacy libraries you load? Do our crash dumps really not
> know how to represent or deal with sparse mappings?

Ok, even the core dump is not physically big, its size still looks odd, right?
Could this also affect how much time for GDB to load it.
We will only mmap the bitmap when the first time the bitmap prctl is called.

I have a related question:

Do we allow the application to read the bitmap, or any fault from the
application on bitmap pages?

We populate a page only when bits are set from a prctl.
Any other fault means either the application tries to find out an address
range's status or it executes legacy code that has not been marked in the

> > In GDB, it should be easy to tell why a control-protection fault occurred
> > without the bitmap.
> How about why one didn't happen?

We'll dump the bitmap if it is allocated.