@@ -199,8 +199,7 @@ namespace PAuthGadgetScanner {
199199// to distinguish intermediate and final results at the type level.
200200//
201201// Here is an overview of issue life-cycle:
202- // * an analysis (SrcSafetyAnalysis at now, DstSafetyAnalysis will be added
203- // later to support the detection of authentication oracles) computes register
202+ // * an analysis (SrcSafetyAnalysis or DstSafetyAnalysis) computes register
204203// state for each instruction in the function.
205204// * for each instruction, it is checked whether it is a gadget of some kind,
206205// taking the computed state into account. If a gadget is found, its kind
@@ -273,6 +272,11 @@ class ExtraInfo {
273272 virtual ~ExtraInfo () {}
274273};
275274
275+ // / The set of instructions writing to the affected register in an unsafe
276+ // / manner.
277+ // /
278+ // / This is a hint to be printed alongside the report. It should be further
279+ // / analyzed by the user.
276280class ClobberingInfo : public ExtraInfo {
277281 SmallVector<MCInstReference> ClobberingInstrs;
278282
@@ -282,6 +286,20 @@ class ClobberingInfo : public ExtraInfo {
282286 void print (raw_ostream &OS, const MCInstReference Location) const override ;
283287};
284288
289+ // / The set of instructions leaking the authenticated pointer before the
290+ // / result of authentication was checked.
291+ // /
292+ // / This is a hint to be printed alongside the report. It should be further
293+ // / analyzed by the user.
294+ class LeakageInfo : public ExtraInfo {
295+ SmallVector<MCInstReference> LeakingInstrs;
296+
297+ public:
298+ LeakageInfo (ArrayRef<MCInstReference> Instrs) : LeakingInstrs(Instrs) {}
299+
300+ void print (raw_ostream &OS, const MCInstReference Location) const override ;
301+ };
302+
285303// / A brief version of a report that can be further augmented with the details.
286304// /
287305// / A half-baked report produced on the first run of the analysis. An extra,
@@ -322,6 +340,9 @@ class FunctionAnalysisContext {
322340 void findUnsafeUses (SmallVector<PartialReport<MCPhysReg>> &Reports);
323341 void augmentUnsafeUseReports (ArrayRef<PartialReport<MCPhysReg>> Reports);
324342
343+ void findUnsafeDefs (SmallVector<PartialReport<MCPhysReg>> &Reports);
344+ void augmentUnsafeDefReports (ArrayRef<PartialReport<MCPhysReg>> Reports);
345+
325346 // / Process the reports which do not have to be augmented, and remove them
326347 // / from Reports.
327348 void handleSimpleReports (SmallVector<PartialReport<MCPhysReg>> &Reports);
0 commit comments