Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9d7990

Browse files
author
Robert Marsh
committed
C++: make unaliased_ssa IR stage sound
1 parent d95ef89 commit a9d7990

9 files changed

Lines changed: 45 additions & 7 deletions

File tree

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ predicate allocationEscapes(Configuration::Allocation allocation) {
325325
exists(IREscapeAnalysisConfiguration config |
326326
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
327327
)
328+
or
329+
exists(Configuration::StageEscapeConfiguration config |
330+
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
331+
)
328332
}
329333

330334
/**

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,11 @@ class DynamicAllocation extends Allocation, TDynamicAllocation {
138138

139139
final override predicate alwaysEscapes() { none() }
140140
}
141+
142+
class StageEscapeConfiguration extends string {
143+
StageEscapeConfiguration() {
144+
this = "StageEscapeConfiguration (aliased_ssa)"
145+
}
146+
147+
predicate useSoundEscapeAnalysis() { none() }
148+
}

cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ predicate allocationEscapes(Configuration::Allocation allocation) {
325325
exists(IREscapeAnalysisConfiguration config |
326326
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
327327
)
328+
or
329+
exists(Configuration::StageEscapeConfiguration config |
330+
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
331+
)
328332
}
329333

330334
/**

cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,11 @@ class Allocation extends IRAutomaticVariable {
1414
none()
1515
}
1616
}
17+
18+
class StageEscapeConfiguration extends string {
19+
StageEscapeConfiguration() {
20+
this = "StageEscapeConfiguration (unaliased_ssa)"
21+
}
22+
23+
predicate useSoundEscapeAnalysis() { any() }
24+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| defaulttainttracking.cpp:190:14:190:24 | // $ ast,ir | Missing result:ir= |
2+
| defaulttainttracking.cpp:193:14:193:24 | // $ ast,ir | Missing result:ir= |

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,15 +1552,15 @@ ssa.cpp:
15521552
# 330| v330_4(void) = Call[sink] : func:r330_1, 0:r330_3
15531553
# 330| m330_5(unknown) = ^CallSideEffect : ~m329_6
15541554
# 330| m330_6(unknown) = Chi : total:m329_6, partial:m330_5
1555-
# 330| v330_7(void) = ^BufferReadSideEffect[0] : &:r330_3, ~m329_9
1555+
# 330| v330_7(void) = ^BufferReadSideEffect[0] : &:r330_3, ~m330_6
15561556
# 330| m330_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r330_3
1557-
# 330| m330_9(char[1024]) = Chi : total:m329_9, partial:m330_8
1557+
# 330| m330_9(unknown) = Chi : total:m330_6, partial:m330_8
15581558
# 331| r331_1(glval<unknown>) = FunctionAddress[sink] :
15591559
# 331| r331_2(glval<char **>) = VariableAddress[ptr2] :
15601560
# 331| r331_3(char **) = Load[ptr2] : &:r331_2, m326_4
15611561
# 331| v331_4(void) = Call[sink] : func:r331_1, 0:r331_3
1562-
# 331| m331_5(unknown) = ^CallSideEffect : ~m330_6
1563-
# 331| m331_6(unknown) = Chi : total:m330_6, partial:m331_5
1562+
# 331| m331_5(unknown) = ^CallSideEffect : ~m330_9
1563+
# 331| m331_6(unknown) = Chi : total:m330_9, partial:m331_5
15641564
# 331| v331_7(void) = ^BufferReadSideEffect[0] : &:r331_3, ~m325_4
15651565
# 331| m331_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r331_3
15661566
# 331| m331_9(char *) = Chi : total:m325_4, partial:m331_8

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,7 +1389,7 @@ ssa.cpp:
13891389
# 321| r321_1(glval<char[1024]>) = VariableAddress[buffer] :
13901390
# 321| mu321_2(char[1024]) = Uninitialized[buffer] : &:r321_1
13911391
# 322| r322_1(glval<char *>) = VariableAddress[ptr1] :
1392-
# 322| m322_2(char *) = Uninitialized[ptr1] : &:r322_1
1392+
# 322| mu322_2(char *) = Uninitialized[ptr1] : &:r322_1
13931393
# 322| r322_3(glval<char **>) = VariableAddress[ptr2] :
13941394
# 322| m322_4(char **) = Uninitialized[ptr2] : &:r322_3
13951395
# 323| r323_1(glval<char *>) = VariableAddress[ptr3] :
@@ -1399,7 +1399,7 @@ ssa.cpp:
13991399
# 325| r325_1(glval<char[1024]>) = VariableAddress[buffer] :
14001400
# 325| r325_2(char *) = Convert : r325_1
14011401
# 325| r325_3(glval<char *>) = VariableAddress[ptr1] :
1402-
# 325| m325_4(char *) = Store[ptr1] : &:r325_3, r325_2
1402+
# 325| mu325_4(char *) = Store[ptr1] : &:r325_3, r325_2
14031403
# 326| r326_1(glval<char *>) = VariableAddress[ptr1] :
14041404
# 326| r326_2(char **) = CopyValue : r326_1
14051405
# 326| r326_3(glval<char **>) = VariableAddress[ptr2] :
@@ -1425,7 +1425,7 @@ ssa.cpp:
14251425
# 329| mu329_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r329_3
14261426
# 330| r330_1(glval<unknown>) = FunctionAddress[sink] :
14271427
# 330| r330_2(glval<char *>) = VariableAddress[ptr1] :
1428-
# 330| r330_3(char *) = Load[ptr1] : &:r330_2, m325_4
1428+
# 330| r330_3(char *) = Load[ptr1] : &:r330_2, ~m?
14291429
# 330| v330_4(void) = Call[sink] : func:r330_1, 0:r330_3
14301430
# 330| mu330_5(unknown) = ^CallSideEffect : ~m?
14311431
# 330| v330_6(void) = ^BufferReadSideEffect[0] : &:r330_3, ~m?

csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ predicate allocationEscapes(Configuration::Allocation allocation) {
325325
exists(IREscapeAnalysisConfiguration config |
326326
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
327327
)
328+
or
329+
exists(Configuration::StageEscapeConfiguration config |
330+
config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction())
331+
)
328332
}
329333

330334
/**

csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,11 @@ class Allocation extends IRAutomaticVariable {
1414
none()
1515
}
1616
}
17+
18+
class StageEscapeConfiguration extends string {
19+
StageEscapeConfiguration() {
20+
this = "StageEscapeConfiguration (unaliased_ssa)"
21+
}
22+
23+
predicate useSoundEscapeAnalysis() { any() }
24+
}

0 commit comments

Comments
 (0)