RE: Mprotect needs arch hook for updated PTE settings

From: Seth, Rohit
Date: Wed Mar 16 2005 - 14:21:00 EST


Zoltan Menyhart <> wrote on Wednesday, March 16, 2005 4:58 AM:

> The text segment can be huge. There is no reason to flush all the text
> segment every time when ld-linux-ia64.so.* patches an instruction and
> changes the protection.
>

You flush only the pages that got written and thus marked for defered
flushing by kernel. Even though the whole region may have got new
permissions.

> I think the solution should consist of these two measures:
>
> 1. Let's say that if an VMA is "executable", then it remains
> "executable" for ever, i.e. the mprotect() keeps the PROT_EXEC bit.
> As a result, if a page is faulted in for this VMA in the mean
> time, the old good mechanism makes sure that the I-caches are
> flushed.
>
> 2. Let's modify ld-linux-<arch>.so.*: having patched an instruction,
> it should take the appropriate, architecture dependent measure,
> e.g. for ia64, it should issue an "fc" instruction.
>

The generic part of kernel is clearly ensuring that caches and TLBs are
flushed whenever there is any change in permission. IA-64 specific code
in kernel, when the COW breaks, marks the new page for defered
flushing.....to be used in future if the page ever gets PROT_EXEC.
Later when the app again changes the permission to PROT_EXEC, the arch
specific code in kernel should actually make sure that if a page is
marked for defered flushing then it is done.

> (Who cares for a debugger ? It should know what it does ;-).)
>
> I think there is no need for any extra flushes.

No, there will be no extra flushes.....this hook ensures that IA-64 arch
specific code actually gets the chance to do lazy flushing when
required.

I will be sending an updated patch based on few comments that I got from
Andrew and Linus.

-rohit
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/