1
1
import semmle.code.cpp.models.interfaces.Taint
2
2
import semmle.code.cpp.models.interfaces.Alias
3
3
import semmle.code.cpp.models.interfaces.ArrayFunction
4
+ import semmle.code.cpp.models.interfaces.FlowSource
4
5
5
6
private class InetNtoa extends TaintFunction {
6
- InetNtoa ( ) { hasGlobalName ( "inet_ntoa" ) }
7
+ InetNtoa ( ) { this . hasGlobalName ( "inet_ntoa" ) }
7
8
8
9
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
9
10
input .isParameter ( 0 ) and
@@ -12,7 +13,7 @@ private class InetNtoa extends TaintFunction {
12
13
}
13
14
14
15
private class InetAton extends TaintFunction , ArrayFunction {
15
- InetAton ( ) { hasGlobalName ( "inet_aton" ) }
16
+ InetAton ( ) { this . hasGlobalName ( "inet_aton" ) }
16
17
17
18
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
18
19
input .isParameterDeref ( 0 ) and
@@ -32,7 +33,7 @@ private class InetAton extends TaintFunction, ArrayFunction {
32
33
}
33
34
34
35
private class InetAddr extends TaintFunction , ArrayFunction , AliasFunction {
35
- InetAddr ( ) { hasGlobalName ( "inet_addr" ) }
36
+ InetAddr ( ) { this . hasGlobalName ( "inet_addr" ) }
36
37
37
38
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
38
39
input .isParameterDeref ( 0 ) and
@@ -51,7 +52,7 @@ private class InetAddr extends TaintFunction, ArrayFunction, AliasFunction {
51
52
}
52
53
53
54
private class InetNetwork extends TaintFunction , ArrayFunction {
54
- InetNetwork ( ) { hasGlobalName ( "inet_network" ) }
55
+ InetNetwork ( ) { this . hasGlobalName ( "inet_network" ) }
55
56
56
57
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
57
58
input .isParameterDeref ( 0 ) and
@@ -64,7 +65,7 @@ private class InetNetwork extends TaintFunction, ArrayFunction {
64
65
}
65
66
66
67
private class InetMakeaddr extends TaintFunction {
67
- InetMakeaddr ( ) { hasGlobalName ( "inet_makeaddr" ) }
68
+ InetMakeaddr ( ) { this . hasGlobalName ( "inet_makeaddr" ) }
68
69
69
70
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
70
71
(
@@ -76,7 +77,7 @@ private class InetMakeaddr extends TaintFunction {
76
77
}
77
78
78
79
private class InetLnaof extends TaintFunction {
79
- InetLnaof ( ) { hasGlobalName ( "inet_lnaof" ) }
80
+ InetLnaof ( ) { this . hasGlobalName ( "inet_lnaof" ) }
80
81
81
82
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
82
83
input .isParameter ( 0 ) and
@@ -85,7 +86,7 @@ private class InetLnaof extends TaintFunction {
85
86
}
86
87
87
88
private class InetNetof extends TaintFunction {
88
- InetNetof ( ) { hasGlobalName ( "inet_netof" ) }
89
+ InetNetof ( ) { this . hasGlobalName ( "inet_netof" ) }
89
90
90
91
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
91
92
input .isParameter ( 0 ) and
@@ -94,7 +95,7 @@ private class InetNetof extends TaintFunction {
94
95
}
95
96
96
97
private class InetPton extends TaintFunction , ArrayFunction {
97
- InetPton ( ) { hasGlobalName ( "inet_pton" ) }
98
+ InetPton ( ) { this . hasGlobalName ( "inet_pton" ) }
98
99
99
100
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
100
101
(
@@ -114,7 +115,7 @@ private class InetPton extends TaintFunction, ArrayFunction {
114
115
}
115
116
116
117
private class Gethostbyname extends TaintFunction , ArrayFunction {
117
- Gethostbyname ( ) { hasGlobalName ( "gethostbyname" ) }
118
+ Gethostbyname ( ) { this . hasGlobalName ( "gethostbyname" ) }
118
119
119
120
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
120
121
input .isParameterDeref ( 0 ) and
@@ -127,7 +128,7 @@ private class Gethostbyname extends TaintFunction, ArrayFunction {
127
128
}
128
129
129
130
private class Gethostbyaddr extends TaintFunction , ArrayFunction {
130
- Gethostbyaddr ( ) { hasGlobalName ( "gethostbyaddr" ) }
131
+ Gethostbyaddr ( ) { this . hasGlobalName ( "gethostbyaddr" ) }
131
132
132
133
override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
133
134
(
@@ -142,3 +143,21 @@ private class Gethostbyaddr extends TaintFunction, ArrayFunction {
142
143
143
144
override predicate hasArrayWithNullTerminator ( int bufParam ) { bufParam = 0 }
144
145
}
146
+
147
+ private class Getaddrinfo extends TaintFunction , ArrayFunction , RemoteFlowSourceFunction {
148
+ Getaddrinfo ( ) { this .hasGlobalName ( "getaddrinfo" ) }
149
+
150
+ override predicate hasTaintFlow ( FunctionInput input , FunctionOutput output ) {
151
+ input .isParameterDeref ( [ 0 .. 2 ] ) and
152
+ output .isParameterDeref ( 3 )
153
+ }
154
+
155
+ override predicate hasArrayInput ( int bufParam ) { bufParam in [ 0 , 1 ] }
156
+
157
+ override predicate hasArrayWithNullTerminator ( int bufParam ) { bufParam in [ 0 , 1 ] }
158
+
159
+ override predicate hasRemoteFlowSource ( FunctionOutput output , string description ) {
160
+ output .isParameterDeref ( 3 ) and
161
+ description = "Address returned by " + this .getName ( )
162
+ }
163
+ }
0 commit comments