HI Mike,

This is fundamentally about *integrity* of the runtime. It follows there are 
security implications, but it’s still fundamentally an integrity issue and 
guarding an unsafe operation with a Security Manager is unfortunately an 
insufficient solution.

Paul.

On 7 Sep 2015, at 18:41, Mike Hearn <he...@vinumeris.com> wrote:

> https://bugs.openjdk.java.net/browse/JDK-4724038
> 
> This bug (really: lack of feature) filed in 2002 can be worked around by
> using internal APIs. However, post jigsaw, that won't be so easy any more.
> I have a bit of code that uses the workaround, so, I'd rather it didn't
> break.
> 
> I don't have an OpenJDK bug tracker account so I'll comment here
> instead. Mark Reinhold said:
> 
> "We'd be thrilled if someone could come up with a workable solution, so
> we'll leave this bug open in the hope that it will attract attention from
> someone more clever than we are."
> 
> The underlying issue is that if you can unmap a file mapping, a racing
> thread could remap something else into the same place, confusing secure
> code that still has access to the MappedByteBuffer object. A simple if()
> check could avoid this, but at the cost of slowing down access.
> 
> I have two suggested fixes:
> 
> 1. Have an unmap method that throws if a SecurityManager is present.
> Non-secure code that owns its own JVM (i.e. nearly all of it) would then be
> able to unmap files and delete them on Windows. Sandboxed code would still
> suffer, but OK, so be it.
> 
> 2. Have an internal subclass or wrapper object around MappedByteBuffer that
> is only used when a SecurityManager is present, which does the check
> against the volatile field. The JVM should optimise out the virtual method
> call or inline the wrapper code, thus ensuring only sandboxed code pays the
> cost.
> 
> In both cases, an unmap method could be added in such a way that the race
> condition Mark describes should not be an issue.
> 
> Thoughts?

Reply via email to