<div dir="ltr"><div>Hi Tim,</div><div><br></div><div>Thanks for your fast response.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Dec 22, 2019 at 2:44 PM Tim Northover <<a href="mailto:t.p.northover@gmail.com">t.p.northover@gmail.com</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">Hi Priyanka,<br>
<br>
On Sat, 21 Dec 2019 at 14:09, Priyanka Panigrahi via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
> 1. Whether the memory contents assigned for a function are accessible after we return from that function? If yes, how can we access it?<br>
<br>
There's no well defined way to access that memory, but whatever was<br>
stored there before doesn't get actively cleared to 0 by LLVM so some<br>
kinds of buffer overrun can see what's there, as can future function<br>
calls that reuse the space. Both would be undefined behaviour though.<br></blockquote><div><br></div><div>You mean still one can access that memory.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> 2. Does llvm delete the stackframe assigned for a specific function, after we return from that function?<br>
<br>
I'd say yes, but it kind of depends on what you mean by "delete". It<br>
certainly deallocates the frame.<br></blockquote><div><br></div><div>I mean clearing the original content of the memory by assigning 0 or some random values. Although it deallocates, the original content is still there. Right?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> 3. If not, how can we delete the stackframe or clear the memory content after we return from the function? Where do we need to change, in the assembly or llvm source?<br>
<br>
If you want to prevent all access for security reasons, you'd probably<br>
have to modify lib/Target/XYZ/XYZFrameLowering.cpp for each target to<br>
insert some equivalent of memset(sp, 0, frame_size) at every function<br>
return. I don't think there's a robust way to achieve it in IR alone.<br></blockquote><div><br></div><div>Thank you for this pointer. I will check it out.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Cheers.<br>
<br>
Tim.<br></blockquote><div><br></div><div>If you could share with me some publications which work on similar stuff, it would be great. <br></div><div><br></div><div>Thank you for your time.</div><div><br></div><div>Regards,</div><div>Priyanka<br></div><div> </div></div></div>