<div>Hello !<br></div><div><br></div><div>I'm currently trying to compare every Spectre V1/V1.1/V2 mitigations proposed by researchers and software developers, so I'm not really thinking of some new mitigations ... <br></div><div>But publicly available working solutions are scarce, and I stumbled upon clang's SLH that sounded interesting !<br></div><div><div>My main interrogation is the following: given a medium/big project, is there an existing tool that detects automatically most of Spectre-related leakage and to warns the developer about it ? I found static analysis tools but couldn't make them work on a huge project either.<br></div><div>As you said, SLH may be pretty noisy. I looked upon the -mllvm -print-after="x86-slh" option but as I'm not really familiar with LLVM's IR it didn't mean a lot to me haha. <br></div><div>I'm not really sure if a more fine grained detection is possible, grsecurity seem to say that it is in fact doable (they made a GCC plugin, <a href="https://grsecurity.net/respectre_announce.php">https://grsecurity.net/respectre_announce.php</a>) but I couldn't put my hands on theirs.<br></div><div><br></div><div>Anyway thanks for your answer !<br></div><div><br></div><div>milsegv<br></div></div><div><br></div><div>‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐<br></div><div> On Thursday, April 23, 2020 9:59 PM, Zola Bridges <zbrid@google.com> wrote:<br></div><div> <br></div><blockquote class="protonmail_quote" type="cite"><div dir="ltr"><div>Hi milsegv,<br></div><div><br></div><div>I work on SLH. I haven't thought about the feature you'd like to see. It sounds pretty interesting. What would you like to use it for? Are you trying to learn more about how SLH works or are you hoping to use this feature for your project? I'm also interested in what you're working on for Spectre v1 detection if you'd like to share!<br></div><div><br></div><div>I'm not sure how to go from the Machine IR that the SLH pass works on to the original C++ source code, so I can't give you advice on implementing that in LLVM. Hopefully someone else can chime in who understands the LLVM stack better than me.<br></div><div><br></div><div><div><b>If you'd like to get a better understanding of how SLH works:<br></b></div><div><br></div><div><div>Have you looked into using the LLVM_DEBUG macro? You can use it to print where you want from the SLH pass.<br></div><div>Check it out here: <a href="https://llvm.org/docs/ProgrammersManual.html#the-llvm-debug-macro-and-debug-option">https://llvm.org/docs/ProgrammersManual.html#the-llvm-debug-macro-and-debug-option</a> You'll have to add it where you want to see what SLH is doing in the X86SpeculativeLoadHardening.cpp file and rebuild from source to get the new error messages.<br></div></div><div><br></div><div>Another useful thing for you might be to pass either of these to clang when you enable -mspeculative-load-hardening<br></div><div><ul><li>-mllvm -print-after-all<br></li><li>-mllvm -print-after="x86-slh"<br></li></ul></div><div>This will let you look at the code before and after the SLH transformations.<br></div><div><br></div><div><b>If you want to implement this new feature that you want to build on:</b><br></div><div><b></b><br></div><div>One thing about your question to print where SLH applies the mitigation. I'd say the mitigation has multiple parts and it may be easier to understand your problem if you get more granular about what you mean. Do you want to know which loads in the C++ source get hardened? Or which conditions had instrumentation added? There are the instruction sequences that are added to track the predicate state and there are the instruction sequences that are added to mask data dependent loads and probably other parts that I can't think of off the top of my head. To figure out what you want to print it might be helpful to read this design doc if you haven't seen it: <a href="https://llvm.org/docs/SpeculativeLoadHardening.html">https://llvm.org/docs/SpeculativeLoadHardening.html</a>.<br></div><div><br></div><div><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr">Zola Bridges<br></div></div></div><div><br></div></div></div></div><div><br></div><div class="gmail_quote"><div dir="ltr">On Wed, Apr 22, 2020 at 9:52 AM Praveen Velliengiri via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi<br></div><div>I think llvm-dev list (CC'ed) have more visibility in this.<br></div></div><div><br></div><div class="gmail_quote"><div dir="ltr">On Wed, 22 Apr 2020 at 22:18, milsegv via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Hello everyone,<br></div><div><br></div><div>It may not be the best place to ask this but I found nothing on the internet about it. <br></div><div>I'm working on Spectre V1 detection and stumbled upon the mitigation provided by clang, the "-mspeculative-load-hardening" option. I found it really interesting, and my question is the following: is there a way to tweak the compiler to print a message whenever it applies the mitigation, telling the user at which line of its code it applied the patch ?<br></div><div>I have no idea of the difficulty of such a feature, but I'm ready to learn how to do it myself if anybody has time to tell me how to !<br></div><div><br></div><div>Thanks for any help,<br></div><div>milsegv<br></div><div>_______________________________________________<br></div><div> cfe-dev mailing list<br></div><div> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br></div><div> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br></div></blockquote></div><div>_______________________________________________<br></div><div> cfe-dev mailing list<br></div><div> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br></div><div> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br></div></blockquote></div></blockquote><div><br></div>