Re: [RFC PATCH v3] sparc64: Add support for Application Data Integrity (ADI)

From: Khalid Aziz
Date: Wed Jan 04 2017 - 18:46:07 EST


On 01/04/2017 04:27 PM, Dave Hansen wrote:
On 01/04/2017 02:46 PM, Khalid Aziz wrote:
This patch extends mprotect to enable ADI (TSTATE.mcde), enable/disable
MCD (Memory Corruption Detection) on selected memory ranges, enable
TTE.mcd in PTEs, return ADI parameters to userspace and save/restore ADI
version tags on page swap out/in.

I'm a bit confused why we need all the mechanics with set_swp_pte_at().
For pkeys, for instance, all of the PTEs under a given VMA share a pkey.
When swapping something in, we just get the pkey out of the VMA and
populate the PTE.

ADI doesn't seem to have a similar restriction. The feature is turned
on or off at a VMA granularity, but we do not (or can enforce that all
pages under a given VMA must share a tag.

But this leads to an interesting question: is the tag associated with
the (populated?) pte, or the virtual address? Can you have tags
associated with non-present addresses? What's the mechanism that clears
the tags at munmap() or MADV_FREE time?

Hi Dave,

Tag is associated with virtual address and all pages in a singular VMA do not share the same tag. When a page is swapped out, we need to save the tag that was set on it so we can restore it when we bring the page back in. When MMU translates a vitrtual address into physical address, it expects to see the same tag set on the physical page as is set in the VA before it will allow access. Tags are cleared on a page by NG4clear_page() and NG4clear_user_page() when a page is allocated to a task.


Is the tag storage a precious resource? Can it be exhausted?

There is a metadata area in RAM that stores the tags and it has enough space to cover all the tags for the RAM size.

--
Khalid