Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/lib/librumpuser
Antti Kantee wrote:
> Ok, one more try, this time with an example:
>
> * fact: interface will be used to say "I have loaded code here, please
> arrange things so that it can be executed"
> * fact: you want to call the interface "sync icache" and possess those
> semantics
>
> the example:
> Let's assume some fictional platform where you need to sign newly loaded
> code before it can execute. Should the implementation of "sync icache" on
> that platform sign code? If not, you can't execute the code, which was the
> original purpose. If yes, you've failed to implement the interface
> correctly, because that might not be what the caller wants at all. Will
> such a platform be supported? Who knows. Is it cause to leave known
> problems into the interface? Definitely not!
You're over generalizing. You can't generate and sign your own code
without posing a security risk. This case deserves a special interface,
you can't just bring it under umbrella of a single hypercall that does
everything to turn memory into code.
I'm following a common practice of calling __clear_cache for JIT code
except that I wrap it as a hypercall.
> If you don't want to solve anything except your immediate problem, that's
> more than fair enough (we've all been there),
We've seen many examples of over generalizing too.
My need is driven by existing sljit code which follows a common practice
of calling __clear_cache() gcc extension. If you want to generalize it,
we will need to work with sljit upstream to design a new interface.
Alternatively, we can disable jit code on arm and mips and give intel
a favor.
> but it needs to be done
> without breaking things for everyone else or knowingly introducing
> suboptimal interfaces that everyone else will suffer from.
"Everyone else" is a multi-dimentional term. Are you referring to users
of other operating systems or users of arches where sync_icache is noop
or a hypotetical arch where you need to sign code before running it?
(well, it's probably not hypotetical anymore, I vaguely remember reading
about a similar feature few months ago).
As I stated in the earlier email, I can build my rumpkern stuff
conditionally if you split librumpuser into NetBSD and non-NetBSD
versions. I'm going to check how it will work with a private component.
Alex
Home |
Main Index |
Thread Index |
Old Index