[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-commits
Subject:    Re: r243206 - [CodeGen] Don't UBSan-ize the argument to __builtin_frame_address
From:       Richard Smith <richard () metafoo ! co ! uk>
Date:       2015-07-30 3:59:37
Message-ID: CAOfiQqnpdz4mkJtJ15xxZ+_zibWTF4LAvm-7fUoJApuzQb1aNg () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Aye.

On Tue, Jul 28, 2015 at 5:57 PM, Hans Wennborg <hans@chromium.org> wrote:

> Sure. Richard, what say you?
>
> On Tue, Jul 28, 2015 at 3:54 PM, Pieb, Wolfgang
> <Wolfgang_Pieb@playstation.sony.com> wrote:
> > Hi, would it be possible to put this fix into the 3.7 branch?
> >
> > Thanks
> >
> >> -----Original Message-----
> >> From: cfe-commits-bounces@cs.uiuc.edu [mailto:cfe-commits-
> >> bounces@cs.uiuc.edu] On Behalf Of David Majnemer
> >> Sent: Friday, July 24, 2015 10:57 PM
> >> To: cfe-commits@cs.uiuc.edu
> >> Subject: r243206 - [CodeGen] Don't UBSan-ize the argument to
> >> __builtin_frame_address
> >>
> >> Author: majnemer
> >> Date: Sat Jul 25 00:57:24 2015
> >> New Revision: 243206
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=243206&view=rev
> >> Log:
> >> [CodeGen] Don't UBSan-ize the argument to __builtin_frame_address
> >>
> >> __builtin_frame_address requires its argument to be a constant
> >> expression which already implies that it cannot have undefined
> >> behavior.
> >> However, we used EmitScalarExpr to emit the argument causing UBSan to
> >> try to check for overflow.
> >>
> >> Instead, use the constant expression emission system.
> >>
> >> This fixes PR24256.
> >>
> >> Modified:
> >>     cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> >>     cfe/trunk/test/CodeGen/integer-overflow.c
> >>
> >> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> >> URL: http://llvm.org/viewvc/llvm-
> >> project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=243206&r1=243205&r2=243
> >> 206&view=diff
> >> =======================================================================
> >> =======
> >> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> >> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Sat Jul 25 00:57:24 2015
> >> @@ -866,14 +866,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(
> >>                                        llvm::ConstantInt::get(Int32Ty,
> >> Offset)));
> >>    }
> >>    case Builtin::BI__builtin_return_address: {
> >> -    Value *Depth = EmitScalarExpr(E->getArg(0));
> >> -    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
> >> +    Value *Depth =
> >> +        CGM.EmitConstantExpr(E->getArg(0), getContext().UnsignedIntTy,
> >> + this);
> >>      Value *F = CGM.getIntrinsic(Intrinsic::returnaddress);
> >>      return RValue::get(Builder.CreateCall(F, Depth));
> >>    }
> >>    case Builtin::BI__builtin_frame_address: {
> >> -    Value *Depth = EmitScalarExpr(E->getArg(0));
> >> -    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
> >> +    Value *Depth =
> >> +        CGM.EmitConstantExpr(E->getArg(0), getContext().UnsignedIntTy,
> >> + this);
> >>      Value *F = CGM.getIntrinsic(Intrinsic::frameaddress);
> >>      return RValue::get(Builder.CreateCall(F, Depth));
> >>    }
> >>
> >> Modified: cfe/trunk/test/CodeGen/integer-overflow.c
> >> URL: http://llvm.org/viewvc/llvm-
> >> project/cfe/trunk/test/CodeGen/integer-
> >> overflow.c?rev=243206&r1=243205&r2=243206&view=diff
> >> =======================================================================
> >> =======
> >> --- cfe/trunk/test/CodeGen/integer-overflow.c (original)
> >> +++ cfe/trunk/test/CodeGen/integer-overflow.c Sat Jul 25 00:57:24 2015
> >> @@ -72,4 +72,11 @@ void test1() {
> >>    // TRAPV: add i8 {{.*}}, 1
> >>    // CATCH_UB: add i8 {{.*}}, 1
> >>    ++PR9350;
> >> +
> >> +  // PR24256: don't instrument __builtin_frame_address.
> >> +  __builtin_frame_address(0 + 0);
> >> +  // DEFAULT:  call i8* @llvm.frameaddress(i32 0)
> >> +  // WRAPV:    call i8* @llvm.frameaddress(i32 0)
> >> +  // TRAPV:    call i8* @llvm.frameaddress(i32 0)
> >> +  // CATCH_UB: call i8* @llvm.frameaddress(i32 0)
> >>  }
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits@cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>

[Attachment #5 (text/html)]

<div dir="ltr">Aye.<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, \
Jul 28, 2015 at 5:57 PM, Hans Wennborg <span dir="ltr">&lt;<a \
href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>&gt;</span> \
wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px \
#ccc solid;padding-left:1ex">Sure. Richard, what say you?<br> <div \
class="HOEnZb"><div class="h5"><br> On Tue, Jul 28, 2015 at 3:54 PM, Pieb, \
Wolfgang<br> &lt;<a href="mailto:Wolfgang_Pieb@playstation.sony.com">Wolfgang_Pieb@playstation.sony.com</a>&gt; \
wrote:<br> &gt; Hi, would it be possible to put this fix into the 3.7 branch?<br>
&gt;<br>
&gt; Thanks<br>
&gt;<br>
&gt;&gt; -----Original Message-----<br>
&gt;&gt; From: <a href="mailto:cfe-commits-bounces@cs.uiuc.edu">cfe-commits-bounces@cs.uiuc.edu</a> \
[mailto:<a href="mailto:cfe-commits-">cfe-commits-</a><br> &gt;&gt; <a \
href="mailto:bounces@cs.uiuc.edu">bounces@cs.uiuc.edu</a>] On Behalf Of David \
Majnemer<br> &gt;&gt; Sent: Friday, July 24, 2015 10:57 PM<br>
&gt;&gt; To: <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
&gt;&gt; Subject: r243206 - [CodeGen] Don&#39;t UBSan-ize the argument to<br>
&gt;&gt; __builtin_frame_address<br>
&gt;&gt;<br>
&gt;&gt; Author: majnemer<br>
&gt;&gt; Date: Sat Jul 25 00:57:24 2015<br>
&gt;&gt; New Revision: 243206<br>
&gt;&gt;<br>
&gt;&gt; URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_vi \
ewvc_llvm-2Dproject-3Frev-3D243206-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BS \
qEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=T3cS7qAdzRCR3x5NDzrVDkThGnXc3_quGPnwVKo29NA&s=3r0A6AZoojgR1NoIdocn8dwpiZidM2rSV1r0TWSolHk&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243206&amp;view=rev</a><br>
 &gt;&gt; Log:<br>
&gt;&gt; [CodeGen] Don&#39;t UBSan-ize the argument to __builtin_frame_address<br>
&gt;&gt;<br>
&gt;&gt; __builtin_frame_address requires its argument to be a constant<br>
&gt;&gt; expression which already implies that it cannot have undefined<br>
&gt;&gt; behavior.<br>
&gt;&gt; However, we used EmitScalarExpr to emit the argument causing UBSan to<br>
&gt;&gt; try to check for overflow.<br>
&gt;&gt;<br>
&gt;&gt; Instead, use the constant expression emission system.<br>
&gt;&gt;<br>
&gt;&gt; This fixes PR24256.<br>
&gt;&gt;<br>
&gt;&gt; Modified:<br>
&gt;&gt;        cfe/trunk/lib/CodeGen/CGBuiltin.cpp<br>
&gt;&gt;        cfe/trunk/test/CodeGen/integer-overflow.c<br>
&gt;&gt;<br>
&gt;&gt; Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp<br>
&gt;&gt; URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_vi \
ewvc_llvm-2D&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREe \
q0cCxk&m=T3cS7qAdzRCR3x5NDzrVDkThGnXc3_quGPnwVKo29NA&s=kW3XTHF0UroSUExH3uYUYb13AdVvbzHcy3rw9GsgpWU&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br> &gt;&gt; \
project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=243206&amp;r1=243205&amp;r2=243<br> \
&gt;&gt; 206&amp;view=diff<br> &gt;&gt; \
=======================================================================<br> &gt;&gt; \
=======<br> &gt;&gt; --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)<br>
&gt;&gt; +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Sat Jul 25 00:57:24 2015<br>
&gt;&gt; @@ -866,14 +866,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(<br>
&gt;&gt;                                                            \
llvm::ConstantInt::get(Int32Ty,<br> &gt;&gt; Offset)));<br>
&gt;&gt;      }<br>
&gt;&gt;      case Builtin::BI__builtin_return_address: {<br>
&gt;&gt; -      Value *Depth = EmitScalarExpr(E-&gt;getArg(0));<br>
&gt;&gt; -      Depth = Builder.CreateIntCast(Depth, Int32Ty, false);<br>
&gt;&gt; +      Value *Depth =<br>
&gt;&gt; +            CGM.EmitConstantExpr(E-&gt;getArg(0), \
getContext().UnsignedIntTy,<br> &gt;&gt; + this);<br>
&gt;&gt;         Value *F = CGM.getIntrinsic(Intrinsic::returnaddress);<br>
&gt;&gt;         return RValue::get(Builder.CreateCall(F, Depth));<br>
&gt;&gt;      }<br>
&gt;&gt;      case Builtin::BI__builtin_frame_address: {<br>
&gt;&gt; -      Value *Depth = EmitScalarExpr(E-&gt;getArg(0));<br>
&gt;&gt; -      Depth = Builder.CreateIntCast(Depth, Int32Ty, false);<br>
&gt;&gt; +      Value *Depth =<br>
&gt;&gt; +            CGM.EmitConstantExpr(E-&gt;getArg(0), \
getContext().UnsignedIntTy,<br> &gt;&gt; + this);<br>
&gt;&gt;         Value *F = CGM.getIntrinsic(Intrinsic::frameaddress);<br>
&gt;&gt;         return RValue::get(Builder.CreateCall(F, Depth));<br>
&gt;&gt;      }<br>
&gt;&gt;<br>
&gt;&gt; Modified: cfe/trunk/test/CodeGen/integer-overflow.c<br>
&gt;&gt; URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_vi \
ewvc_llvm-2D&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREe \
q0cCxk&m=T3cS7qAdzRCR3x5NDzrVDkThGnXc3_quGPnwVKo29NA&s=kW3XTHF0UroSUExH3uYUYb13AdVvbzHcy3rw9GsgpWU&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br> &gt;&gt; \
project/cfe/trunk/test/CodeGen/integer-<br> &gt;&gt; \
overflow.c?rev=243206&amp;r1=243205&amp;r2=243206&amp;view=diff<br> &gt;&gt; \
=======================================================================<br> &gt;&gt; \
=======<br> &gt;&gt; --- cfe/trunk/test/CodeGen/integer-overflow.c (original)<br>
&gt;&gt; +++ cfe/trunk/test/CodeGen/integer-overflow.c Sat Jul 25 00:57:24 2015<br>
&gt;&gt; @@ -72,4 +72,11 @@ void test1() {<br>
&gt;&gt;      // TRAPV: add i8 {{.*}}, 1<br>
&gt;&gt;      // CATCH_UB: add i8 {{.*}}, 1<br>
&gt;&gt;      ++PR9350;<br>
&gt;&gt; +<br>
&gt;&gt; +   // PR24256: don&#39;t instrument __builtin_frame_address.<br>
&gt;&gt; +   __builtin_frame_address(0 + 0);<br>
&gt;&gt; +   // DEFAULT:   call i8* @llvm.frameaddress(i32 0)<br>
&gt;&gt; +   // WRAPV:      call i8* @llvm.frameaddress(i32 0)<br>
&gt;&gt; +   // TRAPV:      call i8* @llvm.frameaddress(i32 0)<br>
&gt;&gt; +   // CATCH_UB: call i8* @llvm.frameaddress(i32 0)<br>
&gt;&gt;   }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; cfe-commits mailing list<br>
&gt;&gt; <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
&gt;&gt; <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" \
rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
 </div></div></blockquote></div><br></div></div>



_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic