36

Parfait Lessons Learnt - Karim Ali · product or service remains at the sole discreBon of Oracle. Any views expressed in this Any views expressed in this presentaon are my own and

Embed Size (px)

Citation preview

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ParfaitLessonsLearnt

CrisBnaCifuentes,NathanKeynes,ManuelValdiviezo*,JohnGough,DianeCorneyOracleLabsAustralia*OracleParfait17July2016

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ThefollowingisintendedtoprovidesomeinsightintoalineofresearchinOracleLabs.ItisintendedforinformaBonpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncBonality,andshouldnotberelieduponinmakingpurchasingdecisions.OraclereservestherighttoalteritsdevelopmentplansandpracBcesatanyBme,andthedevelopment,release,andBmingofanyfeaturesorfuncBonalitydescribedinconnecBonwithanyOracleproductorserviceremainsatthesolediscreBonofOracle.AnyviewsexpressedinthispresentaBonaremyownanddonotnecessarilyreflecttheviewsofOracle.

3

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 4

TodevelopastaBccodeanalysistoolthatisprecise(>=90%trueposiBves)yetscalabletomillionsoflinesofC/C++codeinanightlyrun

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 5

TheParfaitDesign2007

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 6

BuiltonTopofLLVM

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

SnapshotofParfaitResults

7

June 2009 Kernel Part LOCBuffer

overrunBug density Status Time (min)

OpenSolaris UTS b105

Core 2.1M 15 0.0069 Being fixed 5

Device drivers

1.2M 67 0.054 Being fixed

September 2010

ON Part LOC # bug types Memory Time (min)

OpenSolaris ON All 10.4M 9 10-20x .bc 90

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 8

TheBellsandWhistlestoEnableTechTransfer

Tracewitnessforeachbugreport

UniquebugidenBtyviahashes

21

ServerintegraBonwithbugtrackingsystem

4

ServertokeeptrackofmulBpleruns

3

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 9

TheTransfer

June2012

UsedbythousandsofdeveloperswithinOracleonadailybasis

•  ParfaitbecomesaninternalOracleproduct

•  UsedinternallybyRDBMS,Solaris,OEL,TimesTen,…

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 10

NewLanguageandAnalysisSupport

June2013

•  StartJavalanguagesupport

•  AnalysesfocusonvulnerabiliBesintheJavaplaiorm

•  UsedinternallybyJavaProductGroup

June2015

•  StartPL/SQLlanguagesupport

•  AnalysesfocusonwebvulnerabiliBes

•  TobeusedbyJEEandcloudorganisaBons

FocusonvulnerabiliBesratherthanbugs

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

WhatWorkedWell

11

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  “Looseningup”Clang– TosupportmulBpleCcompilersandoldversionsofC

•  TranslaBonoflanguageforanalysis– Java,PL/SQL

• MulB-languagesupportandreuseofanalyses

12

Frontend

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

• Demand-drivenanalysisscaleswell– Combinedwithextensivecaching– FuncBonsummarieshelp

• Backwardsreusableframeworks– Dataflow– Symbolicanalysis

• HavingabstracBonsalignwellwiththecodeunderanalysis– E.g.,bit-flagoperaBons

13

Analysis

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

• Usability

– ServertokeeptrackofmulBpleruns– Bughashesto

•  compareresultsfromdifferentruns,and•  groupbugs

– Tracewitnessforeachbugreport

14

PresentaBonFramework

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  LLVMworkswellastheunderlyinginfrastructure– IR– Analysissupport

15

Infrastructure

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

TheInBetween

16

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  Layeredanalysisworksbutnotfullyusedasoriginallyplanned– MostanalyseshavemulBpleexitpoints– PromoBonsofonebugtypetoanother

17

OriginalLayeredAnalysisDesign

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  Intermodulesupport– AnalysingoneLLVMmoduleataBmedoesn’tworkforlargemonolithiccodebases•  E.g.,200GBRAMtoprocessone.bcfile

– ReuseofresultsofanalysisofdynamiclibrarieslinkedintomulBplebinariesisneeded

•  IncrementalanalysisattheLLVMmoduledoesn’tworkforeveryone– Someteamswantincrementalatsubcomponentlevels

18

GranularityofAnalysis

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

• Replicatedworkduetoindependentdevelopmentoftheanalyses

• BughashesessenBalbuthardtokeepconsistent

19

ParfaitInfrastructure

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

WhatDidn’tWorkWell

20

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

• UseofopBmisaBonstosimplifyIR– Removedinfavourofusefulbugreports

• RequiresdatafromtheAST– Neededforusefulbugreports

• Cannotrepresentdynamicfeaturesoflanguages

21

IR

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  llvm-lddoesn’tscalewell•  .bcformatisnotindexable

– Nowusingfileformatthatsupportsrandomaccess

•  SupportforotherCcompilersnotofinteresttotheClangcommunity

22

LLVMInfrastructure

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  Technicaldebtexposedwhenimprovinganalysiscodecoverage

•  IncompletecallgraphduetofuncBonpointersandvirtualcalls

23

Analysis

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  “Expensive”analysesarenotdeployedinproducBon– IfrunBmeislargerthanallocatednightlyintegraBonwindow

24

UsabilityandDevelopmentOrganisaBon’sWorkflow

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

MainTakeaways

25

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

WorkedWell

•  Scalabilitythroughdemand-drivenanalyses+caching+funcBonsummaries

• Precisionthroughunsoundness+heurisBcs

•  LanguagetranslaBonforanalysis• UsabilitythroughuserandorganisaBonaldeploymentexperience

NeedsMoreWork

•  ExtensibilityonlypossiblethroughhandwrisenC++– Newlanguages– Newanalyses

•  InfrastructurechangesbecomechallengingasBmegoesby

26

ParfaitforC/C++,JavaandPL/SQL–MainTakeaways

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ManyPeopleHaveWorkedonParfaitOvertheYears•  CrisBnaCifuentes•  BernhardScholz•  NathanKeynes•  LianLi•  ChenyiZhang•  EricaMealy

•  MichaelMounteney

•  SimonLong

•  NathanHawes•  MikeVanEmmerik

•  ChrisBanHoermann

•  ManuelValdiviezo

•  AndrewBrowne•  AdamHeron

•  JimmyTi

•  JacobZimmermann

•  AndrewCraik•  BradMoody

•  BenBarham

•  DouglasTeoh•  DucHoaiNguyen•  EdwardEvans•  DominicFerreira

•  IjazFaiz

•  BenDean•  BenJones•  DanielDawson•  AdamHeron

•  KostyantynVorobyov•  DianeCorney•  JohnGough•  DanielWainwright

•  NicholasAllen•  BrianModra

•  MashewJohnson

•  PaddyKrishnan

•  TomasKotal

•  VinceChiang•  LinGao•  RichardMarks

•  MinhtriPham

•  FrançoisGauthier•  AlexanderJordan•  VladimirSilchanka

•  TomKing

•  RamonMillsteed

27

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Parfait:scalableandprecisebugdetecBonforstaBclanguages

28

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 29

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 31

ObservaBon1:somebugsareeasytofind,othersarehardtofind

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 32

ObservaBon2:cheapprogramanalysescanfindeasybugs,expensiveprogramanalysescanfindcomplexbugs

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 33

June2009BufferOverflowResultsOverOpenSourceOSKernels

KernelTime (min)

Part LOCBuffer

overrunBug density Status

OpenSolaris UTS b105

5 Core 2.1M 15 0.0069 Being fixed

Device drivers 1.2M 67 0.054 Being fixed

Linux 2.6.29* 13 Core 1.6M 12 0.0073 Fixed

Device drivers 4.1M 85 0.020 Submitted

OpenBSD 4.4 2 Core 0.5M 3 0.0060 Fixed

Device drivers 0.8M 26 0.029 Fixed

*LinuxhasthebenefitoftwoseparatescansalreadymadebyCoverityovertheirkernelcode

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 34

November2009–September2010CommonCBugsResultsOverOpenSolarisONCode

9.5 MLOC 10.3 MLOC 10.4 MLOC 10.4 MLOC 10.4 MLOC

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ProvideinterfacetoDatalog Provideinterfacetootherlanguages

35

Extensibility–PossibleSoluBons

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

MemoryConsumpBon• Memoryusage:10x-20xsizeof.bc

36