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

Commit 0441e32

Browse files
brianrobstephentoub
authored andcommitted
Explictly initialize EventData.Reserved for System.Private.CoreLib. (#16283)
Signed-off-by: dotnet-bot-corefx-mirror <dotnet-bot@microsoft.com>
1 parent ccc21d0 commit 0441e32

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

src/Common/src/CoreLib/System/Buffers/ArrayPoolEventSource.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,16 @@ internal unsafe void BufferRented(int bufferId, int bufferSize, int poolId, int
3939
EventData* payload = stackalloc EventData[4];
4040
payload[0].Size = sizeof(int);
4141
payload[0].DataPointer = ((IntPtr)(&bufferId));
42+
payload[0].Reserved = 0;
4243
payload[1].Size = sizeof(int);
4344
payload[1].DataPointer = ((IntPtr)(&bufferSize));
45+
payload[1].Reserved = 0;
4446
payload[2].Size = sizeof(int);
4547
payload[2].DataPointer = ((IntPtr)(&poolId));
48+
payload[2].Reserved = 0;
4649
payload[3].Size = sizeof(int);
4750
payload[3].DataPointer = ((IntPtr)(&bucketId));
51+
payload[3].Reserved = 0;
4852
WriteEventCore(1, 4, payload);
4953
}
5054

@@ -59,14 +63,19 @@ internal unsafe void BufferAllocated(int bufferId, int bufferSize, int poolId, i
5963
EventData* payload = stackalloc EventData[5];
6064
payload[0].Size = sizeof(int);
6165
payload[0].DataPointer = ((IntPtr)(&bufferId));
66+
payload[0].Reserved = 0;
6267
payload[1].Size = sizeof(int);
6368
payload[1].DataPointer = ((IntPtr)(&bufferSize));
69+
payload[1].Reserved = 0;
6470
payload[2].Size = sizeof(int);
6571
payload[2].DataPointer = ((IntPtr)(&poolId));
72+
payload[2].Reserved = 0;
6673
payload[3].Size = sizeof(int);
6774
payload[3].DataPointer = ((IntPtr)(&bucketId));
75+
payload[3].Reserved = 0;
6876
payload[4].Size = sizeof(BufferAllocatedReason);
6977
payload[4].DataPointer = ((IntPtr)(&reason));
78+
payload[4].Reserved = 0;
7079
WriteEventCore(2, 5, payload);
7180
}
7281

src/Common/src/CoreLib/System/Diagnostics/Tracing/EventProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,8 @@ internal unsafe bool WriteEvent(ref EventDescriptor eventDescriptor, IntPtr even
958958
List<int> refObjPosition = new List<int>(s_etwAPIMaxRefObjCount);
959959
List<object> dataRefObj = new List<object>(s_etwAPIMaxRefObjCount);
960960
EventData* userData = stackalloc EventData[2 * argCount];
961+
for (int i = 0; i < 2 * argCount; i++)
962+
userData[i] = default(EventData);
961963
EventData* userDataPtr = (EventData*)userData;
962964
byte* dataBuffer = stackalloc byte[s_basicTypeAllocationBufferSize * 2 * argCount]; // Assume 16 chars for non-string argument
963965
byte* currentBuffer = dataBuffer;

src/Common/src/CoreLib/System/Diagnostics/Tracing/EventSource.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,7 @@ protected unsafe void WriteEvent(int eventId, int arg1)
742742
EventSource.EventData* descrs = stackalloc EventSource.EventData[1];
743743
descrs[0].DataPointer = (IntPtr)(&arg1);
744744
descrs[0].Size = 4;
745+
descrs[0].Reserved = 0;
745746
WriteEventCore(eventId, 1, descrs);
746747
}
747748
}
@@ -754,8 +755,10 @@ protected unsafe void WriteEvent(int eventId, int arg1, int arg2)
754755
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
755756
descrs[0].DataPointer = (IntPtr)(&arg1);
756757
descrs[0].Size = 4;
758+
descrs[0].Reserved = 0;
757759
descrs[1].DataPointer = (IntPtr)(&arg2);
758760
descrs[1].Size = 4;
761+
descrs[1].Reserved = 0;
759762
WriteEventCore(eventId, 2, descrs);
760763
}
761764
}
@@ -768,10 +771,13 @@ protected unsafe void WriteEvent(int eventId, int arg1, int arg2, int arg3)
768771
EventSource.EventData* descrs = stackalloc EventSource.EventData[3];
769772
descrs[0].DataPointer = (IntPtr)(&arg1);
770773
descrs[0].Size = 4;
774+
descrs[0].Reserved = 0;
771775
descrs[1].DataPointer = (IntPtr)(&arg2);
772776
descrs[1].Size = 4;
777+
descrs[1].Reserved = 0;
773778
descrs[2].DataPointer = (IntPtr)(&arg3);
774779
descrs[2].Size = 4;
780+
descrs[2].Reserved = 0;
775781
WriteEventCore(eventId, 3, descrs);
776782
}
777783
}
@@ -785,6 +791,7 @@ protected unsafe void WriteEvent(int eventId, long arg1)
785791
EventSource.EventData* descrs = stackalloc EventSource.EventData[1];
786792
descrs[0].DataPointer = (IntPtr)(&arg1);
787793
descrs[0].Size = 8;
794+
descrs[0].Reserved = 0;
788795
WriteEventCore(eventId, 1, descrs);
789796
}
790797
}
@@ -797,8 +804,10 @@ protected unsafe void WriteEvent(int eventId, long arg1, long arg2)
797804
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
798805
descrs[0].DataPointer = (IntPtr)(&arg1);
799806
descrs[0].Size = 8;
807+
descrs[0].Reserved = 0;
800808
descrs[1].DataPointer = (IntPtr)(&arg2);
801809
descrs[1].Size = 8;
810+
descrs[1].Reserved = 0;
802811
WriteEventCore(eventId, 2, descrs);
803812
}
804813
}
@@ -811,10 +820,13 @@ protected unsafe void WriteEvent(int eventId, long arg1, long arg2, long arg3)
811820
EventSource.EventData* descrs = stackalloc EventSource.EventData[3];
812821
descrs[0].DataPointer = (IntPtr)(&arg1);
813822
descrs[0].Size = 8;
823+
descrs[0].Reserved = 0;
814824
descrs[1].DataPointer = (IntPtr)(&arg2);
815825
descrs[1].Size = 8;
826+
descrs[1].Reserved = 0;
816827
descrs[2].DataPointer = (IntPtr)(&arg3);
817828
descrs[2].Size = 8;
829+
descrs[2].Reserved = 0;
818830
WriteEventCore(eventId, 3, descrs);
819831
}
820832
}
@@ -831,6 +843,7 @@ protected unsafe void WriteEvent(int eventId, string arg1)
831843
EventSource.EventData* descrs = stackalloc EventSource.EventData[1];
832844
descrs[0].DataPointer = (IntPtr)string1Bytes;
833845
descrs[0].Size = ((arg1.Length + 1) * 2);
846+
descrs[0].Reserved = 0;
834847
WriteEventCore(eventId, 1, descrs);
835848
}
836849
}
@@ -849,8 +862,10 @@ protected unsafe void WriteEvent(int eventId, string arg1, string arg2)
849862
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
850863
descrs[0].DataPointer = (IntPtr)string1Bytes;
851864
descrs[0].Size = ((arg1.Length + 1) * 2);
865+
descrs[0].Reserved = 0;
852866
descrs[1].DataPointer = (IntPtr)string2Bytes;
853867
descrs[1].Size = ((arg2.Length + 1) * 2);
868+
descrs[1].Reserved = 0;
854869
WriteEventCore(eventId, 2, descrs);
855870
}
856871
}
@@ -871,10 +886,13 @@ protected unsafe void WriteEvent(int eventId, string arg1, string arg2, string a
871886
EventSource.EventData* descrs = stackalloc EventSource.EventData[3];
872887
descrs[0].DataPointer = (IntPtr)string1Bytes;
873888
descrs[0].Size = ((arg1.Length + 1) * 2);
889+
descrs[0].Reserved = 0;
874890
descrs[1].DataPointer = (IntPtr)string2Bytes;
875891
descrs[1].Size = ((arg2.Length + 1) * 2);
892+
descrs[1].Reserved = 0;
876893
descrs[2].DataPointer = (IntPtr)string3Bytes;
877894
descrs[2].Size = ((arg3.Length + 1) * 2);
895+
descrs[2].Reserved = 0;
878896
WriteEventCore(eventId, 3, descrs);
879897
}
880898
}
@@ -892,8 +910,10 @@ protected unsafe void WriteEvent(int eventId, string arg1, int arg2)
892910
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
893911
descrs[0].DataPointer = (IntPtr)string1Bytes;
894912
descrs[0].Size = ((arg1.Length + 1) * 2);
913+
descrs[0].Reserved = 0;
895914
descrs[1].DataPointer = (IntPtr)(&arg2);
896915
descrs[1].Size = 4;
916+
descrs[1].Reserved = 0;
897917
WriteEventCore(eventId, 2, descrs);
898918
}
899919
}
@@ -910,10 +930,13 @@ protected unsafe void WriteEvent(int eventId, string arg1, int arg2, int arg3)
910930
EventSource.EventData* descrs = stackalloc EventSource.EventData[3];
911931
descrs[0].DataPointer = (IntPtr)string1Bytes;
912932
descrs[0].Size = ((arg1.Length + 1) * 2);
933+
descrs[0].Reserved = 0;
913934
descrs[1].DataPointer = (IntPtr)(&arg2);
914935
descrs[1].Size = 4;
936+
descrs[1].Reserved = 0;
915937
descrs[2].DataPointer = (IntPtr)(&arg3);
916938
descrs[2].Size = 4;
939+
descrs[2].Reserved = 0;
917940
WriteEventCore(eventId, 3, descrs);
918941
}
919942
}
@@ -931,8 +954,10 @@ protected unsafe void WriteEvent(int eventId, string arg1, long arg2)
931954
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
932955
descrs[0].DataPointer = (IntPtr)string1Bytes;
933956
descrs[0].Size = ((arg1.Length + 1) * 2);
957+
descrs[1].Reserved = 0;
934958
descrs[1].DataPointer = (IntPtr)(&arg2);
935959
descrs[1].Size = 8;
960+
descrs[1].Reserved = 0;
936961
WriteEventCore(eventId, 2, descrs);
937962
}
938963
}
@@ -950,8 +975,10 @@ protected unsafe void WriteEvent(int eventId, long arg1, string arg2)
950975
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
951976
descrs[0].DataPointer = (IntPtr)(&arg1);
952977
descrs[0].Size = 8;
978+
descrs[0].Reserved = 0;
953979
descrs[1].DataPointer = (IntPtr)string2Bytes;
954980
descrs[1].Size = ((arg2.Length + 1) * 2);
981+
descrs[1].Reserved = 0;
955982
WriteEventCore(eventId, 2, descrs);
956983
}
957984
}
@@ -969,8 +996,10 @@ protected unsafe void WriteEvent(int eventId, int arg1, string arg2)
969996
EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
970997
descrs[0].DataPointer = (IntPtr)(&arg1);
971998
descrs[0].Size = 4;
999+
descrs[0].Reserved = 0;
9721000
descrs[1].DataPointer = (IntPtr)string2Bytes;
9731001
descrs[1].Size = ((arg2.Length + 1) * 2);
1002+
descrs[1].Reserved = 0;
9741003
WriteEventCore(eventId, 2, descrs);
9751004
}
9761005
}
@@ -987,8 +1016,10 @@ protected unsafe void WriteEvent(int eventId, byte[] arg1)
9871016
int blobSize = 0;
9881017
descrs[0].DataPointer = (IntPtr)(&blobSize);
9891018
descrs[0].Size = 4;
1019+
descrs[0].Reserved = 0;
9901020
descrs[1].DataPointer = (IntPtr)(&blobSize); // valid address instead of empty content
9911021
descrs[1].Size = 0;
1022+
descrs[1].Reserved = 0;
9921023
WriteEventCore(eventId, 2, descrs);
9931024
}
9941025
else
@@ -998,8 +1029,10 @@ protected unsafe void WriteEvent(int eventId, byte[] arg1)
9981029
{
9991030
descrs[0].DataPointer = (IntPtr)(&blobSize);
10001031
descrs[0].Size = 4;
1032+
descrs[0].Reserved = 0;
10011033
descrs[1].DataPointer = (IntPtr)blob;
10021034
descrs[1].Size = blobSize;
1035+
descrs[1].Reserved = 0;
10031036
WriteEventCore(eventId, 2, descrs);
10041037
}
10051038
}
@@ -1014,13 +1047,16 @@ protected unsafe void WriteEvent(int eventId, long arg1, byte[] arg2)
10141047
EventSource.EventData* descrs = stackalloc EventSource.EventData[3];
10151048
descrs[0].DataPointer = (IntPtr)(&arg1);
10161049
descrs[0].Size = 8;
1050+
descrs[0].Reserved = 0;
10171051
if (arg2 == null || arg2.Length == 0)
10181052
{
10191053
int blobSize = 0;
10201054
descrs[1].DataPointer = (IntPtr)(&blobSize);
10211055
descrs[1].Size = 4;
1056+
descrs[1].Reserved = 0;
10221057
descrs[2].DataPointer = (IntPtr)(&blobSize); // valid address instead of empty contents
10231058
descrs[2].Size = 0;
1059+
descrs[2].Reserved = 0;
10241060
WriteEventCore(eventId, 3, descrs);
10251061
}
10261062
else
@@ -1030,8 +1066,10 @@ protected unsafe void WriteEvent(int eventId, long arg1, byte[] arg2)
10301066
{
10311067
descrs[1].DataPointer = (IntPtr)(&blobSize);
10321068
descrs[1].Size = 4;
1069+
descrs[1].Reserved = 0;
10331070
descrs[2].DataPointer = (IntPtr)blob;
10341071
descrs[2].Size = blobSize;
1072+
descrs[2].Reserved = 0;
10351073
WriteEventCore(eventId, 3, descrs);
10361074
}
10371075
}
@@ -1056,6 +1094,12 @@ protected internal struct EventData
10561094
/// </summary>
10571095
public int Size { get { return m_Size; } set { m_Size = value; } }
10581096

1097+
/// <summary>
1098+
/// Reserved by ETW. This property is present to ensure that we can zero it
1099+
/// since System.Private.CoreLib uses are not zero'd.
1100+
/// </summary>
1101+
internal int Reserved { get { return m_Reserved; } set { m_Reserved = value; } }
1102+
10591103
#region private
10601104
/// <summary>
10611105
/// Initializes the members of this EventData object to point at a previously-pinned
@@ -1097,8 +1141,10 @@ internal unsafe void SetMetadata(byte* pointer, int size, int reserved)
10971141
/// EventSource.EventData* descrs = stackalloc EventSource.EventData[2];
10981142
/// descrs[0].DataPointer = (IntPtr)(&amp;arg1);
10991143
/// descrs[0].Size = 8;
1144+
/// descrs[0].Reserved = 0;
11001145
/// descrs[1].DataPointer = (IntPtr)string2Bytes;
11011146
/// descrs[1].Size = ((arg2.Length + 1) * 2);
1147+
/// descrs[1].Reserved = 0;
11021148
/// WriteEventCore(eventId, 2, descrs);
11031149
/// }
11041150
/// }

0 commit comments

Comments
 (0)