<div dir="ltr">On Thu, May 16, 2013 at 3:10 PM, Filip Pizlo <span dir="ltr"><<a href="mailto:fpizlo@apple.com" target="_blank">fpizlo@apple.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="auto"><div>AFAIK, this is no less robust than an opaque struct. Both handle added functions gracefully, and neither can handle removed functions gracefully unless we do something crazy. The un-opaque struct just makes writing the code a bit easier, both for LLVM and for the client. But that's just my opinion. :-)</div>
</div></blockquote><div><br></div><div style>Unfortunately, it can break in the presence of shared libraries:</div><div style><br></div><div style><div>shared library A, compiled against LLVM API v1:</div><div>void runMCJIT(void) {</div>
<div>  LLVMMCJITMemoryManagerFunctions MCJMM; // v1</div><div>  setupMCJMM(&MCJMM);</div><div>}</div><div><br></div><div>shared library B, recently upgraded, compiled against LLVM API v2:</div><div>void setupMCJMM(LLVMMCJITMemoryManagerFunctions *p) {</div>
<div>  p->FunctionAddedInV2 = ...; // BOOM, overwriting caller's stack</div><div>}</div><div><br></div><div style>Avoiding this kind of issue would force the API clients to replicate the brittle sizeof checking in their own code.</div>
<div style><br></div><div style>Slightly related: Have you considered the security implications of using LLVM in the browser? For example, AFAIK most LLVM code is not written to properly handle OOM conditions and may be a vector for security issues. See <<a href="http://comments.gmane.org/gmane.comp.compilers.clang.devel/19981">http://comments.gmane.org/gmane.comp.compilers.clang.devel/19981</a>>, which is about clang, but I think also extends to LLVM itself. tl;dr,  Doug Gregor says: "<span style="line-height:19px;text-align:justify">a safety-critical application should not be using Clang in-process". Since LLVM is being used to compile code that interacts with the page, sandboxing LLVM will not necessarily be enough protection since an exploit could potentially hijack the compilation and return malicious code.</span></div>
</div><div style><br></div><div style>-- Sean Silva</div></div></div></div>