Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit f3e7e18

Browse files
authored
Ensure EventData structs in EventSource implementations are zero'd (#26968)
In preparation for clearing initlocals.
1 parent 5641f76 commit f3e7e18

File tree

5 files changed

+195
-89
lines changed

5 files changed

+195
-89
lines changed

src/System.Buffers/src/System/Buffers/ArrayPoolEventSource.cs

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,26 @@ internal enum BufferAllocatedReason : int
3434
internal unsafe void BufferRented(int bufferId, int bufferSize, int poolId, int bucketId)
3535
{
3636
EventData* payload = stackalloc EventData[4];
37-
payload[0].Size = sizeof(int);
38-
payload[0].DataPointer = ((IntPtr)(&bufferId));
39-
payload[1].Size = sizeof(int);
40-
payload[1].DataPointer = ((IntPtr)(&bufferSize));
41-
payload[2].Size = sizeof(int);
42-
payload[2].DataPointer = ((IntPtr)(&poolId));
43-
payload[3].Size = sizeof(int);
44-
payload[3].DataPointer = ((IntPtr)(&bucketId));
37+
payload[0] = new EventData
38+
{
39+
Size = sizeof(int),
40+
DataPointer = ((IntPtr)(&bufferId))
41+
};
42+
payload[1] = new EventData
43+
{
44+
Size = sizeof(int),
45+
DataPointer = ((IntPtr)(&bufferSize))
46+
};
47+
payload[2] = new EventData
48+
{
49+
Size = sizeof(int),
50+
DataPointer = ((IntPtr)(&poolId))
51+
};
52+
payload[3] = new EventData
53+
{
54+
Size = sizeof(int),
55+
DataPointer = ((IntPtr)(&bucketId))
56+
};
4557
WriteEventCore(1, 4, payload);
4658
}
4759

@@ -54,16 +66,31 @@ internal unsafe void BufferRented(int bufferId, int bufferSize, int poolId, int
5466
internal unsafe void BufferAllocated(int bufferId, int bufferSize, int poolId, int bucketId, BufferAllocatedReason reason)
5567
{
5668
EventData* payload = stackalloc EventData[5];
57-
payload[0].Size = sizeof(int);
58-
payload[0].DataPointer = ((IntPtr)(&bufferId));
59-
payload[1].Size = sizeof(int);
60-
payload[1].DataPointer = ((IntPtr)(&bufferSize));
61-
payload[2].Size = sizeof(int);
62-
payload[2].DataPointer = ((IntPtr)(&poolId));
63-
payload[3].Size = sizeof(int);
64-
payload[3].DataPointer = ((IntPtr)(&bucketId));
65-
payload[4].Size = sizeof(BufferAllocatedReason);
66-
payload[4].DataPointer = ((IntPtr)(&reason));
69+
payload[0] = new EventData
70+
{
71+
Size = sizeof(int),
72+
DataPointer = ((IntPtr)(&bufferId))
73+
};
74+
payload[1] = new EventData
75+
{
76+
Size = sizeof(int),
77+
DataPointer = ((IntPtr)(&bufferSize))
78+
};
79+
payload[2] = new EventData
80+
{
81+
Size = sizeof(int),
82+
DataPointer = ((IntPtr)(&poolId))
83+
};
84+
payload[3] = new EventData
85+
{
86+
Size = sizeof(int),
87+
DataPointer = ((IntPtr)(&bucketId))
88+
};
89+
payload[4] = new EventData
90+
{
91+
Size = sizeof(BufferAllocatedReason),
92+
DataPointer = ((IntPtr)(&reason))
93+
};
6794
WriteEventCore(2, 5, payload);
6895
}
6996

src/System.Net.Http/src/System/Net/Http/NetEventSource.Http.cs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,31 @@ private unsafe void WriteEvent(int eventId, int arg1, int arg2, int arg3, string
7878
const int NumEventDatas = 5;
7979
var descrs = stackalloc EventData[NumEventDatas];
8080

81-
descrs[0].DataPointer = (IntPtr)(&arg1);
82-
descrs[0].Size = sizeof(int);
83-
84-
descrs[1].DataPointer = (IntPtr)(&arg2);
85-
descrs[1].Size = sizeof(int);
86-
87-
descrs[2].DataPointer = (IntPtr)(&arg3);
88-
descrs[2].Size = sizeof(int);
89-
90-
descrs[3].DataPointer = (IntPtr)string4Bytes;
91-
descrs[3].Size = ((arg4.Length + 1) * 2);
92-
93-
descrs[4].DataPointer = (IntPtr)string5Bytes;
94-
descrs[4].Size = ((arg5.Length + 1) * 2);
81+
descrs[0] = new EventData
82+
{
83+
DataPointer = (IntPtr)(&arg1),
84+
Size = sizeof(int)
85+
};
86+
descrs[1] = new EventData
87+
{
88+
DataPointer = (IntPtr)(&arg2),
89+
Size = sizeof(int)
90+
};
91+
descrs[2] = new EventData
92+
{
93+
DataPointer = (IntPtr)(&arg3),
94+
Size = sizeof(int)
95+
};
96+
descrs[3] = new EventData
97+
{
98+
DataPointer = (IntPtr)string4Bytes,
99+
Size = ((arg4.Length + 1) * 2)
100+
};
101+
descrs[4] = new EventData
102+
{
103+
DataPointer = (IntPtr)string5Bytes,
104+
Size = ((arg5.Length + 1) * 2)
105+
};
95106

96107
WriteEventCore(eventId, NumEventDatas, descrs);
97108
}

src/System.Net.Security/src/System/Net/Security/NetEventSource.Security.cs

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -343,29 +343,46 @@ private unsafe void WriteEvent(int eventId, string arg1, int arg2, int arg3, int
343343
const int NumEventDatas = 8;
344344
var descrs = stackalloc EventData[NumEventDatas];
345345

346-
descrs[0].DataPointer = (IntPtr)(arg1Ptr);
347-
descrs[0].Size = (arg1.Length + 1) * sizeof(char);
348-
349-
descrs[1].DataPointer = (IntPtr)(&arg2);
350-
descrs[1].Size = sizeof(int);
351-
352-
descrs[2].DataPointer = (IntPtr)(&arg3);
353-
descrs[2].Size = sizeof(int);
354-
355-
descrs[3].DataPointer = (IntPtr)(&arg4);
356-
descrs[3].Size = sizeof(int);
357-
358-
descrs[4].DataPointer = (IntPtr)(&arg5);
359-
descrs[4].Size = sizeof(int);
360-
361-
descrs[5].DataPointer = (IntPtr)(&arg6);
362-
descrs[5].Size = sizeof(int);
363-
364-
descrs[6].DataPointer = (IntPtr)(&arg7);
365-
descrs[6].Size = sizeof(int);
366-
367-
descrs[7].DataPointer = (IntPtr)(&arg8);
368-
descrs[7].Size = sizeof(int);
346+
descrs[0] = new EventData
347+
{
348+
DataPointer = (IntPtr)(arg1Ptr),
349+
Size = (arg1.Length + 1) * sizeof(char)
350+
};
351+
descrs[1] = new EventData
352+
{
353+
DataPointer = (IntPtr)(&arg2),
354+
Size = sizeof(int)
355+
};
356+
descrs[2] = new EventData
357+
{
358+
DataPointer = (IntPtr)(&arg3),
359+
Size = sizeof(int)
360+
};
361+
descrs[3] = new EventData
362+
{
363+
DataPointer = (IntPtr)(&arg4),
364+
Size = sizeof(int)
365+
};
366+
descrs[4] = new EventData
367+
{
368+
DataPointer = (IntPtr)(&arg5),
369+
Size = sizeof(int)
370+
};
371+
descrs[5] = new EventData
372+
{
373+
DataPointer = (IntPtr)(&arg6),
374+
Size = sizeof(int)
375+
};
376+
descrs[6] = new EventData
377+
{
378+
DataPointer = (IntPtr)(&arg7),
379+
Size = sizeof(int)
380+
};
381+
descrs[7] = new EventData
382+
{
383+
DataPointer = (IntPtr)(&arg8),
384+
Size = sizeof(int)
385+
};
369386

370387
WriteEventCore(eventId, NumEventDatas, descrs);
371388
}

src/System.Threading.Tasks.Parallel/src/System/Threading/Tasks/ParallelETWProvider.cs

Lines changed: 75 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,36 @@ public void ParallelLoopBegin(Int32 OriginatingTaskSchedulerID, Int32 Originatin
113113
{
114114
EventData* eventPayload = stackalloc EventData[6];
115115

116-
eventPayload[0].Size = sizeof(Int32);
117-
eventPayload[0].DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID));
118-
eventPayload[1].Size = sizeof(Int32);
119-
eventPayload[1].DataPointer = ((IntPtr)(&OriginatingTaskID));
120-
eventPayload[2].Size = sizeof(Int32);
121-
eventPayload[2].DataPointer = ((IntPtr)(&ForkJoinContextID));
122-
eventPayload[3].Size = sizeof(Int32);
123-
eventPayload[3].DataPointer = ((IntPtr)(&OperationType));
124-
eventPayload[4].Size = sizeof(Int64);
125-
eventPayload[4].DataPointer = ((IntPtr)(&InclusiveFrom));
126-
eventPayload[5].Size = sizeof(Int64);
127-
eventPayload[5].DataPointer = ((IntPtr)(&ExclusiveTo));
116+
eventPayload[0] = new EventData
117+
{
118+
Size = sizeof(Int32),
119+
DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID))
120+
};
121+
eventPayload[1] = new EventData
122+
{
123+
Size = sizeof(Int32),
124+
DataPointer = ((IntPtr)(&OriginatingTaskID))
125+
};
126+
eventPayload[2] = new EventData
127+
{
128+
Size = sizeof(Int32),
129+
DataPointer = ((IntPtr)(&ForkJoinContextID))
130+
};
131+
eventPayload[3] = new EventData
132+
{
133+
Size = sizeof(Int32),
134+
DataPointer = ((IntPtr)(&OperationType))
135+
};
136+
eventPayload[4] = new EventData
137+
{
138+
Size = sizeof(Int64),
139+
DataPointer = ((IntPtr)(&InclusiveFrom))
140+
};
141+
eventPayload[5] = new EventData
142+
{
143+
Size = sizeof(Int64),
144+
DataPointer = ((IntPtr)(&ExclusiveTo))
145+
};
128146

129147
WriteEventCore(PARALLELLOOPBEGIN_ID, 6, eventPayload);
130148
}
@@ -153,14 +171,26 @@ public void ParallelLoopEnd(Int32 OriginatingTaskSchedulerID, Int32 OriginatingT
153171
{
154172
EventData* eventPayload = stackalloc EventData[4];
155173

156-
eventPayload[0].Size = sizeof(Int32);
157-
eventPayload[0].DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID));
158-
eventPayload[1].Size = sizeof(Int32);
159-
eventPayload[1].DataPointer = ((IntPtr)(&OriginatingTaskID));
160-
eventPayload[2].Size = sizeof(Int32);
161-
eventPayload[2].DataPointer = ((IntPtr)(&ForkJoinContextID));
162-
eventPayload[3].Size = sizeof(Int64);
163-
eventPayload[3].DataPointer = ((IntPtr)(&TotalIterations));
174+
eventPayload[0] = new EventData
175+
{
176+
Size = sizeof(Int32),
177+
DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID))
178+
};
179+
eventPayload[1] = new EventData
180+
{
181+
Size = sizeof(Int32),
182+
DataPointer = ((IntPtr)(&OriginatingTaskID))
183+
};
184+
eventPayload[2] = new EventData
185+
{
186+
Size = sizeof(Int32),
187+
DataPointer = ((IntPtr)(&ForkJoinContextID))
188+
};
189+
eventPayload[3] = new EventData
190+
{
191+
Size = sizeof(Int64),
192+
DataPointer = ((IntPtr)(&TotalIterations))
193+
};
164194

165195
WriteEventCore(PARALLELLOOPEND_ID, 4, eventPayload);
166196
}
@@ -189,16 +219,31 @@ public void ParallelInvokeBegin(Int32 OriginatingTaskSchedulerID, Int32 Originat
189219
{
190220
EventData* eventPayload = stackalloc EventData[5];
191221

192-
eventPayload[0].Size = sizeof(Int32);
193-
eventPayload[0].DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID));
194-
eventPayload[1].Size = sizeof(Int32);
195-
eventPayload[1].DataPointer = ((IntPtr)(&OriginatingTaskID));
196-
eventPayload[2].Size = sizeof(Int32);
197-
eventPayload[2].DataPointer = ((IntPtr)(&ForkJoinContextID));
198-
eventPayload[3].Size = sizeof(Int32);
199-
eventPayload[3].DataPointer = ((IntPtr)(&OperationType));
200-
eventPayload[4].Size = sizeof(Int32);
201-
eventPayload[4].DataPointer = ((IntPtr)(&ActionCount));
222+
eventPayload[0] = new EventData
223+
{
224+
Size = sizeof(Int32),
225+
DataPointer = ((IntPtr)(&OriginatingTaskSchedulerID))
226+
};
227+
eventPayload[1] = new EventData
228+
{
229+
Size = sizeof(Int32),
230+
DataPointer = ((IntPtr)(&OriginatingTaskID))
231+
};
232+
eventPayload[2] = new EventData
233+
{
234+
Size = sizeof(Int32),
235+
DataPointer = ((IntPtr)(&ForkJoinContextID))
236+
};
237+
eventPayload[3] = new EventData
238+
{
239+
Size = sizeof(Int32),
240+
DataPointer = ((IntPtr)(&OperationType))
241+
};
242+
eventPayload[4] = new EventData
243+
{
244+
Size = sizeof(Int32),
245+
DataPointer = ((IntPtr)(&ActionCount))
246+
};
202247

203248
WriteEventCore(PARALLELINVOKEBEGIN_ID, 5, eventPayload);
204249
}

src/System.Threading/src/System/Threading/CDSsyncETWBCLProvider.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,16 @@ public void Barrier_PhaseFinished(bool currentSense, long phaseNum)
7676
EventData* eventPayload = stackalloc EventData[2];
7777

7878
Int32 senseAsInt32 = currentSense ? 1 : 0; // write out Boolean as Int32
79-
eventPayload[0].Size = sizeof(int);
80-
eventPayload[0].DataPointer = ((IntPtr)(&senseAsInt32));
81-
eventPayload[1].Size = sizeof(long);
82-
eventPayload[1].DataPointer = ((IntPtr)(&phaseNum));
79+
eventPayload[0] = new EventData
80+
{
81+
Size = sizeof(int),
82+
DataPointer = ((IntPtr)(&senseAsInt32))
83+
};
84+
eventPayload[1] = new EventData
85+
{
86+
Size = sizeof(long),
87+
DataPointer = ((IntPtr)(&phaseNum))
88+
};
8389

8490
WriteEventCore(BARRIER_PHASEFINISHED_ID, 2, eventPayload);
8591
}

0 commit comments

Comments
 (0)