<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Sep 6, 2015 at 3:37 AM, Gary Guo <span dir="ltr"><<a href="mailto:nbdd0121@hotmail.com" target="_blank">nbdd0121@hotmail.com</a>></span> wrote:<br><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><div dir="ltr">I think weak references are discussed before, and get postponed because it can cause information leaks between realms.<br></div></div></blockquote><div><br></div><div><a href="http://wiki.ecmascript.org/doku.php?id=strawman:weak_refs#security">http://wiki.ecmascript.org/doku.php?id=strawman:weak_refs#security</a> says<br></div><div><br></div><div><blockquote 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" class="gmail_quote">To plug this leak, a weak reference created within realm A should only point weakly within realm A. When set to point at an object from another realm, it should either point strongly or throw an error, depending on whether a surprising leak or a surprising error is expected to be more inconvenient for the caller. Security demands only that such inter-realm references not point weakly.<br></blockquote><div><br></div></div><div>This requires an object model change: functions are already specific to their realm of birth. This solution to the information leakage problem requires that all objects that could be weakly pointed to are already specific to the realm of their birth. Many implementations already do the necessary bookkeeping to keep track of an object's birth realm, but we would not need to mandate that bookkeeping and include it in the object model.</div><div><br></div><div><div><div> </div><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">See <a href="https://mail.mozilla.org/pipermail/es-discuss/2013-January/028542.html" class="" target="_blank" title="https://mail.mozilla.org/pipermail/es-discuss/2013-January/028542.html" rel="nofollow" style="color:purple;text-decoration:none;padding:1px 0px 1px 16px;background:url(http://wiki.ecmascript.org/lib/tpl/default/images/link_icon.gif) 0px 1px no-repeat transparent">https://mail.mozilla.org/pipermail/es-discuss/2013-January/028542.html</a> for a nice refinement for pointing weakly at objects from a set of realms.</blockquote></div></div><div><br></div><div>Since then I have come to the opinion that an inter-realm weak reference should silently point strongly, not throw an error. <br></div><div><br></div><div><br></div><div>The other security issue is how to make the WeakRef constructor available at all within a realm, since it should not be available to unprivileged code within a defensive realm. At </div><div><a href="https://github.com/whatwg/loader/issues/34#issuecomment-126768933">https://github.com/whatwg/loader/issues/34#issuecomment-126768933</a></div><div><br></div><div><blockquote 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" class="gmail_quote"><span style="line-height:24.8889px">The loader is the third example of an (existing or proposed) primordial object that does grant authority:</span><ul style="padding:0px 0px 0px 2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px"><li>The global object, for which we rejected <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0px;margin:0px;border-radius:3px;background-color:rgba(0,0,0,0.0392157)">Reflect.global</code> for the same reason.</li></ul><ul style="padding:0px 0px 0px 2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px"><li>The proposed WeakReference factory (e.g., <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0px;margin:0px;border-radius:3px;background-color:rgba(0,0,0,0.0392157)">WeakRef</code> or <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0px;margin:0px;border-radius:3px;background-color:rgba(0,0,0,0.0392157)">makeWeakRef</code>) which makes GC observable, opening a covert channel. This is why we carefully separated WeakMap from any notion of WeakRef.</li></ul><ul style="padding:0px 0px 0px 2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px"><li>The default loader, which causes external I/O and internally has a mutable mapping from module names to mutable module instances.</li></ul>We do need a good way to provide standard access to authority-providing primordials such as these. In particular, I think all three of these are well motivated and should somehow become standard. But, because they provide authority they should be clearly separated from the means of providing abstractions that are safely sharable.</blockquote><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important"><br></p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important">From the way the discussion proceeded, it seems an acceptable place to put these is on a global System object, i.e.,</p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important"><br></p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important">System.global</p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important">System.defaultLoader</p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important">System.WeakRef</p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important"><br></p><p style="margin-top:0px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:14px;line-height:24.8889px;margin-bottom:0px!important"><br></p></div><div><br></div></div>-- <br><div class="gmail_signature">    Cheers,<br>    --MarkM</div>
</div></div>