rtnetlink.c 173 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * INET An implementation of the TCP/IP protocol suite for the LINUX
  4. * operating system. INET is implemented using the BSD Socket
  5. * interface as the means of communication with the user level.
  6. *
  7. * Routing netlink socket interface: protocol independent part.
  8. *
  9. * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
  10. *
  11. * Fixes:
  12. * Vitaly E. Lavrov RTA_OK arithmetic was wrong.
  13. */
  14. #include <linux/bitops.h>
  15. #include <linux/errno.h>
  16. #include <linux/module.h>
  17. #include <linux/types.h>
  18. #include <linux/socket.h>
  19. #include <linux/kernel.h>
  20. #include <linux/timer.h>
  21. #include <linux/string.h>
  22. #include <linux/sockios.h>
  23. #include <linux/net.h>
  24. #include <linux/fcntl.h>
  25. #include <linux/mm.h>
  26. #include <linux/slab.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/capability.h>
  29. #include <linux/skbuff.h>
  30. #include <linux/init.h>
  31. #include <linux/security.h>
  32. #include <linux/mutex.h>
  33. #include <linux/if_addr.h>
  34. #include <linux/if_bridge.h>
  35. #include <linux/if_vlan.h>
  36. #include <linux/pci.h>
  37. #include <linux/etherdevice.h>
  38. #include <linux/bpf.h>
  39. #include <linux/uaccess.h>
  40. #include <linux/inet.h>
  41. #include <linux/netdevice.h>
  42. #include <net/ip.h>
  43. #include <net/protocol.h>
  44. #include <net/arp.h>
  45. #include <net/route.h>
  46. #include <net/udp.h>
  47. #include <net/tcp.h>
  48. #include <net/sock.h>
  49. #include <net/pkt_sched.h>
  50. #include <net/fib_rules.h>
  51. #include <net/rtnetlink.h>
  52. #include <net/net_namespace.h>
  53. #include <net/netdev_lock.h>
  54. #include <net/devlink.h>
  55. #if IS_ENABLED(CONFIG_IPV6)
  56. #include <net/addrconf.h>
  57. #endif
  58. #include <linux/dpll.h>
  59. #include "dev.h"
  60. #define RTNL_MAX_TYPE 50
  61. #define RTNL_SLAVE_MAX_TYPE 44
  62. struct rtnl_link {
  63. rtnl_doit_func doit;
  64. rtnl_dumpit_func dumpit;
  65. struct module *owner;
  66. unsigned int flags;
  67. struct rcu_head rcu;
  68. };
  69. static DEFINE_MUTEX(rtnl_mutex);
  70. void rtnl_lock(void)
  71. {
  72. mutex_lock(&rtnl_mutex);
  73. }
  74. EXPORT_SYMBOL(rtnl_lock);
  75. int rtnl_lock_interruptible(void)
  76. {
  77. return mutex_lock_interruptible(&rtnl_mutex);
  78. }
  79. int rtnl_lock_killable(void)
  80. {
  81. return mutex_lock_killable(&rtnl_mutex);
  82. }
  83. static struct sk_buff *defer_kfree_skb_list;
  84. void rtnl_kfree_skbs(struct sk_buff *head, struct sk_buff *tail)
  85. {
  86. if (head && tail) {
  87. tail->next = defer_kfree_skb_list;
  88. defer_kfree_skb_list = head;
  89. }
  90. }
  91. EXPORT_SYMBOL(rtnl_kfree_skbs);
  92. void __rtnl_unlock(void)
  93. {
  94. struct sk_buff *head = defer_kfree_skb_list;
  95. defer_kfree_skb_list = NULL;
  96. /* Ensure that we didn't actually add any TODO item when __rtnl_unlock()
  97. * is used. In some places, e.g. in cfg80211, we have code that will do
  98. * something like
  99. * rtnl_lock()
  100. * wiphy_lock()
  101. * ...
  102. * rtnl_unlock()
  103. *
  104. * and because netdev_run_todo() acquires the RTNL for items on the list
  105. * we could cause a situation such as this:
  106. * Thread 1 Thread 2
  107. * rtnl_lock()
  108. * unregister_netdevice()
  109. * __rtnl_unlock()
  110. * rtnl_lock()
  111. * wiphy_lock()
  112. * rtnl_unlock()
  113. * netdev_run_todo()
  114. * __rtnl_unlock()
  115. *
  116. * // list not empty now
  117. * // because of thread 2
  118. * rtnl_lock()
  119. * while (!list_empty(...))
  120. * rtnl_lock()
  121. * wiphy_lock()
  122. * **** DEADLOCK ****
  123. *
  124. * However, usage of __rtnl_unlock() is rare, and so we can ensure that
  125. * it's not used in cases where something is added to do the list.
  126. */
  127. WARN_ON(!list_empty(&net_todo_list));
  128. mutex_unlock(&rtnl_mutex);
  129. while (head) {
  130. struct sk_buff *next = head->next;
  131. kfree_skb(head);
  132. cond_resched();
  133. head = next;
  134. }
  135. }
  136. void rtnl_unlock(void)
  137. {
  138. /* This fellow will unlock it for us. */
  139. netdev_run_todo();
  140. }
  141. EXPORT_SYMBOL(rtnl_unlock);
  142. int rtnl_trylock(void)
  143. {
  144. return mutex_trylock(&rtnl_mutex);
  145. }
  146. EXPORT_SYMBOL(rtnl_trylock);
  147. int rtnl_is_locked(void)
  148. {
  149. return mutex_is_locked(&rtnl_mutex);
  150. }
  151. EXPORT_SYMBOL(rtnl_is_locked);
  152. bool refcount_dec_and_rtnl_lock(refcount_t *r)
  153. {
  154. return refcount_dec_and_mutex_lock(r, &rtnl_mutex);
  155. }
  156. EXPORT_SYMBOL(refcount_dec_and_rtnl_lock);
  157. #ifdef CONFIG_PROVE_LOCKING
  158. bool lockdep_rtnl_is_held(void)
  159. {
  160. return lockdep_is_held(&rtnl_mutex);
  161. }
  162. EXPORT_SYMBOL(lockdep_rtnl_is_held);
  163. #endif /* #ifdef CONFIG_PROVE_LOCKING */
  164. #ifdef CONFIG_DEBUG_NET_SMALL_RTNL
  165. void __rtnl_net_lock(struct net *net)
  166. {
  167. ASSERT_RTNL();
  168. mutex_lock(&net->rtnl_mutex);
  169. }
  170. EXPORT_SYMBOL(__rtnl_net_lock);
  171. void __rtnl_net_unlock(struct net *net)
  172. {
  173. ASSERT_RTNL();
  174. mutex_unlock(&net->rtnl_mutex);
  175. }
  176. EXPORT_SYMBOL(__rtnl_net_unlock);
  177. void rtnl_net_lock(struct net *net)
  178. {
  179. rtnl_lock();
  180. __rtnl_net_lock(net);
  181. }
  182. EXPORT_SYMBOL(rtnl_net_lock);
  183. void rtnl_net_unlock(struct net *net)
  184. {
  185. __rtnl_net_unlock(net);
  186. rtnl_unlock();
  187. }
  188. EXPORT_SYMBOL(rtnl_net_unlock);
  189. int rtnl_net_trylock(struct net *net)
  190. {
  191. int ret = rtnl_trylock();
  192. if (ret)
  193. __rtnl_net_lock(net);
  194. return ret;
  195. }
  196. EXPORT_SYMBOL(rtnl_net_trylock);
  197. int rtnl_net_lock_killable(struct net *net)
  198. {
  199. int ret = rtnl_lock_killable();
  200. if (!ret)
  201. __rtnl_net_lock(net);
  202. return ret;
  203. }
  204. static int rtnl_net_cmp_locks(const struct net *net_a, const struct net *net_b)
  205. {
  206. if (net_eq(net_a, net_b))
  207. return 0;
  208. /* always init_net first */
  209. if (net_eq(net_a, &init_net))
  210. return -1;
  211. if (net_eq(net_b, &init_net))
  212. return 1;
  213. /* otherwise lock in ascending order */
  214. return net_a < net_b ? -1 : 1;
  215. }
  216. int rtnl_net_lock_cmp_fn(const struct lockdep_map *a, const struct lockdep_map *b)
  217. {
  218. const struct net *net_a, *net_b;
  219. net_a = container_of(a, struct net, rtnl_mutex.dep_map);
  220. net_b = container_of(b, struct net, rtnl_mutex.dep_map);
  221. return rtnl_net_cmp_locks(net_a, net_b);
  222. }
  223. bool rtnl_net_is_locked(struct net *net)
  224. {
  225. return rtnl_is_locked() && mutex_is_locked(&net->rtnl_mutex);
  226. }
  227. EXPORT_SYMBOL(rtnl_net_is_locked);
  228. bool lockdep_rtnl_net_is_held(struct net *net)
  229. {
  230. return lockdep_rtnl_is_held() && lockdep_is_held(&net->rtnl_mutex);
  231. }
  232. EXPORT_SYMBOL(lockdep_rtnl_net_is_held);
  233. #else
  234. static int rtnl_net_cmp_locks(const struct net *net_a, const struct net *net_b)
  235. {
  236. /* No need to swap */
  237. return -1;
  238. }
  239. #endif
  240. struct rtnl_nets {
  241. /* ->newlink() needs to freeze 3 netns at most;
  242. * 2 for the new device, 1 for its peer.
  243. */
  244. struct net *net[3];
  245. unsigned char len;
  246. };
  247. static void rtnl_nets_init(struct rtnl_nets *rtnl_nets)
  248. {
  249. memset(rtnl_nets, 0, sizeof(*rtnl_nets));
  250. }
  251. static void rtnl_nets_destroy(struct rtnl_nets *rtnl_nets)
  252. {
  253. int i;
  254. for (i = 0; i < rtnl_nets->len; i++) {
  255. put_net(rtnl_nets->net[i]);
  256. rtnl_nets->net[i] = NULL;
  257. }
  258. rtnl_nets->len = 0;
  259. }
  260. /**
  261. * rtnl_nets_add - Add netns to be locked before ->newlink().
  262. *
  263. * @rtnl_nets: rtnl_nets pointer passed to ->get_peer_net().
  264. * @net: netns pointer with an extra refcnt held.
  265. *
  266. * The extra refcnt is released in rtnl_nets_destroy().
  267. */
  268. static void rtnl_nets_add(struct rtnl_nets *rtnl_nets, struct net *net)
  269. {
  270. int i;
  271. DEBUG_NET_WARN_ON_ONCE(rtnl_nets->len == ARRAY_SIZE(rtnl_nets->net));
  272. for (i = 0; i < rtnl_nets->len; i++) {
  273. switch (rtnl_net_cmp_locks(rtnl_nets->net[i], net)) {
  274. case 0:
  275. put_net(net);
  276. return;
  277. case 1:
  278. swap(rtnl_nets->net[i], net);
  279. }
  280. }
  281. rtnl_nets->net[i] = net;
  282. rtnl_nets->len++;
  283. }
  284. static void rtnl_nets_lock(struct rtnl_nets *rtnl_nets)
  285. {
  286. int i;
  287. rtnl_lock();
  288. for (i = 0; i < rtnl_nets->len; i++)
  289. __rtnl_net_lock(rtnl_nets->net[i]);
  290. }
  291. static void rtnl_nets_unlock(struct rtnl_nets *rtnl_nets)
  292. {
  293. int i;
  294. for (i = 0; i < rtnl_nets->len; i++)
  295. __rtnl_net_unlock(rtnl_nets->net[i]);
  296. rtnl_unlock();
  297. }
  298. static struct rtnl_link __rcu *__rcu *rtnl_msg_handlers[RTNL_FAMILY_MAX + 1];
  299. static inline int rtm_msgindex(int msgtype)
  300. {
  301. int msgindex = msgtype - RTM_BASE;
  302. /*
  303. * msgindex < 0 implies someone tried to register a netlink
  304. * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
  305. * the message type has not been added to linux/rtnetlink.h
  306. */
  307. BUG_ON(msgindex < 0 || msgindex >= RTM_NR_MSGTYPES);
  308. return msgindex;
  309. }
  310. static struct rtnl_link *rtnl_get_link(int protocol, int msgtype)
  311. {
  312. struct rtnl_link __rcu **tab;
  313. if (protocol >= ARRAY_SIZE(rtnl_msg_handlers))
  314. protocol = PF_UNSPEC;
  315. tab = rcu_dereference_rtnl(rtnl_msg_handlers[protocol]);
  316. if (!tab)
  317. tab = rcu_dereference_rtnl(rtnl_msg_handlers[PF_UNSPEC]);
  318. return rcu_dereference_rtnl(tab[msgtype]);
  319. }
  320. static int rtnl_register_internal(struct module *owner,
  321. int protocol, int msgtype,
  322. rtnl_doit_func doit, rtnl_dumpit_func dumpit,
  323. unsigned int flags)
  324. {
  325. struct rtnl_link *link, *old;
  326. struct rtnl_link __rcu **tab;
  327. int msgindex;
  328. int ret = -ENOBUFS;
  329. BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
  330. msgindex = rtm_msgindex(msgtype);
  331. rtnl_lock();
  332. tab = rtnl_dereference(rtnl_msg_handlers[protocol]);
  333. if (tab == NULL) {
  334. tab = kcalloc(RTM_NR_MSGTYPES, sizeof(void *), GFP_KERNEL);
  335. if (!tab)
  336. goto unlock;
  337. /* ensures we see the 0 stores */
  338. rcu_assign_pointer(rtnl_msg_handlers[protocol], tab);
  339. }
  340. old = rtnl_dereference(tab[msgindex]);
  341. if (old) {
  342. link = kmemdup(old, sizeof(*old), GFP_KERNEL);
  343. if (!link)
  344. goto unlock;
  345. } else {
  346. link = kzalloc_obj(*link);
  347. if (!link)
  348. goto unlock;
  349. }
  350. WARN_ON(link->owner && link->owner != owner);
  351. link->owner = owner;
  352. WARN_ON(doit && link->doit && link->doit != doit);
  353. if (doit)
  354. link->doit = doit;
  355. WARN_ON(dumpit && link->dumpit && link->dumpit != dumpit);
  356. if (dumpit)
  357. link->dumpit = dumpit;
  358. WARN_ON(rtnl_msgtype_kind(msgtype) != RTNL_KIND_DEL &&
  359. (flags & RTNL_FLAG_BULK_DEL_SUPPORTED));
  360. link->flags |= flags;
  361. /* publish protocol:msgtype */
  362. rcu_assign_pointer(tab[msgindex], link);
  363. ret = 0;
  364. if (old)
  365. kfree_rcu(old, rcu);
  366. unlock:
  367. rtnl_unlock();
  368. return ret;
  369. }
  370. /**
  371. * rtnl_unregister - Unregister a rtnetlink message type
  372. * @protocol: Protocol family or PF_UNSPEC
  373. * @msgtype: rtnetlink message type
  374. *
  375. * Returns 0 on success or a negative error code.
  376. */
  377. static int rtnl_unregister(int protocol, int msgtype)
  378. {
  379. struct rtnl_link __rcu **tab;
  380. struct rtnl_link *link;
  381. int msgindex;
  382. BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
  383. msgindex = rtm_msgindex(msgtype);
  384. rtnl_lock();
  385. tab = rtnl_dereference(rtnl_msg_handlers[protocol]);
  386. if (!tab) {
  387. rtnl_unlock();
  388. return -ENOENT;
  389. }
  390. link = rcu_replace_pointer_rtnl(tab[msgindex], NULL);
  391. rtnl_unlock();
  392. kfree_rcu(link, rcu);
  393. return 0;
  394. }
  395. /**
  396. * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
  397. * @protocol : Protocol family or PF_UNSPEC
  398. *
  399. * Identical to calling rtnl_unregister() for all registered message types
  400. * of a certain protocol family.
  401. */
  402. void rtnl_unregister_all(int protocol)
  403. {
  404. struct rtnl_link __rcu **tab;
  405. struct rtnl_link *link;
  406. int msgindex;
  407. BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
  408. rtnl_lock();
  409. tab = rcu_replace_pointer_rtnl(rtnl_msg_handlers[protocol], NULL);
  410. if (!tab) {
  411. rtnl_unlock();
  412. return;
  413. }
  414. for (msgindex = 0; msgindex < RTM_NR_MSGTYPES; msgindex++) {
  415. link = rcu_replace_pointer_rtnl(tab[msgindex], NULL);
  416. kfree_rcu(link, rcu);
  417. }
  418. rtnl_unlock();
  419. synchronize_net();
  420. kfree(tab);
  421. }
  422. EXPORT_SYMBOL_GPL(rtnl_unregister_all);
  423. /**
  424. * __rtnl_register_many - Register rtnetlink message types
  425. * @handlers: Array of struct rtnl_msg_handlers
  426. * @n: The length of @handlers
  427. *
  428. * Registers the specified function pointers (at least one of them has
  429. * to be non-NULL) to be called whenever a request message for the
  430. * specified protocol family and message type is received.
  431. *
  432. * The special protocol family PF_UNSPEC may be used to define fallback
  433. * function pointers for the case when no entry for the specific protocol
  434. * family exists.
  435. *
  436. * When one element of @handlers fails to register,
  437. * 1) built-in: panics.
  438. * 2) modules : the previous successful registrations are unwinded
  439. * and an error is returned.
  440. *
  441. * Use rtnl_register_many().
  442. */
  443. int __rtnl_register_many(const struct rtnl_msg_handler *handlers, int n)
  444. {
  445. const struct rtnl_msg_handler *handler;
  446. int i, err;
  447. for (i = 0, handler = handlers; i < n; i++, handler++) {
  448. err = rtnl_register_internal(handler->owner, handler->protocol,
  449. handler->msgtype, handler->doit,
  450. handler->dumpit, handler->flags);
  451. if (err) {
  452. if (!handler->owner)
  453. panic("Unable to register rtnetlink message "
  454. "handlers, %pS\n", handlers);
  455. __rtnl_unregister_many(handlers, i);
  456. break;
  457. }
  458. }
  459. return err;
  460. }
  461. EXPORT_SYMBOL_GPL(__rtnl_register_many);
  462. void __rtnl_unregister_many(const struct rtnl_msg_handler *handlers, int n)
  463. {
  464. const struct rtnl_msg_handler *handler;
  465. int i;
  466. for (i = n - 1, handler = handlers + n - 1; i >= 0; i--, handler--)
  467. rtnl_unregister(handler->protocol, handler->msgtype);
  468. }
  469. EXPORT_SYMBOL_GPL(__rtnl_unregister_many);
  470. static DEFINE_MUTEX(link_ops_mutex);
  471. static LIST_HEAD(link_ops);
  472. static struct rtnl_link_ops *rtnl_link_ops_get(const char *kind, int *srcu_index)
  473. {
  474. struct rtnl_link_ops *ops;
  475. rcu_read_lock();
  476. list_for_each_entry_rcu(ops, &link_ops, list) {
  477. if (!strcmp(ops->kind, kind)) {
  478. *srcu_index = srcu_read_lock(&ops->srcu);
  479. goto unlock;
  480. }
  481. }
  482. ops = NULL;
  483. unlock:
  484. rcu_read_unlock();
  485. return ops;
  486. }
  487. static void rtnl_link_ops_put(struct rtnl_link_ops *ops, int srcu_index)
  488. {
  489. srcu_read_unlock(&ops->srcu, srcu_index);
  490. }
  491. /**
  492. * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
  493. * @ops: struct rtnl_link_ops * to register
  494. *
  495. * Returns 0 on success or a negative error code.
  496. */
  497. int rtnl_link_register(struct rtnl_link_ops *ops)
  498. {
  499. struct rtnl_link_ops *tmp;
  500. int err;
  501. /* Sanity-check max sizes to avoid stack buffer overflow. */
  502. if (WARN_ON(ops->maxtype > RTNL_MAX_TYPE ||
  503. ops->slave_maxtype > RTNL_SLAVE_MAX_TYPE))
  504. return -EINVAL;
  505. /* The check for alloc/setup is here because if ops
  506. * does not have that filled up, it is not possible
  507. * to use the ops for creating device. So do not
  508. * fill up dellink as well. That disables rtnl_dellink.
  509. */
  510. if ((ops->alloc || ops->setup) && !ops->dellink)
  511. ops->dellink = unregister_netdevice_queue;
  512. err = init_srcu_struct(&ops->srcu);
  513. if (err)
  514. return err;
  515. mutex_lock(&link_ops_mutex);
  516. list_for_each_entry(tmp, &link_ops, list) {
  517. if (!strcmp(ops->kind, tmp->kind)) {
  518. err = -EEXIST;
  519. goto unlock;
  520. }
  521. }
  522. list_add_tail_rcu(&ops->list, &link_ops);
  523. unlock:
  524. mutex_unlock(&link_ops_mutex);
  525. if (err)
  526. cleanup_srcu_struct(&ops->srcu);
  527. return err;
  528. }
  529. EXPORT_SYMBOL_GPL(rtnl_link_register);
  530. static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops)
  531. {
  532. struct net_device *dev;
  533. LIST_HEAD(list_kill);
  534. for_each_netdev(net, dev) {
  535. if (dev->rtnl_link_ops == ops)
  536. ops->dellink(dev, &list_kill);
  537. }
  538. unregister_netdevice_many(&list_kill);
  539. }
  540. /* Return with the rtnl_lock held when there are no network
  541. * devices unregistering in any network namespace.
  542. */
  543. static void rtnl_lock_unregistering_all(void)
  544. {
  545. DEFINE_WAIT_FUNC(wait, woken_wake_function);
  546. add_wait_queue(&netdev_unregistering_wq, &wait);
  547. for (;;) {
  548. rtnl_lock();
  549. /* We held write locked pernet_ops_rwsem, and parallel
  550. * setup_net() and cleanup_net() are not possible.
  551. */
  552. if (!atomic_read(&dev_unreg_count))
  553. break;
  554. __rtnl_unlock();
  555. wait_woken(&wait, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
  556. }
  557. remove_wait_queue(&netdev_unregistering_wq, &wait);
  558. }
  559. /**
  560. * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
  561. * @ops: struct rtnl_link_ops * to unregister
  562. */
  563. void rtnl_link_unregister(struct rtnl_link_ops *ops)
  564. {
  565. struct net *net;
  566. mutex_lock(&link_ops_mutex);
  567. list_del_rcu(&ops->list);
  568. mutex_unlock(&link_ops_mutex);
  569. synchronize_srcu(&ops->srcu);
  570. cleanup_srcu_struct(&ops->srcu);
  571. /* Close the race with setup_net() and cleanup_net() */
  572. down_write(&pernet_ops_rwsem);
  573. rtnl_lock_unregistering_all();
  574. for_each_net(net)
  575. __rtnl_kill_links(net, ops);
  576. rtnl_unlock();
  577. up_write(&pernet_ops_rwsem);
  578. }
  579. EXPORT_SYMBOL_GPL(rtnl_link_unregister);
  580. static size_t rtnl_link_get_slave_info_data_size(const struct net_device *dev)
  581. {
  582. struct net_device *master_dev;
  583. const struct rtnl_link_ops *ops;
  584. size_t size = 0;
  585. rcu_read_lock();
  586. master_dev = netdev_master_upper_dev_get_rcu((struct net_device *)dev);
  587. if (!master_dev)
  588. goto out;
  589. ops = master_dev->rtnl_link_ops;
  590. if (!ops)
  591. goto out;
  592. size += nla_total_size(strlen(ops->kind) + 1); /* IFLA_INFO_SLAVE_KIND */
  593. if (!ops->get_slave_size)
  594. goto out;
  595. /* IFLA_INFO_SLAVE_DATA + nested data */
  596. size += nla_total_size(sizeof(struct nlattr)) +
  597. ops->get_slave_size(master_dev, dev);
  598. out:
  599. rcu_read_unlock();
  600. return size;
  601. }
  602. static size_t rtnl_link_get_size(const struct net_device *dev)
  603. {
  604. const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
  605. size_t size;
  606. if (!ops)
  607. return 0;
  608. size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */
  609. nla_total_size(strlen(ops->kind) + 1); /* IFLA_INFO_KIND */
  610. if (ops->get_size)
  611. /* IFLA_INFO_DATA + nested data */
  612. size += nla_total_size(sizeof(struct nlattr)) +
  613. ops->get_size(dev);
  614. if (ops->get_xstats_size)
  615. /* IFLA_INFO_XSTATS */
  616. size += nla_total_size(ops->get_xstats_size(dev));
  617. size += rtnl_link_get_slave_info_data_size(dev);
  618. return size;
  619. }
  620. static LIST_HEAD(rtnl_af_ops);
  621. static struct rtnl_af_ops *rtnl_af_lookup(const int family, int *srcu_index)
  622. {
  623. struct rtnl_af_ops *ops;
  624. ASSERT_RTNL();
  625. rcu_read_lock();
  626. list_for_each_entry_rcu(ops, &rtnl_af_ops, list) {
  627. if (ops->family == family) {
  628. *srcu_index = srcu_read_lock(&ops->srcu);
  629. goto unlock;
  630. }
  631. }
  632. ops = NULL;
  633. unlock:
  634. rcu_read_unlock();
  635. return ops;
  636. }
  637. static void rtnl_af_put(struct rtnl_af_ops *ops, int srcu_index)
  638. {
  639. srcu_read_unlock(&ops->srcu, srcu_index);
  640. }
  641. /**
  642. * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
  643. * @ops: struct rtnl_af_ops * to register
  644. *
  645. * Return: 0 on success or a negative error code.
  646. */
  647. int rtnl_af_register(struct rtnl_af_ops *ops)
  648. {
  649. int err = init_srcu_struct(&ops->srcu);
  650. if (err)
  651. return err;
  652. rtnl_lock();
  653. list_add_tail_rcu(&ops->list, &rtnl_af_ops);
  654. rtnl_unlock();
  655. return 0;
  656. }
  657. EXPORT_SYMBOL_GPL(rtnl_af_register);
  658. /**
  659. * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
  660. * @ops: struct rtnl_af_ops * to unregister
  661. */
  662. void rtnl_af_unregister(struct rtnl_af_ops *ops)
  663. {
  664. rtnl_lock();
  665. list_del_rcu(&ops->list);
  666. rtnl_unlock();
  667. synchronize_rcu();
  668. synchronize_srcu(&ops->srcu);
  669. cleanup_srcu_struct(&ops->srcu);
  670. }
  671. EXPORT_SYMBOL_GPL(rtnl_af_unregister);
  672. static size_t rtnl_link_get_af_size(const struct net_device *dev,
  673. u32 ext_filter_mask)
  674. {
  675. struct rtnl_af_ops *af_ops;
  676. size_t size;
  677. /* IFLA_AF_SPEC */
  678. size = nla_total_size(sizeof(struct nlattr));
  679. rcu_read_lock();
  680. list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
  681. if (af_ops->get_link_af_size) {
  682. /* AF_* + nested data */
  683. size += nla_total_size(sizeof(struct nlattr)) +
  684. af_ops->get_link_af_size(dev, ext_filter_mask);
  685. }
  686. }
  687. rcu_read_unlock();
  688. return size;
  689. }
  690. static bool rtnl_have_link_slave_info(const struct net_device *dev)
  691. {
  692. struct net_device *master_dev;
  693. bool ret = false;
  694. rcu_read_lock();
  695. master_dev = netdev_master_upper_dev_get_rcu((struct net_device *)dev);
  696. if (master_dev && master_dev->rtnl_link_ops)
  697. ret = true;
  698. rcu_read_unlock();
  699. return ret;
  700. }
  701. static int rtnl_link_slave_info_fill(struct sk_buff *skb,
  702. const struct net_device *dev)
  703. {
  704. struct net_device *master_dev;
  705. const struct rtnl_link_ops *ops;
  706. struct nlattr *slave_data;
  707. int err;
  708. master_dev = netdev_master_upper_dev_get((struct net_device *) dev);
  709. if (!master_dev)
  710. return 0;
  711. ops = master_dev->rtnl_link_ops;
  712. if (!ops)
  713. return 0;
  714. if (nla_put_string(skb, IFLA_INFO_SLAVE_KIND, ops->kind) < 0)
  715. return -EMSGSIZE;
  716. if (ops->fill_slave_info) {
  717. slave_data = nla_nest_start_noflag(skb, IFLA_INFO_SLAVE_DATA);
  718. if (!slave_data)
  719. return -EMSGSIZE;
  720. err = ops->fill_slave_info(skb, master_dev, dev);
  721. if (err < 0)
  722. goto err_cancel_slave_data;
  723. nla_nest_end(skb, slave_data);
  724. }
  725. return 0;
  726. err_cancel_slave_data:
  727. nla_nest_cancel(skb, slave_data);
  728. return err;
  729. }
  730. static int rtnl_link_info_fill(struct sk_buff *skb,
  731. const struct net_device *dev)
  732. {
  733. const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
  734. struct nlattr *data;
  735. int err;
  736. if (!ops)
  737. return 0;
  738. if (nla_put_string(skb, IFLA_INFO_KIND, ops->kind) < 0)
  739. return -EMSGSIZE;
  740. if (ops->fill_xstats) {
  741. err = ops->fill_xstats(skb, dev);
  742. if (err < 0)
  743. return err;
  744. }
  745. if (ops->fill_info) {
  746. data = nla_nest_start_noflag(skb, IFLA_INFO_DATA);
  747. if (data == NULL)
  748. return -EMSGSIZE;
  749. err = ops->fill_info(skb, dev);
  750. if (err < 0)
  751. goto err_cancel_data;
  752. nla_nest_end(skb, data);
  753. }
  754. return 0;
  755. err_cancel_data:
  756. nla_nest_cancel(skb, data);
  757. return err;
  758. }
  759. static int rtnl_link_fill(struct sk_buff *skb, const struct net_device *dev)
  760. {
  761. struct nlattr *linkinfo;
  762. int err = -EMSGSIZE;
  763. linkinfo = nla_nest_start_noflag(skb, IFLA_LINKINFO);
  764. if (linkinfo == NULL)
  765. goto out;
  766. err = rtnl_link_info_fill(skb, dev);
  767. if (err < 0)
  768. goto err_cancel_link;
  769. err = rtnl_link_slave_info_fill(skb, dev);
  770. if (err < 0)
  771. goto err_cancel_link;
  772. nla_nest_end(skb, linkinfo);
  773. return 0;
  774. err_cancel_link:
  775. nla_nest_cancel(skb, linkinfo);
  776. out:
  777. return err;
  778. }
  779. int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned int group, int echo)
  780. {
  781. struct sock *rtnl = net->rtnl;
  782. return nlmsg_notify(rtnl, skb, pid, group, echo, GFP_KERNEL);
  783. }
  784. int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid)
  785. {
  786. struct sock *rtnl = net->rtnl;
  787. return nlmsg_unicast(rtnl, skb, pid);
  788. }
  789. EXPORT_SYMBOL(rtnl_unicast);
  790. void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group,
  791. const struct nlmsghdr *nlh, gfp_t flags)
  792. {
  793. struct sock *rtnl = net->rtnl;
  794. nlmsg_notify(rtnl, skb, pid, group, nlmsg_report(nlh), flags);
  795. }
  796. EXPORT_SYMBOL(rtnl_notify);
  797. void rtnl_set_sk_err(struct net *net, u32 group, int error)
  798. {
  799. struct sock *rtnl = net->rtnl;
  800. netlink_set_err(rtnl, 0, group, error);
  801. }
  802. EXPORT_SYMBOL(rtnl_set_sk_err);
  803. int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics)
  804. {
  805. struct nlattr *mx;
  806. int i, valid = 0;
  807. /* nothing is dumped for dst_default_metrics, so just skip the loop */
  808. if (metrics == dst_default_metrics.metrics)
  809. return 0;
  810. mx = nla_nest_start_noflag(skb, RTA_METRICS);
  811. if (mx == NULL)
  812. return -ENOBUFS;
  813. for (i = 0; i < RTAX_MAX; i++) {
  814. if (metrics[i]) {
  815. if (i == RTAX_CC_ALGO - 1) {
  816. char tmp[TCP_CA_NAME_MAX], *name;
  817. name = tcp_ca_get_name_by_key(metrics[i], tmp);
  818. if (!name)
  819. continue;
  820. if (nla_put_string(skb, i + 1, name))
  821. goto nla_put_failure;
  822. } else if (i == RTAX_FEATURES - 1) {
  823. u32 user_features = metrics[i] & RTAX_FEATURE_MASK;
  824. if (!user_features)
  825. continue;
  826. BUILD_BUG_ON(RTAX_FEATURE_MASK & DST_FEATURE_MASK);
  827. if (nla_put_u32(skb, i + 1, user_features))
  828. goto nla_put_failure;
  829. } else {
  830. if (nla_put_u32(skb, i + 1, metrics[i]))
  831. goto nla_put_failure;
  832. }
  833. valid++;
  834. }
  835. }
  836. if (!valid) {
  837. nla_nest_cancel(skb, mx);
  838. return 0;
  839. }
  840. return nla_nest_end(skb, mx);
  841. nla_put_failure:
  842. nla_nest_cancel(skb, mx);
  843. return -EMSGSIZE;
  844. }
  845. EXPORT_SYMBOL(rtnetlink_put_metrics);
  846. int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
  847. long expires, u32 error)
  848. {
  849. struct rta_cacheinfo ci = {
  850. .rta_error = error,
  851. .rta_id = id,
  852. };
  853. unsigned long delta;
  854. if (dst) {
  855. delta = jiffies - READ_ONCE(dst->lastuse);
  856. ci.rta_lastuse = jiffies_delta_to_clock_t(delta);
  857. ci.rta_used = dst->__use;
  858. ci.rta_clntref = rcuref_read(&dst->__rcuref);
  859. }
  860. if (expires) {
  861. unsigned long clock;
  862. clock = jiffies_to_clock_t(abs(expires));
  863. clock = min_t(unsigned long, clock, INT_MAX);
  864. ci.rta_expires = (expires > 0) ? clock : -clock;
  865. }
  866. return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci);
  867. }
  868. EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
  869. void netif_set_operstate(struct net_device *dev, int newstate)
  870. {
  871. unsigned int old = READ_ONCE(dev->operstate);
  872. do {
  873. if (old == newstate)
  874. return;
  875. } while (!try_cmpxchg(&dev->operstate, &old, newstate));
  876. netif_state_change(dev);
  877. }
  878. EXPORT_SYMBOL(netif_set_operstate);
  879. static void set_operstate(struct net_device *dev, unsigned char transition)
  880. {
  881. unsigned char operstate = READ_ONCE(dev->operstate);
  882. switch (transition) {
  883. case IF_OPER_UP:
  884. if ((operstate == IF_OPER_DORMANT ||
  885. operstate == IF_OPER_TESTING ||
  886. operstate == IF_OPER_UNKNOWN) &&
  887. !netif_dormant(dev) && !netif_testing(dev))
  888. operstate = IF_OPER_UP;
  889. break;
  890. case IF_OPER_TESTING:
  891. if (netif_oper_up(dev))
  892. operstate = IF_OPER_TESTING;
  893. break;
  894. case IF_OPER_DORMANT:
  895. if (netif_oper_up(dev))
  896. operstate = IF_OPER_DORMANT;
  897. break;
  898. }
  899. netif_set_operstate(dev, operstate);
  900. }
  901. static unsigned int rtnl_dev_get_flags(const struct net_device *dev)
  902. {
  903. return (dev->flags & ~(IFF_PROMISC | IFF_ALLMULTI)) |
  904. (dev->gflags & (IFF_PROMISC | IFF_ALLMULTI));
  905. }
  906. static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,
  907. const struct ifinfomsg *ifm)
  908. {
  909. unsigned int flags = ifm->ifi_flags;
  910. /* bugwards compatibility: ifi_change == 0 is treated as ~0 */
  911. if (ifm->ifi_change)
  912. flags = (flags & ifm->ifi_change) |
  913. (rtnl_dev_get_flags(dev) & ~ifm->ifi_change);
  914. return flags;
  915. }
  916. static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
  917. const struct rtnl_link_stats64 *b)
  918. {
  919. a->rx_packets = b->rx_packets;
  920. a->tx_packets = b->tx_packets;
  921. a->rx_bytes = b->rx_bytes;
  922. a->tx_bytes = b->tx_bytes;
  923. a->rx_errors = b->rx_errors;
  924. a->tx_errors = b->tx_errors;
  925. a->rx_dropped = b->rx_dropped;
  926. a->tx_dropped = b->tx_dropped;
  927. a->multicast = b->multicast;
  928. a->collisions = b->collisions;
  929. a->rx_length_errors = b->rx_length_errors;
  930. a->rx_over_errors = b->rx_over_errors;
  931. a->rx_crc_errors = b->rx_crc_errors;
  932. a->rx_frame_errors = b->rx_frame_errors;
  933. a->rx_fifo_errors = b->rx_fifo_errors;
  934. a->rx_missed_errors = b->rx_missed_errors;
  935. a->tx_aborted_errors = b->tx_aborted_errors;
  936. a->tx_carrier_errors = b->tx_carrier_errors;
  937. a->tx_fifo_errors = b->tx_fifo_errors;
  938. a->tx_heartbeat_errors = b->tx_heartbeat_errors;
  939. a->tx_window_errors = b->tx_window_errors;
  940. a->rx_compressed = b->rx_compressed;
  941. a->tx_compressed = b->tx_compressed;
  942. a->rx_nohandler = b->rx_nohandler;
  943. }
  944. /* All VF info */
  945. static inline int rtnl_vfinfo_size(const struct net_device *dev,
  946. u32 ext_filter_mask)
  947. {
  948. if (dev->dev.parent && (ext_filter_mask & RTEXT_FILTER_VF)) {
  949. int num_vfs = dev_num_vf(dev->dev.parent);
  950. size_t size = nla_total_size(0);
  951. size += num_vfs *
  952. (nla_total_size(0) +
  953. nla_total_size(sizeof(struct ifla_vf_mac)) +
  954. nla_total_size(sizeof(struct ifla_vf_broadcast)) +
  955. nla_total_size(sizeof(struct ifla_vf_vlan)) +
  956. nla_total_size(0) + /* nest IFLA_VF_VLAN_LIST */
  957. nla_total_size(MAX_VLAN_LIST_LEN *
  958. sizeof(struct ifla_vf_vlan_info)) +
  959. nla_total_size(sizeof(struct ifla_vf_spoofchk)) +
  960. nla_total_size(sizeof(struct ifla_vf_tx_rate)) +
  961. nla_total_size(sizeof(struct ifla_vf_rate)) +
  962. nla_total_size(sizeof(struct ifla_vf_link_state)) +
  963. nla_total_size(sizeof(struct ifla_vf_rss_query_en)) +
  964. nla_total_size(sizeof(struct ifla_vf_trust)));
  965. if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) {
  966. size += num_vfs *
  967. (nla_total_size(0) + /* nest IFLA_VF_STATS */
  968. /* IFLA_VF_STATS_RX_PACKETS */
  969. nla_total_size_64bit(sizeof(__u64)) +
  970. /* IFLA_VF_STATS_TX_PACKETS */
  971. nla_total_size_64bit(sizeof(__u64)) +
  972. /* IFLA_VF_STATS_RX_BYTES */
  973. nla_total_size_64bit(sizeof(__u64)) +
  974. /* IFLA_VF_STATS_TX_BYTES */
  975. nla_total_size_64bit(sizeof(__u64)) +
  976. /* IFLA_VF_STATS_BROADCAST */
  977. nla_total_size_64bit(sizeof(__u64)) +
  978. /* IFLA_VF_STATS_MULTICAST */
  979. nla_total_size_64bit(sizeof(__u64)) +
  980. /* IFLA_VF_STATS_RX_DROPPED */
  981. nla_total_size_64bit(sizeof(__u64)) +
  982. /* IFLA_VF_STATS_TX_DROPPED */
  983. nla_total_size_64bit(sizeof(__u64)));
  984. }
  985. if (dev->netdev_ops->ndo_get_vf_guid)
  986. size += num_vfs * 2 *
  987. nla_total_size(sizeof(struct ifla_vf_guid));
  988. return size;
  989. } else
  990. return 0;
  991. }
  992. static size_t rtnl_port_size(const struct net_device *dev,
  993. u32 ext_filter_mask)
  994. {
  995. size_t port_size = nla_total_size(4) /* PORT_VF */
  996. + nla_total_size(PORT_PROFILE_MAX) /* PORT_PROFILE */
  997. + nla_total_size(PORT_UUID_MAX) /* PORT_INSTANCE_UUID */
  998. + nla_total_size(PORT_UUID_MAX) /* PORT_HOST_UUID */
  999. + nla_total_size(1) /* PROT_VDP_REQUEST */
  1000. + nla_total_size(2); /* PORT_VDP_RESPONSE */
  1001. size_t vf_ports_size = nla_total_size(sizeof(struct nlattr));
  1002. size_t vf_port_size = nla_total_size(sizeof(struct nlattr))
  1003. + port_size;
  1004. size_t port_self_size = nla_total_size(sizeof(struct nlattr))
  1005. + port_size;
  1006. if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
  1007. !(ext_filter_mask & RTEXT_FILTER_VF))
  1008. return 0;
  1009. if (dev_num_vf(dev->dev.parent))
  1010. return port_self_size + vf_ports_size +
  1011. vf_port_size * dev_num_vf(dev->dev.parent);
  1012. else
  1013. return port_self_size;
  1014. }
  1015. static size_t rtnl_xdp_size(void)
  1016. {
  1017. size_t xdp_size = nla_total_size(0) + /* nest IFLA_XDP */
  1018. nla_total_size(1) + /* XDP_ATTACHED */
  1019. nla_total_size(4) + /* XDP_PROG_ID (or 1st mode) */
  1020. nla_total_size(4); /* XDP_<mode>_PROG_ID */
  1021. return xdp_size;
  1022. }
  1023. static size_t rtnl_prop_list_size(const struct net_device *dev)
  1024. {
  1025. struct netdev_name_node *name_node;
  1026. unsigned int cnt = 0;
  1027. rcu_read_lock();
  1028. list_for_each_entry_rcu(name_node, &dev->name_node->list, list)
  1029. cnt++;
  1030. rcu_read_unlock();
  1031. if (!cnt)
  1032. return 0;
  1033. return nla_total_size(0) + cnt * nla_total_size(ALTIFNAMSIZ);
  1034. }
  1035. static size_t rtnl_proto_down_size(const struct net_device *dev)
  1036. {
  1037. size_t size = nla_total_size(1);
  1038. /* Assume dev->proto_down_reason is not zero. */
  1039. size += nla_total_size(0) + nla_total_size(4);
  1040. return size;
  1041. }
  1042. static size_t rtnl_devlink_port_size(const struct net_device *dev)
  1043. {
  1044. size_t size = nla_total_size(0); /* nest IFLA_DEVLINK_PORT */
  1045. if (dev->devlink_port)
  1046. size += devlink_nl_port_handle_size(dev->devlink_port);
  1047. return size;
  1048. }
  1049. static size_t rtnl_dpll_pin_size(const struct net_device *dev)
  1050. {
  1051. size_t size = nla_total_size(0); /* nest IFLA_DPLL_PIN */
  1052. size += dpll_netdev_pin_handle_size(dev);
  1053. return size;
  1054. }
  1055. static size_t rtnl_dev_parent_size(const struct net_device *dev)
  1056. {
  1057. size_t size = 0;
  1058. /* IFLA_PARENT_DEV_NAME */
  1059. if (dev->dev.parent)
  1060. size += nla_total_size(strlen(dev_name(dev->dev.parent)) + 1);
  1061. /* IFLA_PARENT_DEV_BUS_NAME */
  1062. if (dev->dev.parent && dev->dev.parent->bus)
  1063. size += nla_total_size(strlen(dev->dev.parent->bus->name) + 1);
  1064. return size;
  1065. }
  1066. static noinline size_t if_nlmsg_size(const struct net_device *dev,
  1067. u32 ext_filter_mask)
  1068. {
  1069. size_t size;
  1070. size = NLMSG_ALIGN(sizeof(struct ifinfomsg))
  1071. + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
  1072. + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
  1073. + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
  1074. + nla_total_size_64bit(sizeof(struct rtnl_link_ifmap))
  1075. + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
  1076. + nla_total_size(MAX_ADDR_LEN) /* IFLA_BROADCAST */
  1077. + nla_total_size(4) /* IFLA_TXQLEN */
  1078. + nla_total_size(4) /* IFLA_WEIGHT */
  1079. + nla_total_size(4) /* IFLA_MTU */
  1080. + nla_total_size(4) /* IFLA_LINK */
  1081. + nla_total_size(4) /* IFLA_MASTER */
  1082. + nla_total_size(1) /* IFLA_CARRIER */
  1083. + nla_total_size(4) /* IFLA_PROMISCUITY */
  1084. + nla_total_size(4) /* IFLA_ALLMULTI */
  1085. + nla_total_size(4) /* IFLA_NUM_TX_QUEUES */
  1086. + nla_total_size(4) /* IFLA_NUM_RX_QUEUES */
  1087. + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */
  1088. + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */
  1089. + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */
  1090. + nla_total_size(4) /* IFLA_GSO_IPV4_MAX_SIZE */
  1091. + nla_total_size(4) /* IFLA_GRO_IPV4_MAX_SIZE */
  1092. + nla_total_size(4) /* IFLA_TSO_MAX_SIZE */
  1093. + nla_total_size(4) /* IFLA_TSO_MAX_SEGS */
  1094. + nla_total_size(1) /* IFLA_OPERSTATE */
  1095. + nla_total_size(1) /* IFLA_LINKMODE */
  1096. + nla_total_size(1) /* IFLA_NETNS_IMMUTABLE */
  1097. + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
  1098. + nla_total_size(4) /* IFLA_LINK_NETNSID */
  1099. + nla_total_size(4) /* IFLA_GROUP */
  1100. + nla_total_size(ext_filter_mask
  1101. & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
  1102. + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
  1103. + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
  1104. + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
  1105. + rtnl_link_get_af_size(dev, ext_filter_mask) /* IFLA_AF_SPEC */
  1106. + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
  1107. + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */
  1108. + nla_total_size(IFNAMSIZ) /* IFLA_PHYS_PORT_NAME */
  1109. + rtnl_xdp_size() /* IFLA_XDP */
  1110. + nla_total_size(4) /* IFLA_EVENT */
  1111. + nla_total_size(4) /* IFLA_NEW_NETNSID */
  1112. + nla_total_size(4) /* IFLA_NEW_IFINDEX */
  1113. + rtnl_proto_down_size(dev) /* proto down */
  1114. + nla_total_size(4) /* IFLA_TARGET_NETNSID */
  1115. + nla_total_size(4) /* IFLA_CARRIER_UP_COUNT */
  1116. + nla_total_size(4) /* IFLA_CARRIER_DOWN_COUNT */
  1117. + nla_total_size(4) /* IFLA_MIN_MTU */
  1118. + nla_total_size(4) /* IFLA_MAX_MTU */
  1119. + rtnl_prop_list_size(dev)
  1120. + nla_total_size(MAX_ADDR_LEN) /* IFLA_PERM_ADDRESS */
  1121. + rtnl_devlink_port_size(dev)
  1122. + rtnl_dpll_pin_size(dev)
  1123. + nla_total_size(8) /* IFLA_MAX_PACING_OFFLOAD_HORIZON */
  1124. + nla_total_size(2) /* IFLA_HEADROOM */
  1125. + nla_total_size(2) /* IFLA_TAILROOM */
  1126. + rtnl_dev_parent_size(dev)
  1127. + 0;
  1128. if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS))
  1129. size += nla_total_size(sizeof(struct rtnl_link_stats)) +
  1130. nla_total_size_64bit(sizeof(struct rtnl_link_stats64));
  1131. return size;
  1132. }
  1133. static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
  1134. {
  1135. struct nlattr *vf_ports;
  1136. struct nlattr *vf_port;
  1137. int vf;
  1138. int err;
  1139. vf_ports = nla_nest_start_noflag(skb, IFLA_VF_PORTS);
  1140. if (!vf_ports)
  1141. return -EMSGSIZE;
  1142. for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
  1143. vf_port = nla_nest_start_noflag(skb, IFLA_VF_PORT);
  1144. if (!vf_port)
  1145. goto nla_put_failure;
  1146. if (nla_put_u32(skb, IFLA_PORT_VF, vf))
  1147. goto nla_put_failure;
  1148. err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
  1149. if (err == -EMSGSIZE)
  1150. goto nla_put_failure;
  1151. if (err) {
  1152. nla_nest_cancel(skb, vf_port);
  1153. continue;
  1154. }
  1155. nla_nest_end(skb, vf_port);
  1156. }
  1157. nla_nest_end(skb, vf_ports);
  1158. return 0;
  1159. nla_put_failure:
  1160. nla_nest_cancel(skb, vf_ports);
  1161. return -EMSGSIZE;
  1162. }
  1163. static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
  1164. {
  1165. struct nlattr *port_self;
  1166. int err;
  1167. port_self = nla_nest_start_noflag(skb, IFLA_PORT_SELF);
  1168. if (!port_self)
  1169. return -EMSGSIZE;
  1170. err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
  1171. if (err) {
  1172. nla_nest_cancel(skb, port_self);
  1173. return (err == -EMSGSIZE) ? err : 0;
  1174. }
  1175. nla_nest_end(skb, port_self);
  1176. return 0;
  1177. }
  1178. static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev,
  1179. u32 ext_filter_mask)
  1180. {
  1181. int err;
  1182. if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
  1183. !(ext_filter_mask & RTEXT_FILTER_VF))
  1184. return 0;
  1185. err = rtnl_port_self_fill(skb, dev);
  1186. if (err)
  1187. return err;
  1188. if (dev_num_vf(dev->dev.parent)) {
  1189. err = rtnl_vf_ports_fill(skb, dev);
  1190. if (err)
  1191. return err;
  1192. }
  1193. return 0;
  1194. }
  1195. static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev)
  1196. {
  1197. int err;
  1198. struct netdev_phys_item_id ppid;
  1199. err = dev_get_phys_port_id(dev, &ppid);
  1200. if (err) {
  1201. if (err == -EOPNOTSUPP)
  1202. return 0;
  1203. return err;
  1204. }
  1205. if (nla_put(skb, IFLA_PHYS_PORT_ID, ppid.id_len, ppid.id))
  1206. return -EMSGSIZE;
  1207. return 0;
  1208. }
  1209. static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev)
  1210. {
  1211. char name[IFNAMSIZ];
  1212. int err;
  1213. err = dev_get_phys_port_name(dev, name, sizeof(name));
  1214. if (err) {
  1215. if (err == -EOPNOTSUPP)
  1216. return 0;
  1217. return err;
  1218. }
  1219. if (nla_put_string(skb, IFLA_PHYS_PORT_NAME, name))
  1220. return -EMSGSIZE;
  1221. return 0;
  1222. }
  1223. static int rtnl_phys_switch_id_fill(struct sk_buff *skb, struct net_device *dev)
  1224. {
  1225. struct netdev_phys_item_id ppid = { };
  1226. int err;
  1227. err = netif_get_port_parent_id(dev, &ppid, false);
  1228. if (err) {
  1229. if (err == -EOPNOTSUPP)
  1230. return 0;
  1231. return err;
  1232. }
  1233. if (nla_put(skb, IFLA_PHYS_SWITCH_ID, ppid.id_len, ppid.id))
  1234. return -EMSGSIZE;
  1235. return 0;
  1236. }
  1237. static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb,
  1238. struct net_device *dev)
  1239. {
  1240. struct rtnl_link_stats64 *sp;
  1241. struct nlattr *attr;
  1242. attr = nla_reserve_64bit(skb, IFLA_STATS64,
  1243. sizeof(struct rtnl_link_stats64), IFLA_PAD);
  1244. if (!attr)
  1245. return -EMSGSIZE;
  1246. sp = nla_data(attr);
  1247. dev_get_stats(dev, sp);
  1248. attr = nla_reserve(skb, IFLA_STATS,
  1249. sizeof(struct rtnl_link_stats));
  1250. if (!attr)
  1251. return -EMSGSIZE;
  1252. copy_rtnl_link_stats(nla_data(attr), sp);
  1253. return 0;
  1254. }
  1255. static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
  1256. struct net_device *dev,
  1257. int vfs_num,
  1258. u32 ext_filter_mask)
  1259. {
  1260. struct ifla_vf_rss_query_en vf_rss_query_en;
  1261. struct nlattr *vf, *vfstats, *vfvlanlist;
  1262. struct ifla_vf_link_state vf_linkstate;
  1263. struct ifla_vf_vlan_info vf_vlan_info;
  1264. struct ifla_vf_spoofchk vf_spoofchk;
  1265. struct ifla_vf_tx_rate vf_tx_rate;
  1266. struct ifla_vf_stats vf_stats;
  1267. struct ifla_vf_trust vf_trust;
  1268. struct ifla_vf_vlan vf_vlan;
  1269. struct ifla_vf_rate vf_rate;
  1270. struct ifla_vf_mac vf_mac;
  1271. struct ifla_vf_broadcast vf_broadcast;
  1272. struct ifla_vf_info ivi;
  1273. struct ifla_vf_guid node_guid;
  1274. struct ifla_vf_guid port_guid;
  1275. memset(&ivi, 0, sizeof(ivi));
  1276. /* Not all SR-IOV capable drivers support the
  1277. * spoofcheck and "RSS query enable" query. Preset to
  1278. * -1 so the user space tool can detect that the driver
  1279. * didn't report anything.
  1280. */
  1281. ivi.spoofchk = -1;
  1282. ivi.rss_query_en = -1;
  1283. ivi.trusted = -1;
  1284. /* The default value for VF link state is "auto"
  1285. * IFLA_VF_LINK_STATE_AUTO which equals zero
  1286. */
  1287. ivi.linkstate = 0;
  1288. /* VLAN Protocol by default is 802.1Q */
  1289. ivi.vlan_proto = htons(ETH_P_8021Q);
  1290. if (dev->netdev_ops->ndo_get_vf_config(dev, vfs_num, &ivi))
  1291. return 0;
  1292. memset(&vf_vlan_info, 0, sizeof(vf_vlan_info));
  1293. memset(&node_guid, 0, sizeof(node_guid));
  1294. memset(&port_guid, 0, sizeof(port_guid));
  1295. vf_mac.vf =
  1296. vf_vlan.vf =
  1297. vf_vlan_info.vf =
  1298. vf_rate.vf =
  1299. vf_tx_rate.vf =
  1300. vf_spoofchk.vf =
  1301. vf_linkstate.vf =
  1302. vf_rss_query_en.vf =
  1303. vf_trust.vf =
  1304. node_guid.vf =
  1305. port_guid.vf = ivi.vf;
  1306. memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
  1307. memcpy(vf_broadcast.broadcast, dev->broadcast, dev->addr_len);
  1308. vf_vlan.vlan = ivi.vlan;
  1309. vf_vlan.qos = ivi.qos;
  1310. vf_vlan_info.vlan = ivi.vlan;
  1311. vf_vlan_info.qos = ivi.qos;
  1312. vf_vlan_info.vlan_proto = ivi.vlan_proto;
  1313. vf_tx_rate.rate = ivi.max_tx_rate;
  1314. vf_rate.min_tx_rate = ivi.min_tx_rate;
  1315. vf_rate.max_tx_rate = ivi.max_tx_rate;
  1316. vf_spoofchk.setting = ivi.spoofchk;
  1317. vf_linkstate.link_state = ivi.linkstate;
  1318. vf_rss_query_en.setting = ivi.rss_query_en;
  1319. vf_trust.setting = ivi.trusted;
  1320. vf = nla_nest_start_noflag(skb, IFLA_VF_INFO);
  1321. if (!vf)
  1322. return -EMSGSIZE;
  1323. if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
  1324. nla_put(skb, IFLA_VF_BROADCAST, sizeof(vf_broadcast), &vf_broadcast) ||
  1325. nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
  1326. nla_put(skb, IFLA_VF_RATE, sizeof(vf_rate),
  1327. &vf_rate) ||
  1328. nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
  1329. &vf_tx_rate) ||
  1330. nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
  1331. &vf_spoofchk) ||
  1332. nla_put(skb, IFLA_VF_LINK_STATE, sizeof(vf_linkstate),
  1333. &vf_linkstate) ||
  1334. nla_put(skb, IFLA_VF_RSS_QUERY_EN,
  1335. sizeof(vf_rss_query_en),
  1336. &vf_rss_query_en) ||
  1337. nla_put(skb, IFLA_VF_TRUST,
  1338. sizeof(vf_trust), &vf_trust))
  1339. goto nla_put_vf_failure;
  1340. if (dev->netdev_ops->ndo_get_vf_guid &&
  1341. !dev->netdev_ops->ndo_get_vf_guid(dev, vfs_num, &node_guid,
  1342. &port_guid)) {
  1343. if (nla_put(skb, IFLA_VF_IB_NODE_GUID, sizeof(node_guid),
  1344. &node_guid) ||
  1345. nla_put(skb, IFLA_VF_IB_PORT_GUID, sizeof(port_guid),
  1346. &port_guid))
  1347. goto nla_put_vf_failure;
  1348. }
  1349. vfvlanlist = nla_nest_start_noflag(skb, IFLA_VF_VLAN_LIST);
  1350. if (!vfvlanlist)
  1351. goto nla_put_vf_failure;
  1352. if (nla_put(skb, IFLA_VF_VLAN_INFO, sizeof(vf_vlan_info),
  1353. &vf_vlan_info)) {
  1354. nla_nest_cancel(skb, vfvlanlist);
  1355. goto nla_put_vf_failure;
  1356. }
  1357. nla_nest_end(skb, vfvlanlist);
  1358. if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) {
  1359. memset(&vf_stats, 0, sizeof(vf_stats));
  1360. if (dev->netdev_ops->ndo_get_vf_stats)
  1361. dev->netdev_ops->ndo_get_vf_stats(dev, vfs_num,
  1362. &vf_stats);
  1363. vfstats = nla_nest_start_noflag(skb, IFLA_VF_STATS);
  1364. if (!vfstats)
  1365. goto nla_put_vf_failure;
  1366. if (nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_PACKETS,
  1367. vf_stats.rx_packets, IFLA_VF_STATS_PAD) ||
  1368. nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_PACKETS,
  1369. vf_stats.tx_packets, IFLA_VF_STATS_PAD) ||
  1370. nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_BYTES,
  1371. vf_stats.rx_bytes, IFLA_VF_STATS_PAD) ||
  1372. nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_BYTES,
  1373. vf_stats.tx_bytes, IFLA_VF_STATS_PAD) ||
  1374. nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST,
  1375. vf_stats.broadcast, IFLA_VF_STATS_PAD) ||
  1376. nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST,
  1377. vf_stats.multicast, IFLA_VF_STATS_PAD) ||
  1378. nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_DROPPED,
  1379. vf_stats.rx_dropped, IFLA_VF_STATS_PAD) ||
  1380. nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_DROPPED,
  1381. vf_stats.tx_dropped, IFLA_VF_STATS_PAD)) {
  1382. nla_nest_cancel(skb, vfstats);
  1383. goto nla_put_vf_failure;
  1384. }
  1385. nla_nest_end(skb, vfstats);
  1386. }
  1387. nla_nest_end(skb, vf);
  1388. return 0;
  1389. nla_put_vf_failure:
  1390. nla_nest_cancel(skb, vf);
  1391. return -EMSGSIZE;
  1392. }
  1393. static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb,
  1394. struct net_device *dev,
  1395. u32 ext_filter_mask)
  1396. {
  1397. struct nlattr *vfinfo;
  1398. int i, num_vfs;
  1399. if (!dev->dev.parent || ((ext_filter_mask & RTEXT_FILTER_VF) == 0))
  1400. return 0;
  1401. num_vfs = dev_num_vf(dev->dev.parent);
  1402. if (nla_put_u32(skb, IFLA_NUM_VF, num_vfs))
  1403. return -EMSGSIZE;
  1404. if (!dev->netdev_ops->ndo_get_vf_config)
  1405. return 0;
  1406. vfinfo = nla_nest_start_noflag(skb, IFLA_VFINFO_LIST);
  1407. if (!vfinfo)
  1408. return -EMSGSIZE;
  1409. for (i = 0; i < num_vfs; i++) {
  1410. if (rtnl_fill_vfinfo(skb, dev, i, ext_filter_mask)) {
  1411. nla_nest_cancel(skb, vfinfo);
  1412. return -EMSGSIZE;
  1413. }
  1414. }
  1415. nla_nest_end(skb, vfinfo);
  1416. return 0;
  1417. }
  1418. static int rtnl_fill_link_ifmap(struct sk_buff *skb,
  1419. const struct net_device *dev)
  1420. {
  1421. struct rtnl_link_ifmap map;
  1422. memset(&map, 0, sizeof(map));
  1423. map.mem_start = READ_ONCE(dev->mem_start);
  1424. map.mem_end = READ_ONCE(dev->mem_end);
  1425. map.base_addr = READ_ONCE(dev->base_addr);
  1426. map.irq = READ_ONCE(dev->irq);
  1427. map.dma = READ_ONCE(dev->dma);
  1428. map.port = READ_ONCE(dev->if_port);
  1429. if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD))
  1430. return -EMSGSIZE;
  1431. return 0;
  1432. }
  1433. static u32 rtnl_xdp_prog_skb(struct net_device *dev)
  1434. {
  1435. const struct bpf_prog *generic_xdp_prog;
  1436. u32 res = 0;
  1437. rcu_read_lock();
  1438. generic_xdp_prog = rcu_dereference(dev->xdp_prog);
  1439. if (generic_xdp_prog)
  1440. res = generic_xdp_prog->aux->id;
  1441. rcu_read_unlock();
  1442. return res;
  1443. }
  1444. static u32 rtnl_xdp_prog_drv(struct net_device *dev)
  1445. {
  1446. return dev_xdp_prog_id(dev, XDP_MODE_DRV);
  1447. }
  1448. static u32 rtnl_xdp_prog_hw(struct net_device *dev)
  1449. {
  1450. return dev_xdp_prog_id(dev, XDP_MODE_HW);
  1451. }
  1452. static int rtnl_xdp_report_one(struct sk_buff *skb, struct net_device *dev,
  1453. u32 *prog_id, u8 *mode, u8 tgt_mode, u32 attr,
  1454. u32 (*get_prog_id)(struct net_device *dev))
  1455. {
  1456. u32 curr_id;
  1457. int err;
  1458. curr_id = get_prog_id(dev);
  1459. if (!curr_id)
  1460. return 0;
  1461. *prog_id = curr_id;
  1462. err = nla_put_u32(skb, attr, curr_id);
  1463. if (err)
  1464. return err;
  1465. if (*mode != XDP_ATTACHED_NONE)
  1466. *mode = XDP_ATTACHED_MULTI;
  1467. else
  1468. *mode = tgt_mode;
  1469. return 0;
  1470. }
  1471. static int rtnl_xdp_fill(struct sk_buff *skb, struct net_device *dev)
  1472. {
  1473. struct nlattr *xdp;
  1474. u32 prog_id;
  1475. int err;
  1476. u8 mode;
  1477. xdp = nla_nest_start_noflag(skb, IFLA_XDP);
  1478. if (!xdp)
  1479. return -EMSGSIZE;
  1480. prog_id = 0;
  1481. mode = XDP_ATTACHED_NONE;
  1482. err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_SKB,
  1483. IFLA_XDP_SKB_PROG_ID, rtnl_xdp_prog_skb);
  1484. if (err)
  1485. goto err_cancel;
  1486. err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_DRV,
  1487. IFLA_XDP_DRV_PROG_ID, rtnl_xdp_prog_drv);
  1488. if (err)
  1489. goto err_cancel;
  1490. err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_HW,
  1491. IFLA_XDP_HW_PROG_ID, rtnl_xdp_prog_hw);
  1492. if (err)
  1493. goto err_cancel;
  1494. err = nla_put_u8(skb, IFLA_XDP_ATTACHED, mode);
  1495. if (err)
  1496. goto err_cancel;
  1497. if (prog_id && mode != XDP_ATTACHED_MULTI) {
  1498. err = nla_put_u32(skb, IFLA_XDP_PROG_ID, prog_id);
  1499. if (err)
  1500. goto err_cancel;
  1501. }
  1502. nla_nest_end(skb, xdp);
  1503. return 0;
  1504. err_cancel:
  1505. nla_nest_cancel(skb, xdp);
  1506. return err;
  1507. }
  1508. static u32 rtnl_get_event(unsigned long event)
  1509. {
  1510. u32 rtnl_event_type = IFLA_EVENT_NONE;
  1511. switch (event) {
  1512. case NETDEV_REBOOT:
  1513. rtnl_event_type = IFLA_EVENT_REBOOT;
  1514. break;
  1515. case NETDEV_FEAT_CHANGE:
  1516. rtnl_event_type = IFLA_EVENT_FEATURES;
  1517. break;
  1518. case NETDEV_BONDING_FAILOVER:
  1519. rtnl_event_type = IFLA_EVENT_BONDING_FAILOVER;
  1520. break;
  1521. case NETDEV_NOTIFY_PEERS:
  1522. rtnl_event_type = IFLA_EVENT_NOTIFY_PEERS;
  1523. break;
  1524. case NETDEV_RESEND_IGMP:
  1525. rtnl_event_type = IFLA_EVENT_IGMP_RESEND;
  1526. break;
  1527. case NETDEV_CHANGEINFODATA:
  1528. rtnl_event_type = IFLA_EVENT_BONDING_OPTIONS;
  1529. break;
  1530. default:
  1531. break;
  1532. }
  1533. return rtnl_event_type;
  1534. }
  1535. static int put_master_ifindex(struct sk_buff *skb, struct net_device *dev)
  1536. {
  1537. const struct net_device *upper_dev;
  1538. int ret = 0;
  1539. rcu_read_lock();
  1540. upper_dev = netdev_master_upper_dev_get_rcu(dev);
  1541. if (upper_dev)
  1542. ret = nla_put_u32(skb, IFLA_MASTER,
  1543. READ_ONCE(upper_dev->ifindex));
  1544. rcu_read_unlock();
  1545. return ret;
  1546. }
  1547. static int nla_put_iflink(struct sk_buff *skb, const struct net_device *dev,
  1548. bool force)
  1549. {
  1550. int iflink = dev_get_iflink(dev);
  1551. if (force || READ_ONCE(dev->ifindex) != iflink)
  1552. return nla_put_u32(skb, IFLA_LINK, iflink);
  1553. return 0;
  1554. }
  1555. static noinline_for_stack int nla_put_ifalias(struct sk_buff *skb,
  1556. struct net_device *dev)
  1557. {
  1558. char buf[IFALIASZ];
  1559. int ret;
  1560. ret = dev_get_alias(dev, buf, sizeof(buf));
  1561. return ret > 0 ? nla_put_string(skb, IFLA_IFALIAS, buf) : 0;
  1562. }
  1563. static int rtnl_fill_link_netnsid(struct sk_buff *skb,
  1564. const struct net_device *dev,
  1565. struct net *src_net, gfp_t gfp)
  1566. {
  1567. bool put_iflink = false;
  1568. if (dev->rtnl_link_ops && dev->rtnl_link_ops->get_link_net) {
  1569. struct net *link_net = dev->rtnl_link_ops->get_link_net(dev);
  1570. if (!net_eq(dev_net(dev), link_net)) {
  1571. int id = peernet2id_alloc(src_net, link_net, gfp);
  1572. if (nla_put_s32(skb, IFLA_LINK_NETNSID, id))
  1573. return -EMSGSIZE;
  1574. put_iflink = true;
  1575. }
  1576. }
  1577. return nla_put_iflink(skb, dev, put_iflink);
  1578. }
  1579. static int rtnl_fill_link_af(struct sk_buff *skb,
  1580. const struct net_device *dev,
  1581. u32 ext_filter_mask)
  1582. {
  1583. const struct rtnl_af_ops *af_ops;
  1584. struct nlattr *af_spec;
  1585. af_spec = nla_nest_start_noflag(skb, IFLA_AF_SPEC);
  1586. if (!af_spec)
  1587. return -EMSGSIZE;
  1588. list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
  1589. struct nlattr *af;
  1590. int err;
  1591. if (!af_ops->fill_link_af)
  1592. continue;
  1593. af = nla_nest_start_noflag(skb, af_ops->family);
  1594. if (!af)
  1595. return -EMSGSIZE;
  1596. err = af_ops->fill_link_af(skb, dev, ext_filter_mask);
  1597. /*
  1598. * Caller may return ENODATA to indicate that there
  1599. * was no data to be dumped. This is not an error, it
  1600. * means we should trim the attribute header and
  1601. * continue.
  1602. */
  1603. if (err == -ENODATA)
  1604. nla_nest_cancel(skb, af);
  1605. else if (err < 0)
  1606. return -EMSGSIZE;
  1607. nla_nest_end(skb, af);
  1608. }
  1609. nla_nest_end(skb, af_spec);
  1610. return 0;
  1611. }
  1612. static int rtnl_fill_alt_ifnames(struct sk_buff *skb,
  1613. const struct net_device *dev)
  1614. {
  1615. struct netdev_name_node *name_node;
  1616. int count = 0;
  1617. list_for_each_entry_rcu(name_node, &dev->name_node->list, list) {
  1618. if (nla_put_string(skb, IFLA_ALT_IFNAME, name_node->name))
  1619. return -EMSGSIZE;
  1620. count++;
  1621. }
  1622. return count;
  1623. }
  1624. /* RCU protected. */
  1625. static int rtnl_fill_prop_list(struct sk_buff *skb,
  1626. const struct net_device *dev)
  1627. {
  1628. struct nlattr *prop_list;
  1629. int ret;
  1630. prop_list = nla_nest_start(skb, IFLA_PROP_LIST);
  1631. if (!prop_list)
  1632. return -EMSGSIZE;
  1633. ret = rtnl_fill_alt_ifnames(skb, dev);
  1634. if (ret <= 0)
  1635. goto nest_cancel;
  1636. nla_nest_end(skb, prop_list);
  1637. return 0;
  1638. nest_cancel:
  1639. nla_nest_cancel(skb, prop_list);
  1640. return ret;
  1641. }
  1642. static int rtnl_fill_proto_down(struct sk_buff *skb,
  1643. const struct net_device *dev)
  1644. {
  1645. struct nlattr *pr;
  1646. u32 preason;
  1647. if (nla_put_u8(skb, IFLA_PROTO_DOWN, READ_ONCE(dev->proto_down)))
  1648. goto nla_put_failure;
  1649. preason = READ_ONCE(dev->proto_down_reason);
  1650. if (!preason)
  1651. return 0;
  1652. pr = nla_nest_start(skb, IFLA_PROTO_DOWN_REASON);
  1653. if (!pr)
  1654. return -EMSGSIZE;
  1655. if (nla_put_u32(skb, IFLA_PROTO_DOWN_REASON_VALUE, preason)) {
  1656. nla_nest_cancel(skb, pr);
  1657. goto nla_put_failure;
  1658. }
  1659. nla_nest_end(skb, pr);
  1660. return 0;
  1661. nla_put_failure:
  1662. return -EMSGSIZE;
  1663. }
  1664. static int rtnl_fill_devlink_port(struct sk_buff *skb,
  1665. const struct net_device *dev)
  1666. {
  1667. struct nlattr *devlink_port_nest;
  1668. int ret;
  1669. devlink_port_nest = nla_nest_start(skb, IFLA_DEVLINK_PORT);
  1670. if (!devlink_port_nest)
  1671. return -EMSGSIZE;
  1672. if (dev->devlink_port) {
  1673. ret = devlink_nl_port_handle_fill(skb, dev->devlink_port);
  1674. if (ret < 0)
  1675. goto nest_cancel;
  1676. }
  1677. nla_nest_end(skb, devlink_port_nest);
  1678. return 0;
  1679. nest_cancel:
  1680. nla_nest_cancel(skb, devlink_port_nest);
  1681. return ret;
  1682. }
  1683. static int rtnl_fill_dpll_pin(struct sk_buff *skb,
  1684. const struct net_device *dev)
  1685. {
  1686. struct nlattr *dpll_pin_nest;
  1687. int ret;
  1688. dpll_pin_nest = nla_nest_start(skb, IFLA_DPLL_PIN);
  1689. if (!dpll_pin_nest)
  1690. return -EMSGSIZE;
  1691. ret = dpll_netdev_add_pin_handle(skb, dev);
  1692. if (ret < 0)
  1693. goto nest_cancel;
  1694. nla_nest_end(skb, dpll_pin_nest);
  1695. return 0;
  1696. nest_cancel:
  1697. nla_nest_cancel(skb, dpll_pin_nest);
  1698. return ret;
  1699. }
  1700. static int rtnl_fill_ifinfo(struct sk_buff *skb,
  1701. struct net_device *dev, struct net *src_net,
  1702. int type, u32 pid, u32 seq, u32 change,
  1703. unsigned int flags, u32 ext_filter_mask,
  1704. u32 event, int *new_nsid, int new_ifindex,
  1705. int tgt_netnsid, gfp_t gfp)
  1706. {
  1707. char devname[IFNAMSIZ];
  1708. struct ifinfomsg *ifm;
  1709. struct nlmsghdr *nlh;
  1710. struct Qdisc *qdisc;
  1711. ASSERT_RTNL();
  1712. nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
  1713. if (nlh == NULL)
  1714. return -EMSGSIZE;
  1715. ifm = nlmsg_data(nlh);
  1716. ifm->ifi_family = AF_UNSPEC;
  1717. ifm->__ifi_pad = 0;
  1718. ifm->ifi_type = READ_ONCE(dev->type);
  1719. ifm->ifi_index = READ_ONCE(dev->ifindex);
  1720. ifm->ifi_flags = netif_get_flags(dev);
  1721. ifm->ifi_change = change;
  1722. if (tgt_netnsid >= 0 && nla_put_s32(skb, IFLA_TARGET_NETNSID, tgt_netnsid))
  1723. goto nla_put_failure;
  1724. netdev_copy_name(dev, devname);
  1725. if (nla_put_string(skb, IFLA_IFNAME, devname))
  1726. goto nla_put_failure;
  1727. if (nla_put_u32(skb, IFLA_TXQLEN, READ_ONCE(dev->tx_queue_len)) ||
  1728. nla_put_u8(skb, IFLA_OPERSTATE,
  1729. netif_running(dev) ? READ_ONCE(dev->operstate) :
  1730. IF_OPER_DOWN) ||
  1731. nla_put_u8(skb, IFLA_LINKMODE, READ_ONCE(dev->link_mode)) ||
  1732. nla_put_u8(skb, IFLA_NETNS_IMMUTABLE, dev->netns_immutable) ||
  1733. nla_put_u32(skb, IFLA_MTU, READ_ONCE(dev->mtu)) ||
  1734. nla_put_u32(skb, IFLA_MIN_MTU, READ_ONCE(dev->min_mtu)) ||
  1735. nla_put_u32(skb, IFLA_MAX_MTU, READ_ONCE(dev->max_mtu)) ||
  1736. nla_put_u32(skb, IFLA_GROUP, READ_ONCE(dev->group)) ||
  1737. nla_put_u32(skb, IFLA_PROMISCUITY, READ_ONCE(dev->promiscuity)) ||
  1738. nla_put_u32(skb, IFLA_ALLMULTI, READ_ONCE(dev->allmulti)) ||
  1739. nla_put_u32(skb, IFLA_NUM_TX_QUEUES,
  1740. READ_ONCE(dev->num_tx_queues)) ||
  1741. nla_put_u32(skb, IFLA_GSO_MAX_SEGS,
  1742. READ_ONCE(dev->gso_max_segs)) ||
  1743. nla_put_u32(skb, IFLA_GSO_MAX_SIZE,
  1744. READ_ONCE(dev->gso_max_size)) ||
  1745. nla_put_u32(skb, IFLA_GRO_MAX_SIZE,
  1746. READ_ONCE(dev->gro_max_size)) ||
  1747. nla_put_u32(skb, IFLA_GSO_IPV4_MAX_SIZE,
  1748. READ_ONCE(dev->gso_ipv4_max_size)) ||
  1749. nla_put_u32(skb, IFLA_GRO_IPV4_MAX_SIZE,
  1750. READ_ONCE(dev->gro_ipv4_max_size)) ||
  1751. nla_put_u32(skb, IFLA_TSO_MAX_SIZE,
  1752. READ_ONCE(dev->tso_max_size)) ||
  1753. nla_put_u32(skb, IFLA_TSO_MAX_SEGS,
  1754. READ_ONCE(dev->tso_max_segs)) ||
  1755. nla_put_uint(skb, IFLA_MAX_PACING_OFFLOAD_HORIZON,
  1756. READ_ONCE(dev->max_pacing_offload_horizon)) ||
  1757. #ifdef CONFIG_RPS
  1758. nla_put_u32(skb, IFLA_NUM_RX_QUEUES,
  1759. READ_ONCE(dev->num_rx_queues)) ||
  1760. #endif
  1761. put_master_ifindex(skb, dev) ||
  1762. nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
  1763. nla_put_ifalias(skb, dev) ||
  1764. nla_put_u32(skb, IFLA_CARRIER_CHANGES,
  1765. atomic_read(&dev->carrier_up_count) +
  1766. atomic_read(&dev->carrier_down_count)) ||
  1767. nla_put_u32(skb, IFLA_CARRIER_UP_COUNT,
  1768. atomic_read(&dev->carrier_up_count)) ||
  1769. nla_put_u32(skb, IFLA_CARRIER_DOWN_COUNT,
  1770. atomic_read(&dev->carrier_down_count)) ||
  1771. nla_put_u16(skb, IFLA_HEADROOM,
  1772. READ_ONCE(dev->needed_headroom)) ||
  1773. nla_put_u16(skb, IFLA_TAILROOM,
  1774. READ_ONCE(dev->needed_tailroom)))
  1775. goto nla_put_failure;
  1776. if (rtnl_fill_proto_down(skb, dev))
  1777. goto nla_put_failure;
  1778. if (event != IFLA_EVENT_NONE) {
  1779. if (nla_put_u32(skb, IFLA_EVENT, event))
  1780. goto nla_put_failure;
  1781. }
  1782. if (dev->addr_len) {
  1783. if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
  1784. nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
  1785. goto nla_put_failure;
  1786. }
  1787. if (rtnl_phys_port_id_fill(skb, dev))
  1788. goto nla_put_failure;
  1789. if (rtnl_phys_port_name_fill(skb, dev))
  1790. goto nla_put_failure;
  1791. if (rtnl_phys_switch_id_fill(skb, dev))
  1792. goto nla_put_failure;
  1793. if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS) &&
  1794. rtnl_fill_stats(skb, dev))
  1795. goto nla_put_failure;
  1796. if (rtnl_fill_vf(skb, dev, ext_filter_mask))
  1797. goto nla_put_failure;
  1798. if (rtnl_port_fill(skb, dev, ext_filter_mask))
  1799. goto nla_put_failure;
  1800. if (rtnl_xdp_fill(skb, dev))
  1801. goto nla_put_failure;
  1802. if (dev->rtnl_link_ops || rtnl_have_link_slave_info(dev)) {
  1803. if (rtnl_link_fill(skb, dev) < 0)
  1804. goto nla_put_failure;
  1805. }
  1806. if (new_nsid &&
  1807. nla_put_s32(skb, IFLA_NEW_NETNSID, *new_nsid) < 0)
  1808. goto nla_put_failure;
  1809. if (new_ifindex &&
  1810. nla_put_s32(skb, IFLA_NEW_IFINDEX, new_ifindex) < 0)
  1811. goto nla_put_failure;
  1812. if (memchr_inv(dev->perm_addr, '\0', dev->addr_len) &&
  1813. nla_put(skb, IFLA_PERM_ADDRESS, dev->addr_len, dev->perm_addr))
  1814. goto nla_put_failure;
  1815. rcu_read_lock();
  1816. if (rtnl_fill_link_netnsid(skb, dev, src_net, GFP_ATOMIC))
  1817. goto nla_put_failure_rcu;
  1818. qdisc = rcu_dereference(dev->qdisc);
  1819. if (qdisc && nla_put_string(skb, IFLA_QDISC, qdisc->ops->id))
  1820. goto nla_put_failure_rcu;
  1821. if (rtnl_fill_link_af(skb, dev, ext_filter_mask))
  1822. goto nla_put_failure_rcu;
  1823. if (rtnl_fill_link_ifmap(skb, dev))
  1824. goto nla_put_failure_rcu;
  1825. if (rtnl_fill_prop_list(skb, dev))
  1826. goto nla_put_failure_rcu;
  1827. rcu_read_unlock();
  1828. if (dev->dev.parent &&
  1829. nla_put_string(skb, IFLA_PARENT_DEV_NAME,
  1830. dev_name(dev->dev.parent)))
  1831. goto nla_put_failure;
  1832. if (dev->dev.parent && dev->dev.parent->bus &&
  1833. nla_put_string(skb, IFLA_PARENT_DEV_BUS_NAME,
  1834. dev->dev.parent->bus->name))
  1835. goto nla_put_failure;
  1836. if (rtnl_fill_devlink_port(skb, dev))
  1837. goto nla_put_failure;
  1838. if (rtnl_fill_dpll_pin(skb, dev))
  1839. goto nla_put_failure;
  1840. nlmsg_end(skb, nlh);
  1841. return 0;
  1842. nla_put_failure_rcu:
  1843. rcu_read_unlock();
  1844. nla_put_failure:
  1845. nlmsg_cancel(skb, nlh);
  1846. return -EMSGSIZE;
  1847. }
  1848. static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
  1849. [IFLA_UNSPEC] = { .strict_start_type = IFLA_DPLL_PIN },
  1850. [IFLA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ-1 },
  1851. [IFLA_ADDRESS] = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
  1852. [IFLA_BROADCAST] = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
  1853. [IFLA_MAP] = { .len = sizeof(struct rtnl_link_ifmap) },
  1854. [IFLA_MTU] = { .type = NLA_U32 },
  1855. [IFLA_LINK] = { .type = NLA_U32 },
  1856. [IFLA_MASTER] = { .type = NLA_U32 },
  1857. [IFLA_CARRIER] = { .type = NLA_U8 },
  1858. [IFLA_TXQLEN] = { .type = NLA_U32 },
  1859. [IFLA_WEIGHT] = { .type = NLA_U32 },
  1860. [IFLA_OPERSTATE] = { .type = NLA_U8 },
  1861. [IFLA_LINKMODE] = { .type = NLA_U8 },
  1862. [IFLA_LINKINFO] = { .type = NLA_NESTED },
  1863. [IFLA_NET_NS_PID] = { .type = NLA_U32 },
  1864. [IFLA_NET_NS_FD] = { .type = NLA_U32 },
  1865. /* IFLA_IFALIAS is a string, but policy is set to NLA_BINARY to
  1866. * allow 0-length string (needed to remove an alias).
  1867. */
  1868. [IFLA_IFALIAS] = { .type = NLA_BINARY, .len = IFALIASZ - 1 },
  1869. [IFLA_VFINFO_LIST] = {. type = NLA_NESTED },
  1870. [IFLA_VF_PORTS] = { .type = NLA_NESTED },
  1871. [IFLA_PORT_SELF] = { .type = NLA_NESTED },
  1872. [IFLA_AF_SPEC] = { .type = NLA_NESTED },
  1873. [IFLA_EXT_MASK] = { .type = NLA_U32 },
  1874. [IFLA_PROMISCUITY] = { .type = NLA_U32 },
  1875. [IFLA_NUM_TX_QUEUES] = { .type = NLA_U32 },
  1876. [IFLA_NUM_RX_QUEUES] = { .type = NLA_U32 },
  1877. [IFLA_GSO_MAX_SEGS] = { .type = NLA_U32 },
  1878. [IFLA_GSO_MAX_SIZE] = NLA_POLICY_MIN(NLA_U32, MAX_TCP_HEADER + 1),
  1879. [IFLA_PHYS_PORT_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
  1880. [IFLA_CARRIER_CHANGES] = { .type = NLA_U32 }, /* ignored */
  1881. [IFLA_PHYS_SWITCH_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
  1882. [IFLA_LINK_NETNSID] = { .type = NLA_S32 },
  1883. [IFLA_PROTO_DOWN] = { .type = NLA_U8 },
  1884. [IFLA_XDP] = { .type = NLA_NESTED },
  1885. [IFLA_EVENT] = { .type = NLA_U32 },
  1886. [IFLA_GROUP] = { .type = NLA_U32 },
  1887. [IFLA_TARGET_NETNSID] = { .type = NLA_S32 },
  1888. [IFLA_CARRIER_UP_COUNT] = { .type = NLA_U32 },
  1889. [IFLA_CARRIER_DOWN_COUNT] = { .type = NLA_U32 },
  1890. [IFLA_MIN_MTU] = { .type = NLA_U32 },
  1891. [IFLA_MAX_MTU] = { .type = NLA_U32 },
  1892. [IFLA_PROP_LIST] = { .type = NLA_NESTED },
  1893. [IFLA_ALT_IFNAME] = { .type = NLA_STRING,
  1894. .len = ALTIFNAMSIZ - 1 },
  1895. [IFLA_PERM_ADDRESS] = { .type = NLA_REJECT },
  1896. [IFLA_PROTO_DOWN_REASON] = { .type = NLA_NESTED },
  1897. [IFLA_NEW_IFINDEX] = NLA_POLICY_MIN(NLA_S32, 1),
  1898. [IFLA_PARENT_DEV_NAME] = { .type = NLA_NUL_STRING },
  1899. [IFLA_GRO_MAX_SIZE] = { .type = NLA_U32 },
  1900. [IFLA_TSO_MAX_SIZE] = { .type = NLA_REJECT },
  1901. [IFLA_TSO_MAX_SEGS] = { .type = NLA_REJECT },
  1902. [IFLA_ALLMULTI] = { .type = NLA_REJECT },
  1903. [IFLA_GSO_IPV4_MAX_SIZE] = NLA_POLICY_MIN(NLA_U32, MAX_TCP_HEADER + 1),
  1904. [IFLA_GRO_IPV4_MAX_SIZE] = { .type = NLA_U32 },
  1905. [IFLA_NETNS_IMMUTABLE] = { .type = NLA_REJECT },
  1906. [IFLA_HEADROOM] = { .type = NLA_REJECT },
  1907. [IFLA_TAILROOM] = { .type = NLA_REJECT },
  1908. };
  1909. static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
  1910. [IFLA_INFO_KIND] = { .type = NLA_STRING },
  1911. [IFLA_INFO_DATA] = { .type = NLA_NESTED },
  1912. [IFLA_INFO_SLAVE_KIND] = { .type = NLA_STRING },
  1913. [IFLA_INFO_SLAVE_DATA] = { .type = NLA_NESTED },
  1914. };
  1915. static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
  1916. [IFLA_VF_MAC] = { .len = sizeof(struct ifla_vf_mac) },
  1917. [IFLA_VF_BROADCAST] = { .type = NLA_REJECT },
  1918. [IFLA_VF_VLAN] = { .len = sizeof(struct ifla_vf_vlan) },
  1919. [IFLA_VF_VLAN_LIST] = { .type = NLA_NESTED },
  1920. [IFLA_VF_TX_RATE] = { .len = sizeof(struct ifla_vf_tx_rate) },
  1921. [IFLA_VF_SPOOFCHK] = { .len = sizeof(struct ifla_vf_spoofchk) },
  1922. [IFLA_VF_RATE] = { .len = sizeof(struct ifla_vf_rate) },
  1923. [IFLA_VF_LINK_STATE] = { .len = sizeof(struct ifla_vf_link_state) },
  1924. [IFLA_VF_RSS_QUERY_EN] = { .len = sizeof(struct ifla_vf_rss_query_en) },
  1925. [IFLA_VF_STATS] = { .type = NLA_NESTED },
  1926. [IFLA_VF_TRUST] = { .len = sizeof(struct ifla_vf_trust) },
  1927. [IFLA_VF_IB_NODE_GUID] = { .len = sizeof(struct ifla_vf_guid) },
  1928. [IFLA_VF_IB_PORT_GUID] = { .len = sizeof(struct ifla_vf_guid) },
  1929. };
  1930. static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
  1931. [IFLA_PORT_VF] = { .type = NLA_U32 },
  1932. [IFLA_PORT_PROFILE] = { .type = NLA_STRING,
  1933. .len = PORT_PROFILE_MAX },
  1934. [IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
  1935. .len = PORT_UUID_MAX },
  1936. [IFLA_PORT_HOST_UUID] = { .type = NLA_STRING,
  1937. .len = PORT_UUID_MAX },
  1938. [IFLA_PORT_REQUEST] = { .type = NLA_U8, },
  1939. [IFLA_PORT_RESPONSE] = { .type = NLA_U16, },
  1940. /* Unused, but we need to keep it here since user space could
  1941. * fill it. It's also broken with regard to NLA_BINARY use in
  1942. * combination with structs.
  1943. */
  1944. [IFLA_PORT_VSI_TYPE] = { .type = NLA_BINARY,
  1945. .len = sizeof(struct ifla_port_vsi) },
  1946. };
  1947. static const struct nla_policy ifla_xdp_policy[IFLA_XDP_MAX + 1] = {
  1948. [IFLA_XDP_UNSPEC] = { .strict_start_type = IFLA_XDP_EXPECTED_FD },
  1949. [IFLA_XDP_FD] = { .type = NLA_S32 },
  1950. [IFLA_XDP_EXPECTED_FD] = { .type = NLA_S32 },
  1951. [IFLA_XDP_ATTACHED] = { .type = NLA_U8 },
  1952. [IFLA_XDP_FLAGS] = { .type = NLA_U32 },
  1953. [IFLA_XDP_PROG_ID] = { .type = NLA_U32 },
  1954. };
  1955. static struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla,
  1956. int *ops_srcu_index)
  1957. {
  1958. struct nlattr *linfo[IFLA_INFO_MAX + 1];
  1959. struct rtnl_link_ops *ops = NULL;
  1960. if (nla_parse_nested_deprecated(linfo, IFLA_INFO_MAX, nla, ifla_info_policy, NULL) < 0)
  1961. return NULL;
  1962. if (linfo[IFLA_INFO_KIND]) {
  1963. char kind[MODULE_NAME_LEN];
  1964. nla_strscpy(kind, linfo[IFLA_INFO_KIND], sizeof(kind));
  1965. ops = rtnl_link_ops_get(kind, ops_srcu_index);
  1966. }
  1967. return ops;
  1968. }
  1969. static bool link_master_filtered(struct net_device *dev, int master_idx)
  1970. {
  1971. struct net_device *master;
  1972. if (!master_idx)
  1973. return false;
  1974. master = netdev_master_upper_dev_get(dev);
  1975. /* 0 is already used to denote IFLA_MASTER wasn't passed, therefore need
  1976. * another invalid value for ifindex to denote "no master".
  1977. */
  1978. if (master_idx == -1)
  1979. return !!master;
  1980. if (!master || master->ifindex != master_idx)
  1981. return true;
  1982. return false;
  1983. }
  1984. static bool link_kind_filtered(const struct net_device *dev,
  1985. const struct rtnl_link_ops *kind_ops)
  1986. {
  1987. if (kind_ops && dev->rtnl_link_ops != kind_ops)
  1988. return true;
  1989. return false;
  1990. }
  1991. static bool link_dump_filtered(struct net_device *dev,
  1992. int master_idx,
  1993. const struct rtnl_link_ops *kind_ops)
  1994. {
  1995. if (link_master_filtered(dev, master_idx) ||
  1996. link_kind_filtered(dev, kind_ops))
  1997. return true;
  1998. return false;
  1999. }
  2000. /**
  2001. * rtnl_get_net_ns_capable - Get netns if sufficiently privileged.
  2002. * @sk: netlink socket
  2003. * @netnsid: network namespace identifier
  2004. *
  2005. * Returns the network namespace identified by netnsid on success or an error
  2006. * pointer on failure.
  2007. */
  2008. struct net *rtnl_get_net_ns_capable(struct sock *sk, int netnsid)
  2009. {
  2010. struct net *net;
  2011. net = get_net_ns_by_id(sock_net(sk), netnsid);
  2012. if (!net)
  2013. return ERR_PTR(-EINVAL);
  2014. /* For now, the caller is required to have CAP_NET_ADMIN in
  2015. * the user namespace owning the target net ns.
  2016. */
  2017. if (!sk_ns_capable(sk, net->user_ns, CAP_NET_ADMIN)) {
  2018. put_net(net);
  2019. return ERR_PTR(-EACCES);
  2020. }
  2021. return net;
  2022. }
  2023. EXPORT_SYMBOL_GPL(rtnl_get_net_ns_capable);
  2024. static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr *nlh,
  2025. bool strict_check, struct nlattr **tb,
  2026. struct netlink_ext_ack *extack)
  2027. {
  2028. int hdrlen;
  2029. if (strict_check) {
  2030. struct ifinfomsg *ifm;
  2031. ifm = nlmsg_payload(nlh, sizeof(*ifm));
  2032. if (!ifm) {
  2033. NL_SET_ERR_MSG(extack, "Invalid header for link dump");
  2034. return -EINVAL;
  2035. }
  2036. if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
  2037. ifm->ifi_change) {
  2038. NL_SET_ERR_MSG(extack, "Invalid values in header for link dump request");
  2039. return -EINVAL;
  2040. }
  2041. if (ifm->ifi_index) {
  2042. NL_SET_ERR_MSG(extack, "Filter by device index not supported for link dumps");
  2043. return -EINVAL;
  2044. }
  2045. return nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb,
  2046. IFLA_MAX, ifla_policy,
  2047. extack);
  2048. }
  2049. /* A hack to preserve kernel<->userspace interface.
  2050. * The correct header is ifinfomsg. It is consistent with rtnl_getlink.
  2051. * However, before Linux v3.9 the code here assumed rtgenmsg and that's
  2052. * what iproute2 < v3.9.0 used.
  2053. * We can detect the old iproute2. Even including the IFLA_EXT_MASK
  2054. * attribute, its netlink message is shorter than struct ifinfomsg.
  2055. */
  2056. hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
  2057. sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
  2058. return nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy,
  2059. extack);
  2060. }
  2061. static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
  2062. {
  2063. struct netlink_ext_ack *extack = cb->extack;
  2064. struct rtnl_link_ops *kind_ops = NULL;
  2065. const struct nlmsghdr *nlh = cb->nlh;
  2066. struct net *net = sock_net(skb->sk);
  2067. unsigned int flags = NLM_F_MULTI;
  2068. struct nlattr *tb[IFLA_MAX+1];
  2069. struct {
  2070. unsigned long ifindex;
  2071. } *ctx = (void *)cb->ctx;
  2072. struct net *tgt_net = net;
  2073. u32 ext_filter_mask = 0;
  2074. struct net_device *dev;
  2075. int ops_srcu_index;
  2076. int master_idx = 0;
  2077. int netnsid = -1;
  2078. int err, i;
  2079. err = rtnl_valid_dump_ifinfo_req(nlh, cb->strict_check, tb, extack);
  2080. if (err < 0) {
  2081. if (cb->strict_check)
  2082. return err;
  2083. goto walk_entries;
  2084. }
  2085. for (i = 0; i <= IFLA_MAX; ++i) {
  2086. if (!tb[i])
  2087. continue;
  2088. /* new attributes should only be added with strict checking */
  2089. switch (i) {
  2090. case IFLA_TARGET_NETNSID:
  2091. netnsid = nla_get_s32(tb[i]);
  2092. tgt_net = rtnl_get_net_ns_capable(skb->sk, netnsid);
  2093. if (IS_ERR(tgt_net)) {
  2094. NL_SET_ERR_MSG(extack, "Invalid target network namespace id");
  2095. err = PTR_ERR(tgt_net);
  2096. netnsid = -1;
  2097. goto out;
  2098. }
  2099. break;
  2100. case IFLA_EXT_MASK:
  2101. ext_filter_mask = nla_get_u32(tb[i]);
  2102. break;
  2103. case IFLA_MASTER:
  2104. master_idx = nla_get_u32(tb[i]);
  2105. break;
  2106. case IFLA_LINKINFO:
  2107. kind_ops = linkinfo_to_kind_ops(tb[i], &ops_srcu_index);
  2108. break;
  2109. default:
  2110. if (cb->strict_check) {
  2111. NL_SET_ERR_MSG(extack, "Unsupported attribute in link dump request");
  2112. err = -EINVAL;
  2113. goto out;
  2114. }
  2115. }
  2116. }
  2117. if (master_idx || kind_ops)
  2118. flags |= NLM_F_DUMP_FILTERED;
  2119. walk_entries:
  2120. err = 0;
  2121. for_each_netdev_dump(tgt_net, dev, ctx->ifindex) {
  2122. if (link_dump_filtered(dev, master_idx, kind_ops))
  2123. continue;
  2124. err = rtnl_fill_ifinfo(skb, dev, net, RTM_NEWLINK,
  2125. NETLINK_CB(cb->skb).portid,
  2126. nlh->nlmsg_seq, 0, flags,
  2127. ext_filter_mask, 0, NULL, 0,
  2128. netnsid, GFP_KERNEL);
  2129. if (err < 0)
  2130. break;
  2131. }
  2132. cb->seq = tgt_net->dev_base_seq;
  2133. nl_dump_check_consistent(cb, nlmsg_hdr(skb));
  2134. out:
  2135. if (kind_ops)
  2136. rtnl_link_ops_put(kind_ops, ops_srcu_index);
  2137. if (netnsid >= 0)
  2138. put_net(tgt_net);
  2139. return err;
  2140. }
  2141. int rtnl_nla_parse_ifinfomsg(struct nlattr **tb, const struct nlattr *nla_peer,
  2142. struct netlink_ext_ack *exterr)
  2143. {
  2144. const struct ifinfomsg *ifmp;
  2145. const struct nlattr *attrs;
  2146. size_t len;
  2147. ifmp = nla_data(nla_peer);
  2148. attrs = nla_data(nla_peer) + sizeof(struct ifinfomsg);
  2149. len = nla_len(nla_peer) - sizeof(struct ifinfomsg);
  2150. if (ifmp->ifi_index < 0) {
  2151. NL_SET_ERR_MSG_ATTR(exterr, nla_peer,
  2152. "ifindex can't be negative");
  2153. return -EINVAL;
  2154. }
  2155. return nla_parse_deprecated(tb, IFLA_MAX, attrs, len, ifla_policy,
  2156. exterr);
  2157. }
  2158. EXPORT_SYMBOL(rtnl_nla_parse_ifinfomsg);
  2159. static struct net *rtnl_link_get_net_ifla(struct nlattr *tb[])
  2160. {
  2161. struct net *net = NULL;
  2162. /* Examine the link attributes and figure out which
  2163. * network namespace we are talking about.
  2164. */
  2165. if (tb[IFLA_NET_NS_PID])
  2166. net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
  2167. else if (tb[IFLA_NET_NS_FD])
  2168. net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
  2169. return net;
  2170. }
  2171. struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
  2172. {
  2173. struct net *net = rtnl_link_get_net_ifla(tb);
  2174. if (!net)
  2175. net = get_net(src_net);
  2176. return net;
  2177. }
  2178. EXPORT_SYMBOL(rtnl_link_get_net);
  2179. /* Figure out which network namespace we are talking about by
  2180. * examining the link attributes in the following order:
  2181. *
  2182. * 1. IFLA_NET_NS_PID
  2183. * 2. IFLA_NET_NS_FD
  2184. * 3. IFLA_TARGET_NETNSID
  2185. */
  2186. static struct net *rtnl_link_get_net_by_nlattr(struct net *src_net,
  2187. struct nlattr *tb[])
  2188. {
  2189. struct net *net;
  2190. if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD])
  2191. return rtnl_link_get_net(src_net, tb);
  2192. if (!tb[IFLA_TARGET_NETNSID])
  2193. return get_net(src_net);
  2194. net = get_net_ns_by_id(src_net, nla_get_u32(tb[IFLA_TARGET_NETNSID]));
  2195. if (!net)
  2196. return ERR_PTR(-EINVAL);
  2197. return net;
  2198. }
  2199. static struct net *rtnl_link_get_net_capable(const struct sk_buff *skb,
  2200. struct net *src_net,
  2201. struct nlattr *tb[], int cap)
  2202. {
  2203. struct net *net;
  2204. net = rtnl_link_get_net_by_nlattr(src_net, tb);
  2205. if (IS_ERR(net))
  2206. return net;
  2207. if (!netlink_ns_capable(skb, net->user_ns, cap)) {
  2208. put_net(net);
  2209. return ERR_PTR(-EPERM);
  2210. }
  2211. return net;
  2212. }
  2213. /* Verify that rtnetlink requests do not pass additional properties
  2214. * potentially referring to different network namespaces.
  2215. */
  2216. static int rtnl_ensure_unique_netns(struct nlattr *tb[],
  2217. struct netlink_ext_ack *extack,
  2218. bool netns_id_only)
  2219. {
  2220. if (netns_id_only) {
  2221. if (!tb[IFLA_NET_NS_PID] && !tb[IFLA_NET_NS_FD])
  2222. return 0;
  2223. NL_SET_ERR_MSG(extack, "specified netns attribute not supported");
  2224. return -EOPNOTSUPP;
  2225. }
  2226. if (tb[IFLA_TARGET_NETNSID] && (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]))
  2227. goto invalid_attr;
  2228. if (tb[IFLA_NET_NS_PID] && (tb[IFLA_TARGET_NETNSID] || tb[IFLA_NET_NS_FD]))
  2229. goto invalid_attr;
  2230. if (tb[IFLA_NET_NS_FD] && (tb[IFLA_TARGET_NETNSID] || tb[IFLA_NET_NS_PID]))
  2231. goto invalid_attr;
  2232. return 0;
  2233. invalid_attr:
  2234. NL_SET_ERR_MSG(extack, "multiple netns identifying attributes specified");
  2235. return -EINVAL;
  2236. }
  2237. static int rtnl_set_vf_rate(struct net_device *dev, int vf, int min_tx_rate,
  2238. int max_tx_rate)
  2239. {
  2240. const struct net_device_ops *ops = dev->netdev_ops;
  2241. if (!ops->ndo_set_vf_rate)
  2242. return -EOPNOTSUPP;
  2243. if (max_tx_rate && max_tx_rate < min_tx_rate)
  2244. return -EINVAL;
  2245. return ops->ndo_set_vf_rate(dev, vf, min_tx_rate, max_tx_rate);
  2246. }
  2247. static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[],
  2248. struct netlink_ext_ack *extack)
  2249. {
  2250. if (tb[IFLA_ADDRESS] &&
  2251. nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
  2252. return -EINVAL;
  2253. if (tb[IFLA_BROADCAST] &&
  2254. nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
  2255. return -EINVAL;
  2256. if (tb[IFLA_GSO_MAX_SIZE] &&
  2257. nla_get_u32(tb[IFLA_GSO_MAX_SIZE]) > dev->tso_max_size) {
  2258. NL_SET_ERR_MSG(extack, "too big gso_max_size");
  2259. return -EINVAL;
  2260. }
  2261. if (tb[IFLA_GSO_MAX_SEGS] &&
  2262. (nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > GSO_MAX_SEGS ||
  2263. nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > dev->tso_max_segs)) {
  2264. NL_SET_ERR_MSG(extack, "too big gso_max_segs");
  2265. return -EINVAL;
  2266. }
  2267. if (tb[IFLA_GRO_MAX_SIZE] &&
  2268. nla_get_u32(tb[IFLA_GRO_MAX_SIZE]) > GRO_MAX_SIZE) {
  2269. NL_SET_ERR_MSG(extack, "too big gro_max_size");
  2270. return -EINVAL;
  2271. }
  2272. if (tb[IFLA_GSO_IPV4_MAX_SIZE] &&
  2273. nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]) > dev->tso_max_size) {
  2274. NL_SET_ERR_MSG(extack, "too big gso_ipv4_max_size");
  2275. return -EINVAL;
  2276. }
  2277. if (tb[IFLA_GRO_IPV4_MAX_SIZE] &&
  2278. nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]) > GRO_MAX_SIZE) {
  2279. NL_SET_ERR_MSG(extack, "too big gro_ipv4_max_size");
  2280. return -EINVAL;
  2281. }
  2282. if (tb[IFLA_AF_SPEC]) {
  2283. struct nlattr *af;
  2284. int rem, err;
  2285. nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
  2286. struct rtnl_af_ops *af_ops;
  2287. int af_ops_srcu_index;
  2288. af_ops = rtnl_af_lookup(nla_type(af), &af_ops_srcu_index);
  2289. if (!af_ops)
  2290. return -EAFNOSUPPORT;
  2291. if (!af_ops->set_link_af)
  2292. err = -EOPNOTSUPP;
  2293. else if (af_ops->validate_link_af)
  2294. err = af_ops->validate_link_af(dev, af, extack);
  2295. else
  2296. err = 0;
  2297. rtnl_af_put(af_ops, af_ops_srcu_index);
  2298. if (err < 0)
  2299. return err;
  2300. }
  2301. }
  2302. return 0;
  2303. }
  2304. static int handle_infiniband_guid(struct net_device *dev, struct ifla_vf_guid *ivt,
  2305. int guid_type)
  2306. {
  2307. const struct net_device_ops *ops = dev->netdev_ops;
  2308. return ops->ndo_set_vf_guid(dev, ivt->vf, ivt->guid, guid_type);
  2309. }
  2310. static int handle_vf_guid(struct net_device *dev, struct ifla_vf_guid *ivt, int guid_type)
  2311. {
  2312. if (dev->type != ARPHRD_INFINIBAND)
  2313. return -EOPNOTSUPP;
  2314. return handle_infiniband_guid(dev, ivt, guid_type);
  2315. }
  2316. static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
  2317. {
  2318. const struct net_device_ops *ops = dev->netdev_ops;
  2319. int err = -EINVAL;
  2320. if (tb[IFLA_VF_MAC]) {
  2321. struct ifla_vf_mac *ivm = nla_data(tb[IFLA_VF_MAC]);
  2322. if (ivm->vf >= INT_MAX)
  2323. return -EINVAL;
  2324. err = -EOPNOTSUPP;
  2325. if (ops->ndo_set_vf_mac)
  2326. err = ops->ndo_set_vf_mac(dev, ivm->vf,
  2327. ivm->mac);
  2328. if (err < 0)
  2329. return err;
  2330. }
  2331. if (tb[IFLA_VF_VLAN]) {
  2332. struct ifla_vf_vlan *ivv = nla_data(tb[IFLA_VF_VLAN]);
  2333. if (ivv->vf >= INT_MAX)
  2334. return -EINVAL;
  2335. err = -EOPNOTSUPP;
  2336. if (ops->ndo_set_vf_vlan)
  2337. err = ops->ndo_set_vf_vlan(dev, ivv->vf, ivv->vlan,
  2338. ivv->qos,
  2339. htons(ETH_P_8021Q));
  2340. if (err < 0)
  2341. return err;
  2342. }
  2343. if (tb[IFLA_VF_VLAN_LIST]) {
  2344. struct ifla_vf_vlan_info *ivvl[MAX_VLAN_LIST_LEN];
  2345. struct nlattr *attr;
  2346. int rem, len = 0;
  2347. err = -EOPNOTSUPP;
  2348. if (!ops->ndo_set_vf_vlan)
  2349. return err;
  2350. nla_for_each_nested(attr, tb[IFLA_VF_VLAN_LIST], rem) {
  2351. if (nla_type(attr) != IFLA_VF_VLAN_INFO ||
  2352. nla_len(attr) < sizeof(struct ifla_vf_vlan_info)) {
  2353. return -EINVAL;
  2354. }
  2355. if (len >= MAX_VLAN_LIST_LEN)
  2356. return -EOPNOTSUPP;
  2357. ivvl[len] = nla_data(attr);
  2358. len++;
  2359. }
  2360. if (len == 0)
  2361. return -EINVAL;
  2362. if (ivvl[0]->vf >= INT_MAX)
  2363. return -EINVAL;
  2364. err = ops->ndo_set_vf_vlan(dev, ivvl[0]->vf, ivvl[0]->vlan,
  2365. ivvl[0]->qos, ivvl[0]->vlan_proto);
  2366. if (err < 0)
  2367. return err;
  2368. }
  2369. if (tb[IFLA_VF_TX_RATE]) {
  2370. struct ifla_vf_tx_rate *ivt = nla_data(tb[IFLA_VF_TX_RATE]);
  2371. struct ifla_vf_info ivf;
  2372. if (ivt->vf >= INT_MAX)
  2373. return -EINVAL;
  2374. err = -EOPNOTSUPP;
  2375. if (ops->ndo_get_vf_config)
  2376. err = ops->ndo_get_vf_config(dev, ivt->vf, &ivf);
  2377. if (err < 0)
  2378. return err;
  2379. err = rtnl_set_vf_rate(dev, ivt->vf,
  2380. ivf.min_tx_rate, ivt->rate);
  2381. if (err < 0)
  2382. return err;
  2383. }
  2384. if (tb[IFLA_VF_RATE]) {
  2385. struct ifla_vf_rate *ivt = nla_data(tb[IFLA_VF_RATE]);
  2386. if (ivt->vf >= INT_MAX)
  2387. return -EINVAL;
  2388. err = rtnl_set_vf_rate(dev, ivt->vf,
  2389. ivt->min_tx_rate, ivt->max_tx_rate);
  2390. if (err < 0)
  2391. return err;
  2392. }
  2393. if (tb[IFLA_VF_SPOOFCHK]) {
  2394. struct ifla_vf_spoofchk *ivs = nla_data(tb[IFLA_VF_SPOOFCHK]);
  2395. if (ivs->vf >= INT_MAX)
  2396. return -EINVAL;
  2397. err = -EOPNOTSUPP;
  2398. if (ops->ndo_set_vf_spoofchk)
  2399. err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
  2400. ivs->setting);
  2401. if (err < 0)
  2402. return err;
  2403. }
  2404. if (tb[IFLA_VF_LINK_STATE]) {
  2405. struct ifla_vf_link_state *ivl = nla_data(tb[IFLA_VF_LINK_STATE]);
  2406. if (ivl->vf >= INT_MAX)
  2407. return -EINVAL;
  2408. err = -EOPNOTSUPP;
  2409. if (ops->ndo_set_vf_link_state)
  2410. err = ops->ndo_set_vf_link_state(dev, ivl->vf,
  2411. ivl->link_state);
  2412. if (err < 0)
  2413. return err;
  2414. }
  2415. if (tb[IFLA_VF_RSS_QUERY_EN]) {
  2416. struct ifla_vf_rss_query_en *ivrssq_en;
  2417. err = -EOPNOTSUPP;
  2418. ivrssq_en = nla_data(tb[IFLA_VF_RSS_QUERY_EN]);
  2419. if (ivrssq_en->vf >= INT_MAX)
  2420. return -EINVAL;
  2421. if (ops->ndo_set_vf_rss_query_en)
  2422. err = ops->ndo_set_vf_rss_query_en(dev, ivrssq_en->vf,
  2423. ivrssq_en->setting);
  2424. if (err < 0)
  2425. return err;
  2426. }
  2427. if (tb[IFLA_VF_TRUST]) {
  2428. struct ifla_vf_trust *ivt = nla_data(tb[IFLA_VF_TRUST]);
  2429. if (ivt->vf >= INT_MAX)
  2430. return -EINVAL;
  2431. err = -EOPNOTSUPP;
  2432. if (ops->ndo_set_vf_trust)
  2433. err = ops->ndo_set_vf_trust(dev, ivt->vf, ivt->setting);
  2434. if (err < 0)
  2435. return err;
  2436. }
  2437. if (tb[IFLA_VF_IB_NODE_GUID]) {
  2438. struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_NODE_GUID]);
  2439. if (ivt->vf >= INT_MAX)
  2440. return -EINVAL;
  2441. if (!ops->ndo_set_vf_guid)
  2442. return -EOPNOTSUPP;
  2443. return handle_vf_guid(dev, ivt, IFLA_VF_IB_NODE_GUID);
  2444. }
  2445. if (tb[IFLA_VF_IB_PORT_GUID]) {
  2446. struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_PORT_GUID]);
  2447. if (ivt->vf >= INT_MAX)
  2448. return -EINVAL;
  2449. if (!ops->ndo_set_vf_guid)
  2450. return -EOPNOTSUPP;
  2451. return handle_vf_guid(dev, ivt, IFLA_VF_IB_PORT_GUID);
  2452. }
  2453. return err;
  2454. }
  2455. static int do_set_master(struct net_device *dev, int ifindex,
  2456. struct netlink_ext_ack *extack)
  2457. {
  2458. struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
  2459. const struct net_device_ops *ops;
  2460. int err;
  2461. /* Release the lower lock, the upper is responsible for locking
  2462. * the lower if needed. None of the existing upper devices
  2463. * use netdev instance lock, so don't grab it.
  2464. */
  2465. if (upper_dev) {
  2466. if (upper_dev->ifindex == ifindex)
  2467. return 0;
  2468. ops = upper_dev->netdev_ops;
  2469. if (ops->ndo_del_slave) {
  2470. netdev_unlock_ops(dev);
  2471. err = ops->ndo_del_slave(upper_dev, dev);
  2472. netdev_lock_ops(dev);
  2473. if (err)
  2474. return err;
  2475. } else {
  2476. return -EOPNOTSUPP;
  2477. }
  2478. }
  2479. if (ifindex) {
  2480. upper_dev = __dev_get_by_index(dev_net(dev), ifindex);
  2481. if (!upper_dev)
  2482. return -EINVAL;
  2483. ops = upper_dev->netdev_ops;
  2484. if (ops->ndo_add_slave) {
  2485. netdev_unlock_ops(dev);
  2486. err = ops->ndo_add_slave(upper_dev, dev, extack);
  2487. netdev_lock_ops(dev);
  2488. if (err)
  2489. return err;
  2490. } else {
  2491. return -EOPNOTSUPP;
  2492. }
  2493. }
  2494. return 0;
  2495. }
  2496. static const struct nla_policy ifla_proto_down_reason_policy[IFLA_PROTO_DOWN_REASON_VALUE + 1] = {
  2497. [IFLA_PROTO_DOWN_REASON_MASK] = { .type = NLA_U32 },
  2498. [IFLA_PROTO_DOWN_REASON_VALUE] = { .type = NLA_U32 },
  2499. };
  2500. static int do_set_proto_down(struct net_device *dev,
  2501. struct nlattr *nl_proto_down,
  2502. struct nlattr *nl_proto_down_reason,
  2503. struct netlink_ext_ack *extack)
  2504. {
  2505. struct nlattr *pdreason[IFLA_PROTO_DOWN_REASON_MAX + 1];
  2506. unsigned long mask = 0;
  2507. u32 value;
  2508. bool proto_down;
  2509. int err;
  2510. if (!dev->change_proto_down) {
  2511. NL_SET_ERR_MSG(extack, "Protodown not supported by device");
  2512. return -EOPNOTSUPP;
  2513. }
  2514. if (nl_proto_down_reason) {
  2515. err = nla_parse_nested_deprecated(pdreason,
  2516. IFLA_PROTO_DOWN_REASON_MAX,
  2517. nl_proto_down_reason,
  2518. ifla_proto_down_reason_policy,
  2519. NULL);
  2520. if (err < 0)
  2521. return err;
  2522. if (!pdreason[IFLA_PROTO_DOWN_REASON_VALUE]) {
  2523. NL_SET_ERR_MSG(extack, "Invalid protodown reason value");
  2524. return -EINVAL;
  2525. }
  2526. value = nla_get_u32(pdreason[IFLA_PROTO_DOWN_REASON_VALUE]);
  2527. if (pdreason[IFLA_PROTO_DOWN_REASON_MASK])
  2528. mask = nla_get_u32(pdreason[IFLA_PROTO_DOWN_REASON_MASK]);
  2529. netdev_change_proto_down_reason_locked(dev, mask, value);
  2530. }
  2531. if (nl_proto_down) {
  2532. proto_down = nla_get_u8(nl_proto_down);
  2533. /* Don't turn off protodown if there are active reasons */
  2534. if (!proto_down && dev->proto_down_reason) {
  2535. NL_SET_ERR_MSG(extack, "Cannot clear protodown, active reasons");
  2536. return -EBUSY;
  2537. }
  2538. err = netif_change_proto_down(dev, proto_down);
  2539. if (err)
  2540. return err;
  2541. }
  2542. return 0;
  2543. }
  2544. #define DO_SETLINK_MODIFIED 0x01
  2545. /* notify flag means notify + modified. */
  2546. #define DO_SETLINK_NOTIFY 0x03
  2547. static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
  2548. struct net *tgt_net, struct ifinfomsg *ifm,
  2549. struct netlink_ext_ack *extack,
  2550. struct nlattr **tb, int status)
  2551. {
  2552. const struct net_device_ops *ops = dev->netdev_ops;
  2553. char ifname[IFNAMSIZ];
  2554. int err;
  2555. err = validate_linkmsg(dev, tb, extack);
  2556. if (err < 0)
  2557. return err;
  2558. if (tb[IFLA_IFNAME])
  2559. nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
  2560. else
  2561. ifname[0] = '\0';
  2562. if (!net_eq(tgt_net, dev_net(dev))) {
  2563. const char *pat = ifname[0] ? ifname : NULL;
  2564. int new_ifindex;
  2565. new_ifindex = nla_get_s32_default(tb[IFLA_NEW_IFINDEX], 0);
  2566. err = __dev_change_net_namespace(dev, tgt_net, pat,
  2567. new_ifindex, extack);
  2568. if (err)
  2569. return err;
  2570. status |= DO_SETLINK_MODIFIED;
  2571. }
  2572. netdev_lock_ops(dev);
  2573. if (tb[IFLA_MAP]) {
  2574. struct rtnl_link_ifmap *u_map;
  2575. struct ifmap k_map;
  2576. if (!ops->ndo_set_config) {
  2577. err = -EOPNOTSUPP;
  2578. goto errout;
  2579. }
  2580. if (!netif_device_present(dev)) {
  2581. err = -ENODEV;
  2582. goto errout;
  2583. }
  2584. u_map = nla_data(tb[IFLA_MAP]);
  2585. k_map.mem_start = (unsigned long) u_map->mem_start;
  2586. k_map.mem_end = (unsigned long) u_map->mem_end;
  2587. k_map.base_addr = (unsigned short) u_map->base_addr;
  2588. k_map.irq = (unsigned char) u_map->irq;
  2589. k_map.dma = (unsigned char) u_map->dma;
  2590. k_map.port = (unsigned char) u_map->port;
  2591. err = ops->ndo_set_config(dev, &k_map);
  2592. if (err < 0)
  2593. goto errout;
  2594. status |= DO_SETLINK_NOTIFY;
  2595. }
  2596. if (tb[IFLA_ADDRESS]) {
  2597. struct sockaddr_storage ss = { };
  2598. netdev_unlock_ops(dev);
  2599. /* dev_addr_sem is an outer lock, enforce proper ordering */
  2600. down_write(&dev_addr_sem);
  2601. netdev_lock_ops(dev);
  2602. ss.ss_family = dev->type;
  2603. memcpy(ss.__data, nla_data(tb[IFLA_ADDRESS]), dev->addr_len);
  2604. err = netif_set_mac_address(dev, &ss, extack);
  2605. if (err) {
  2606. up_write(&dev_addr_sem);
  2607. goto errout;
  2608. }
  2609. status |= DO_SETLINK_MODIFIED;
  2610. up_write(&dev_addr_sem);
  2611. }
  2612. if (tb[IFLA_MTU]) {
  2613. err = netif_set_mtu_ext(dev, nla_get_u32(tb[IFLA_MTU]), extack);
  2614. if (err < 0)
  2615. goto errout;
  2616. status |= DO_SETLINK_MODIFIED;
  2617. }
  2618. if (tb[IFLA_GROUP]) {
  2619. netif_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
  2620. status |= DO_SETLINK_NOTIFY;
  2621. }
  2622. /*
  2623. * Interface selected by interface index but interface
  2624. * name provided implies that a name change has been
  2625. * requested.
  2626. */
  2627. if (ifm->ifi_index > 0 && ifname[0]) {
  2628. err = netif_change_name(dev, ifname);
  2629. if (err < 0)
  2630. goto errout;
  2631. status |= DO_SETLINK_MODIFIED;
  2632. }
  2633. if (tb[IFLA_IFALIAS]) {
  2634. err = netif_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
  2635. nla_len(tb[IFLA_IFALIAS]));
  2636. if (err < 0)
  2637. goto errout;
  2638. status |= DO_SETLINK_NOTIFY;
  2639. }
  2640. if (tb[IFLA_BROADCAST]) {
  2641. nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
  2642. call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
  2643. }
  2644. if (ifm->ifi_flags || ifm->ifi_change) {
  2645. err = netif_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
  2646. extack);
  2647. if (err < 0)
  2648. goto errout;
  2649. }
  2650. if (tb[IFLA_MASTER]) {
  2651. err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
  2652. if (err)
  2653. goto errout;
  2654. status |= DO_SETLINK_MODIFIED;
  2655. }
  2656. if (tb[IFLA_CARRIER]) {
  2657. err = netif_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
  2658. if (err)
  2659. goto errout;
  2660. status |= DO_SETLINK_MODIFIED;
  2661. }
  2662. if (tb[IFLA_TXQLEN]) {
  2663. unsigned int value = nla_get_u32(tb[IFLA_TXQLEN]);
  2664. err = netif_change_tx_queue_len(dev, value);
  2665. if (err)
  2666. goto errout;
  2667. status |= DO_SETLINK_MODIFIED;
  2668. }
  2669. if (tb[IFLA_GSO_MAX_SIZE]) {
  2670. u32 max_size = nla_get_u32(tb[IFLA_GSO_MAX_SIZE]);
  2671. if (dev->gso_max_size ^ max_size) {
  2672. netif_set_gso_max_size(dev, max_size);
  2673. status |= DO_SETLINK_MODIFIED;
  2674. }
  2675. }
  2676. if (tb[IFLA_GSO_MAX_SEGS]) {
  2677. u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]);
  2678. if (dev->gso_max_segs ^ max_segs) {
  2679. netif_set_gso_max_segs(dev, max_segs);
  2680. status |= DO_SETLINK_MODIFIED;
  2681. }
  2682. }
  2683. if (tb[IFLA_GRO_MAX_SIZE]) {
  2684. u32 gro_max_size = nla_get_u32(tb[IFLA_GRO_MAX_SIZE]);
  2685. if (dev->gro_max_size ^ gro_max_size) {
  2686. netif_set_gro_max_size(dev, gro_max_size);
  2687. status |= DO_SETLINK_MODIFIED;
  2688. }
  2689. }
  2690. if (tb[IFLA_GSO_IPV4_MAX_SIZE]) {
  2691. u32 max_size = nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]);
  2692. if (dev->gso_ipv4_max_size ^ max_size) {
  2693. netif_set_gso_ipv4_max_size(dev, max_size);
  2694. status |= DO_SETLINK_MODIFIED;
  2695. }
  2696. }
  2697. if (tb[IFLA_GRO_IPV4_MAX_SIZE]) {
  2698. u32 gro_max_size = nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]);
  2699. if (dev->gro_ipv4_max_size ^ gro_max_size) {
  2700. netif_set_gro_ipv4_max_size(dev, gro_max_size);
  2701. status |= DO_SETLINK_MODIFIED;
  2702. }
  2703. }
  2704. if (tb[IFLA_OPERSTATE])
  2705. set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
  2706. if (tb[IFLA_LINKMODE]) {
  2707. unsigned char value = nla_get_u8(tb[IFLA_LINKMODE]);
  2708. if (dev->link_mode ^ value)
  2709. status |= DO_SETLINK_NOTIFY;
  2710. WRITE_ONCE(dev->link_mode, value);
  2711. }
  2712. if (tb[IFLA_VFINFO_LIST]) {
  2713. struct nlattr *vfinfo[IFLA_VF_MAX + 1];
  2714. struct nlattr *attr;
  2715. int rem;
  2716. nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
  2717. if (nla_type(attr) != IFLA_VF_INFO ||
  2718. nla_len(attr) < NLA_HDRLEN) {
  2719. err = -EINVAL;
  2720. goto errout;
  2721. }
  2722. err = nla_parse_nested_deprecated(vfinfo, IFLA_VF_MAX,
  2723. attr,
  2724. ifla_vf_policy,
  2725. NULL);
  2726. if (err < 0)
  2727. goto errout;
  2728. err = do_setvfinfo(dev, vfinfo);
  2729. if (err < 0)
  2730. goto errout;
  2731. status |= DO_SETLINK_NOTIFY;
  2732. }
  2733. }
  2734. err = 0;
  2735. if (tb[IFLA_VF_PORTS]) {
  2736. struct nlattr *port[IFLA_PORT_MAX+1];
  2737. struct nlattr *attr;
  2738. int vf;
  2739. int rem;
  2740. err = -EOPNOTSUPP;
  2741. if (!ops->ndo_set_vf_port)
  2742. goto errout;
  2743. nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
  2744. if (nla_type(attr) != IFLA_VF_PORT ||
  2745. nla_len(attr) < NLA_HDRLEN) {
  2746. err = -EINVAL;
  2747. goto errout;
  2748. }
  2749. err = nla_parse_nested_deprecated(port, IFLA_PORT_MAX,
  2750. attr,
  2751. ifla_port_policy,
  2752. NULL);
  2753. if (err < 0)
  2754. goto errout;
  2755. if (!port[IFLA_PORT_VF]) {
  2756. err = -EOPNOTSUPP;
  2757. goto errout;
  2758. }
  2759. vf = nla_get_u32(port[IFLA_PORT_VF]);
  2760. err = ops->ndo_set_vf_port(dev, vf, port);
  2761. if (err < 0)
  2762. goto errout;
  2763. status |= DO_SETLINK_NOTIFY;
  2764. }
  2765. }
  2766. err = 0;
  2767. if (tb[IFLA_PORT_SELF]) {
  2768. struct nlattr *port[IFLA_PORT_MAX+1];
  2769. err = nla_parse_nested_deprecated(port, IFLA_PORT_MAX,
  2770. tb[IFLA_PORT_SELF],
  2771. ifla_port_policy, NULL);
  2772. if (err < 0)
  2773. goto errout;
  2774. err = -EOPNOTSUPP;
  2775. if (ops->ndo_set_vf_port)
  2776. err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
  2777. if (err < 0)
  2778. goto errout;
  2779. status |= DO_SETLINK_NOTIFY;
  2780. }
  2781. if (tb[IFLA_AF_SPEC]) {
  2782. struct nlattr *af;
  2783. int rem;
  2784. nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
  2785. struct rtnl_af_ops *af_ops;
  2786. int af_ops_srcu_index;
  2787. af_ops = rtnl_af_lookup(nla_type(af), &af_ops_srcu_index);
  2788. if (!af_ops) {
  2789. err = -EAFNOSUPPORT;
  2790. goto errout;
  2791. }
  2792. err = af_ops->set_link_af(dev, af, extack);
  2793. rtnl_af_put(af_ops, af_ops_srcu_index);
  2794. if (err < 0)
  2795. goto errout;
  2796. status |= DO_SETLINK_NOTIFY;
  2797. }
  2798. }
  2799. err = 0;
  2800. if (tb[IFLA_PROTO_DOWN] || tb[IFLA_PROTO_DOWN_REASON]) {
  2801. err = do_set_proto_down(dev, tb[IFLA_PROTO_DOWN],
  2802. tb[IFLA_PROTO_DOWN_REASON], extack);
  2803. if (err)
  2804. goto errout;
  2805. status |= DO_SETLINK_NOTIFY;
  2806. }
  2807. if (tb[IFLA_XDP]) {
  2808. struct nlattr *xdp[IFLA_XDP_MAX + 1];
  2809. u32 xdp_flags = 0;
  2810. err = nla_parse_nested_deprecated(xdp, IFLA_XDP_MAX,
  2811. tb[IFLA_XDP],
  2812. ifla_xdp_policy, NULL);
  2813. if (err < 0)
  2814. goto errout;
  2815. if (xdp[IFLA_XDP_ATTACHED] || xdp[IFLA_XDP_PROG_ID]) {
  2816. err = -EINVAL;
  2817. goto errout;
  2818. }
  2819. if (xdp[IFLA_XDP_FLAGS]) {
  2820. xdp_flags = nla_get_u32(xdp[IFLA_XDP_FLAGS]);
  2821. if (xdp_flags & ~XDP_FLAGS_MASK) {
  2822. err = -EINVAL;
  2823. goto errout;
  2824. }
  2825. if (hweight32(xdp_flags & XDP_FLAGS_MODES) > 1) {
  2826. err = -EINVAL;
  2827. goto errout;
  2828. }
  2829. }
  2830. if (xdp[IFLA_XDP_FD]) {
  2831. int expected_fd = -1;
  2832. if (xdp_flags & XDP_FLAGS_REPLACE) {
  2833. if (!xdp[IFLA_XDP_EXPECTED_FD]) {
  2834. err = -EINVAL;
  2835. goto errout;
  2836. }
  2837. expected_fd =
  2838. nla_get_s32(xdp[IFLA_XDP_EXPECTED_FD]);
  2839. }
  2840. err = dev_change_xdp_fd(dev, extack,
  2841. nla_get_s32(xdp[IFLA_XDP_FD]),
  2842. expected_fd,
  2843. xdp_flags);
  2844. if (err)
  2845. goto errout;
  2846. status |= DO_SETLINK_NOTIFY;
  2847. }
  2848. }
  2849. errout:
  2850. if (status & DO_SETLINK_MODIFIED) {
  2851. if ((status & DO_SETLINK_NOTIFY) == DO_SETLINK_NOTIFY)
  2852. netif_state_change(dev);
  2853. if (err < 0)
  2854. net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
  2855. dev->name);
  2856. }
  2857. netdev_unlock_ops(dev);
  2858. return err;
  2859. }
  2860. static struct net_device *rtnl_dev_get(struct net *net,
  2861. struct nlattr *tb[])
  2862. {
  2863. char ifname[ALTIFNAMSIZ];
  2864. if (tb[IFLA_IFNAME])
  2865. nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
  2866. else if (tb[IFLA_ALT_IFNAME])
  2867. nla_strscpy(ifname, tb[IFLA_ALT_IFNAME], ALTIFNAMSIZ);
  2868. else
  2869. return NULL;
  2870. return __dev_get_by_name(net, ifname);
  2871. }
  2872. static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  2873. struct netlink_ext_ack *extack)
  2874. {
  2875. struct ifinfomsg *ifm = nlmsg_data(nlh);
  2876. struct net *net = sock_net(skb->sk);
  2877. struct nlattr *tb[IFLA_MAX+1];
  2878. struct net_device *dev = NULL;
  2879. struct rtnl_nets rtnl_nets;
  2880. struct net *tgt_net;
  2881. int err;
  2882. err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
  2883. ifla_policy, extack);
  2884. if (err < 0)
  2885. goto errout;
  2886. err = rtnl_ensure_unique_netns(tb, extack, false);
  2887. if (err < 0)
  2888. goto errout;
  2889. tgt_net = rtnl_link_get_net_capable(skb, net, tb, CAP_NET_ADMIN);
  2890. if (IS_ERR(tgt_net)) {
  2891. err = PTR_ERR(tgt_net);
  2892. goto errout;
  2893. }
  2894. rtnl_nets_init(&rtnl_nets);
  2895. rtnl_nets_add(&rtnl_nets, get_net(net));
  2896. rtnl_nets_add(&rtnl_nets, tgt_net);
  2897. rtnl_nets_lock(&rtnl_nets);
  2898. if (ifm->ifi_index > 0)
  2899. dev = __dev_get_by_index(net, ifm->ifi_index);
  2900. else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
  2901. dev = rtnl_dev_get(net, tb);
  2902. else
  2903. err = -EINVAL;
  2904. if (dev)
  2905. err = do_setlink(skb, dev, tgt_net, ifm, extack, tb, 0);
  2906. else if (!err)
  2907. err = -ENODEV;
  2908. rtnl_nets_unlock(&rtnl_nets);
  2909. rtnl_nets_destroy(&rtnl_nets);
  2910. errout:
  2911. return err;
  2912. }
  2913. static int rtnl_group_dellink(const struct net *net, int group)
  2914. {
  2915. struct net_device *dev, *aux;
  2916. LIST_HEAD(list_kill);
  2917. bool found = false;
  2918. if (!group)
  2919. return -EPERM;
  2920. for_each_netdev(net, dev) {
  2921. if (dev->group == group) {
  2922. const struct rtnl_link_ops *ops;
  2923. found = true;
  2924. ops = dev->rtnl_link_ops;
  2925. if (!ops || !ops->dellink)
  2926. return -EOPNOTSUPP;
  2927. }
  2928. }
  2929. if (!found)
  2930. return -ENODEV;
  2931. for_each_netdev_safe(net, dev, aux) {
  2932. if (dev->group == group) {
  2933. const struct rtnl_link_ops *ops;
  2934. ops = dev->rtnl_link_ops;
  2935. ops->dellink(dev, &list_kill);
  2936. }
  2937. }
  2938. unregister_netdevice_many(&list_kill);
  2939. return 0;
  2940. }
  2941. int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *nlh)
  2942. {
  2943. const struct rtnl_link_ops *ops;
  2944. LIST_HEAD(list_kill);
  2945. ops = dev->rtnl_link_ops;
  2946. if (!ops || !ops->dellink)
  2947. return -EOPNOTSUPP;
  2948. ops->dellink(dev, &list_kill);
  2949. unregister_netdevice_many_notify(&list_kill, portid, nlh);
  2950. return 0;
  2951. }
  2952. EXPORT_SYMBOL_GPL(rtnl_delete_link);
  2953. static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
  2954. struct netlink_ext_ack *extack)
  2955. {
  2956. struct ifinfomsg *ifm = nlmsg_data(nlh);
  2957. struct net *net = sock_net(skb->sk);
  2958. u32 portid = NETLINK_CB(skb).portid;
  2959. struct nlattr *tb[IFLA_MAX+1];
  2960. struct net_device *dev = NULL;
  2961. struct net *tgt_net = net;
  2962. int netnsid = -1;
  2963. int err;
  2964. err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
  2965. ifla_policy, extack);
  2966. if (err < 0)
  2967. return err;
  2968. err = rtnl_ensure_unique_netns(tb, extack, true);
  2969. if (err < 0)
  2970. return err;
  2971. if (tb[IFLA_TARGET_NETNSID]) {
  2972. netnsid = nla_get_s32(tb[IFLA_TARGET_NETNSID]);
  2973. tgt_net = rtnl_get_net_ns_capable(NETLINK_CB(skb).sk, netnsid);
  2974. if (IS_ERR(tgt_net))
  2975. return PTR_ERR(tgt_net);
  2976. }
  2977. rtnl_net_lock(tgt_net);
  2978. if (ifm->ifi_index > 0)
  2979. dev = __dev_get_by_index(tgt_net, ifm->ifi_index);
  2980. else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
  2981. dev = rtnl_dev_get(tgt_net, tb);
  2982. if (dev)
  2983. err = rtnl_delete_link(dev, portid, nlh);
  2984. else if (ifm->ifi_index > 0 || tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
  2985. err = -ENODEV;
  2986. else if (tb[IFLA_GROUP])
  2987. err = rtnl_group_dellink(tgt_net, nla_get_u32(tb[IFLA_GROUP]));
  2988. else
  2989. err = -EINVAL;
  2990. rtnl_net_unlock(tgt_net);
  2991. if (netnsid >= 0)
  2992. put_net(tgt_net);
  2993. return err;
  2994. }
  2995. int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm,
  2996. u32 portid, const struct nlmsghdr *nlh)
  2997. {
  2998. unsigned int old_flags, changed;
  2999. int err;
  3000. old_flags = dev->flags;
  3001. if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
  3002. err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
  3003. NULL);
  3004. if (err < 0)
  3005. return err;
  3006. }
  3007. changed = old_flags ^ dev->flags;
  3008. if (dev->rtnl_link_initializing) {
  3009. dev->rtnl_link_initializing = false;
  3010. changed = ~0U;
  3011. }
  3012. __dev_notify_flags(dev, old_flags, changed, portid, nlh);
  3013. return 0;
  3014. }
  3015. EXPORT_SYMBOL(rtnl_configure_link);
  3016. struct net_device *rtnl_create_link(struct net *net, const char *ifname,
  3017. unsigned char name_assign_type,
  3018. const struct rtnl_link_ops *ops,
  3019. struct nlattr *tb[],
  3020. struct netlink_ext_ack *extack)
  3021. {
  3022. struct net_device *dev;
  3023. unsigned int num_tx_queues = 1;
  3024. unsigned int num_rx_queues = 1;
  3025. int err;
  3026. if (tb[IFLA_NUM_TX_QUEUES])
  3027. num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
  3028. else if (ops->get_num_tx_queues)
  3029. num_tx_queues = ops->get_num_tx_queues();
  3030. if (tb[IFLA_NUM_RX_QUEUES])
  3031. num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]);
  3032. else if (ops->get_num_rx_queues)
  3033. num_rx_queues = ops->get_num_rx_queues();
  3034. if (num_tx_queues < 1 || num_tx_queues > 4096) {
  3035. NL_SET_ERR_MSG(extack, "Invalid number of transmit queues");
  3036. return ERR_PTR(-EINVAL);
  3037. }
  3038. if (num_rx_queues < 1 || num_rx_queues > 4096) {
  3039. NL_SET_ERR_MSG(extack, "Invalid number of receive queues");
  3040. return ERR_PTR(-EINVAL);
  3041. }
  3042. if (ops->alloc) {
  3043. dev = ops->alloc(tb, ifname, name_assign_type,
  3044. num_tx_queues, num_rx_queues);
  3045. if (IS_ERR(dev))
  3046. return dev;
  3047. } else {
  3048. dev = alloc_netdev_mqs(ops->priv_size, ifname,
  3049. name_assign_type, ops->setup,
  3050. num_tx_queues, num_rx_queues);
  3051. }
  3052. if (!dev)
  3053. return ERR_PTR(-ENOMEM);
  3054. err = validate_linkmsg(dev, tb, extack);
  3055. if (err < 0) {
  3056. free_netdev(dev);
  3057. return ERR_PTR(err);
  3058. }
  3059. dev_net_set(dev, net);
  3060. dev->rtnl_link_ops = ops;
  3061. dev->rtnl_link_initializing = true;
  3062. if (tb[IFLA_MTU]) {
  3063. u32 mtu = nla_get_u32(tb[IFLA_MTU]);
  3064. err = dev_validate_mtu(dev, mtu, extack);
  3065. if (err) {
  3066. free_netdev(dev);
  3067. return ERR_PTR(err);
  3068. }
  3069. dev->mtu = mtu;
  3070. }
  3071. if (tb[IFLA_ADDRESS]) {
  3072. __dev_addr_set(dev, nla_data(tb[IFLA_ADDRESS]),
  3073. nla_len(tb[IFLA_ADDRESS]));
  3074. dev->addr_assign_type = NET_ADDR_SET;
  3075. }
  3076. if (tb[IFLA_BROADCAST])
  3077. memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
  3078. nla_len(tb[IFLA_BROADCAST]));
  3079. if (tb[IFLA_TXQLEN])
  3080. dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
  3081. if (tb[IFLA_OPERSTATE])
  3082. set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
  3083. if (tb[IFLA_LINKMODE])
  3084. dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
  3085. if (tb[IFLA_GROUP])
  3086. netif_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
  3087. if (tb[IFLA_GSO_MAX_SIZE])
  3088. netif_set_gso_max_size(dev, nla_get_u32(tb[IFLA_GSO_MAX_SIZE]));
  3089. if (tb[IFLA_GSO_MAX_SEGS])
  3090. netif_set_gso_max_segs(dev, nla_get_u32(tb[IFLA_GSO_MAX_SEGS]));
  3091. if (tb[IFLA_GRO_MAX_SIZE])
  3092. netif_set_gro_max_size(dev, nla_get_u32(tb[IFLA_GRO_MAX_SIZE]));
  3093. if (tb[IFLA_GSO_IPV4_MAX_SIZE])
  3094. netif_set_gso_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]));
  3095. if (tb[IFLA_GRO_IPV4_MAX_SIZE])
  3096. netif_set_gro_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]));
  3097. return dev;
  3098. }
  3099. EXPORT_SYMBOL(rtnl_create_link);
  3100. struct rtnl_newlink_tbs {
  3101. struct nlattr *tb[IFLA_MAX + 1];
  3102. struct nlattr *linkinfo[IFLA_INFO_MAX + 1];
  3103. struct nlattr *attr[RTNL_MAX_TYPE + 1];
  3104. struct nlattr *slave_attr[RTNL_SLAVE_MAX_TYPE + 1];
  3105. };
  3106. static int rtnl_changelink(const struct sk_buff *skb, struct nlmsghdr *nlh,
  3107. const struct rtnl_link_ops *ops,
  3108. struct net_device *dev, struct net *tgt_net,
  3109. struct rtnl_newlink_tbs *tbs,
  3110. struct nlattr **data,
  3111. struct netlink_ext_ack *extack)
  3112. {
  3113. struct nlattr ** const linkinfo = tbs->linkinfo;
  3114. struct nlattr ** const tb = tbs->tb;
  3115. int status = 0;
  3116. int err;
  3117. if (nlh->nlmsg_flags & NLM_F_EXCL)
  3118. return -EEXIST;
  3119. if (nlh->nlmsg_flags & NLM_F_REPLACE)
  3120. return -EOPNOTSUPP;
  3121. if (linkinfo[IFLA_INFO_DATA]) {
  3122. if (!ops || ops != dev->rtnl_link_ops || !ops->changelink)
  3123. return -EOPNOTSUPP;
  3124. err = ops->changelink(dev, tb, data, extack);
  3125. if (err < 0)
  3126. return err;
  3127. status |= DO_SETLINK_NOTIFY;
  3128. }
  3129. if (linkinfo[IFLA_INFO_SLAVE_DATA]) {
  3130. const struct rtnl_link_ops *m_ops = NULL;
  3131. struct nlattr **slave_data = NULL;
  3132. struct net_device *master_dev;
  3133. master_dev = netdev_master_upper_dev_get(dev);
  3134. if (master_dev)
  3135. m_ops = master_dev->rtnl_link_ops;
  3136. if (!m_ops || !m_ops->slave_changelink)
  3137. return -EOPNOTSUPP;
  3138. if (m_ops->slave_maxtype > RTNL_SLAVE_MAX_TYPE)
  3139. return -EINVAL;
  3140. if (m_ops->slave_maxtype) {
  3141. err = nla_parse_nested_deprecated(tbs->slave_attr,
  3142. m_ops->slave_maxtype,
  3143. linkinfo[IFLA_INFO_SLAVE_DATA],
  3144. m_ops->slave_policy, extack);
  3145. if (err < 0)
  3146. return err;
  3147. slave_data = tbs->slave_attr;
  3148. }
  3149. err = m_ops->slave_changelink(master_dev, dev, tb, slave_data, extack);
  3150. if (err < 0)
  3151. return err;
  3152. status |= DO_SETLINK_NOTIFY;
  3153. }
  3154. return do_setlink(skb, dev, tgt_net, nlmsg_data(nlh), extack, tb, status);
  3155. }
  3156. static int rtnl_group_changelink(const struct sk_buff *skb,
  3157. struct net *net, struct net *tgt_net,
  3158. int group, struct ifinfomsg *ifm,
  3159. struct netlink_ext_ack *extack,
  3160. struct nlattr **tb)
  3161. {
  3162. struct net_device *dev, *aux;
  3163. int err;
  3164. for_each_netdev_safe(net, dev, aux) {
  3165. if (dev->group == group) {
  3166. err = do_setlink(skb, dev, tgt_net, ifm, extack, tb, 0);
  3167. if (err < 0)
  3168. return err;
  3169. }
  3170. }
  3171. return 0;
  3172. }
  3173. static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
  3174. const struct rtnl_link_ops *ops,
  3175. struct net *tgt_net, struct net *link_net,
  3176. struct net *peer_net,
  3177. const struct nlmsghdr *nlh,
  3178. struct nlattr **tb, struct nlattr **data,
  3179. struct netlink_ext_ack *extack)
  3180. {
  3181. unsigned char name_assign_type = NET_NAME_USER;
  3182. struct rtnl_newlink_params params = {
  3183. .src_net = sock_net(skb->sk),
  3184. .link_net = link_net,
  3185. .peer_net = peer_net,
  3186. .tb = tb,
  3187. .data = data,
  3188. };
  3189. u32 portid = NETLINK_CB(skb).portid;
  3190. struct net_device *dev;
  3191. char ifname[IFNAMSIZ];
  3192. int err;
  3193. if (!ops->alloc && !ops->setup)
  3194. return -EOPNOTSUPP;
  3195. if (tb[IFLA_IFNAME]) {
  3196. nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
  3197. } else {
  3198. snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
  3199. name_assign_type = NET_NAME_ENUM;
  3200. }
  3201. dev = rtnl_create_link(tgt_net, ifname, name_assign_type, ops, tb,
  3202. extack);
  3203. if (IS_ERR(dev)) {
  3204. err = PTR_ERR(dev);
  3205. goto out;
  3206. }
  3207. dev->ifindex = ifm->ifi_index;
  3208. if (ops->newlink)
  3209. err = ops->newlink(dev, &params, extack);
  3210. else
  3211. err = register_netdevice(dev);
  3212. if (err < 0) {
  3213. free_netdev(dev);
  3214. goto out;
  3215. }
  3216. netdev_lock_ops(dev);
  3217. err = rtnl_configure_link(dev, ifm, portid, nlh);
  3218. if (err < 0)
  3219. goto out_unregister;
  3220. if (tb[IFLA_MASTER]) {
  3221. err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
  3222. if (err)
  3223. goto out_unregister;
  3224. }
  3225. netdev_unlock_ops(dev);
  3226. out:
  3227. return err;
  3228. out_unregister:
  3229. netdev_unlock_ops(dev);
  3230. if (ops->newlink) {
  3231. LIST_HEAD(list_kill);
  3232. ops->dellink(dev, &list_kill);
  3233. unregister_netdevice_many(&list_kill);
  3234. } else {
  3235. unregister_netdevice(dev);
  3236. }
  3237. goto out;
  3238. }
  3239. static struct net *rtnl_get_peer_net(struct sk_buff *skb,
  3240. const struct rtnl_link_ops *ops,
  3241. struct nlattr *tbp[],
  3242. struct nlattr *data[],
  3243. struct netlink_ext_ack *extack)
  3244. {
  3245. struct nlattr *tb[IFLA_MAX + 1], **attrs;
  3246. struct net *net;
  3247. int err;
  3248. if (!data || !data[ops->peer_type]) {
  3249. attrs = tbp;
  3250. } else {
  3251. err = rtnl_nla_parse_ifinfomsg(tb, data[ops->peer_type], extack);
  3252. if (err < 0)
  3253. return ERR_PTR(err);
  3254. if (ops->validate) {
  3255. err = ops->validate(tb, NULL, extack);
  3256. if (err < 0)
  3257. return ERR_PTR(err);
  3258. }
  3259. attrs = tb;
  3260. }
  3261. net = rtnl_link_get_net_ifla(attrs);
  3262. if (IS_ERR_OR_NULL(net))
  3263. return net;
  3264. if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
  3265. put_net(net);
  3266. return ERR_PTR(-EPERM);
  3267. }
  3268. return net;
  3269. }
  3270. static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  3271. const struct rtnl_link_ops *ops,
  3272. struct net *tgt_net, struct net *link_net,
  3273. struct net *peer_net,
  3274. struct rtnl_newlink_tbs *tbs,
  3275. struct nlattr **data,
  3276. struct netlink_ext_ack *extack)
  3277. {
  3278. struct nlattr ** const tb = tbs->tb;
  3279. struct net *net = sock_net(skb->sk);
  3280. struct net *device_net;
  3281. struct net_device *dev;
  3282. struct ifinfomsg *ifm;
  3283. bool link_specified;
  3284. /* When creating, lookup for existing device in target net namespace */
  3285. device_net = (nlh->nlmsg_flags & NLM_F_CREATE) &&
  3286. (nlh->nlmsg_flags & NLM_F_EXCL) ?
  3287. tgt_net : net;
  3288. ifm = nlmsg_data(nlh);
  3289. if (ifm->ifi_index > 0) {
  3290. link_specified = true;
  3291. dev = __dev_get_by_index(device_net, ifm->ifi_index);
  3292. } else if (ifm->ifi_index < 0) {
  3293. NL_SET_ERR_MSG(extack, "ifindex can't be negative");
  3294. return -EINVAL;
  3295. } else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME]) {
  3296. link_specified = true;
  3297. dev = rtnl_dev_get(device_net, tb);
  3298. } else {
  3299. link_specified = false;
  3300. dev = NULL;
  3301. }
  3302. if (dev)
  3303. return rtnl_changelink(skb, nlh, ops, dev, tgt_net, tbs, data, extack);
  3304. if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
  3305. /* No dev found and NLM_F_CREATE not set. Requested dev does not exist,
  3306. * or it's for a group
  3307. */
  3308. if (link_specified || !tb[IFLA_GROUP])
  3309. return -ENODEV;
  3310. return rtnl_group_changelink(skb, net, tgt_net,
  3311. nla_get_u32(tb[IFLA_GROUP]),
  3312. ifm, extack, tb);
  3313. }
  3314. if (tb[IFLA_MAP] || tb[IFLA_PROTINFO])
  3315. return -EOPNOTSUPP;
  3316. if (!ops) {
  3317. NL_SET_ERR_MSG(extack, "Unknown device type");
  3318. return -EOPNOTSUPP;
  3319. }
  3320. return rtnl_newlink_create(skb, ifm, ops, tgt_net, link_net, peer_net, nlh,
  3321. tb, data, extack);
  3322. }
  3323. static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  3324. struct netlink_ext_ack *extack)
  3325. {
  3326. struct net *tgt_net, *link_net = NULL, *peer_net = NULL;
  3327. struct nlattr **tb, **linkinfo, **data = NULL;
  3328. struct rtnl_link_ops *ops = NULL;
  3329. struct rtnl_newlink_tbs *tbs;
  3330. struct rtnl_nets rtnl_nets;
  3331. int ops_srcu_index;
  3332. int ret;
  3333. tbs = kmalloc_obj(*tbs);
  3334. if (!tbs)
  3335. return -ENOMEM;
  3336. tb = tbs->tb;
  3337. ret = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), tb,
  3338. IFLA_MAX, ifla_policy, extack);
  3339. if (ret < 0)
  3340. goto free;
  3341. ret = rtnl_ensure_unique_netns(tb, extack, false);
  3342. if (ret < 0)
  3343. goto free;
  3344. linkinfo = tbs->linkinfo;
  3345. if (tb[IFLA_LINKINFO]) {
  3346. ret = nla_parse_nested_deprecated(linkinfo, IFLA_INFO_MAX,
  3347. tb[IFLA_LINKINFO],
  3348. ifla_info_policy, NULL);
  3349. if (ret < 0)
  3350. goto free;
  3351. } else {
  3352. memset(linkinfo, 0, sizeof(tbs->linkinfo));
  3353. }
  3354. if (linkinfo[IFLA_INFO_KIND]) {
  3355. char kind[MODULE_NAME_LEN];
  3356. nla_strscpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
  3357. ops = rtnl_link_ops_get(kind, &ops_srcu_index);
  3358. #ifdef CONFIG_MODULES
  3359. if (!ops) {
  3360. request_module("rtnl-link-%s", kind);
  3361. ops = rtnl_link_ops_get(kind, &ops_srcu_index);
  3362. }
  3363. #endif
  3364. }
  3365. rtnl_nets_init(&rtnl_nets);
  3366. if (ops) {
  3367. if (ops->maxtype > RTNL_MAX_TYPE) {
  3368. ret = -EINVAL;
  3369. goto put_ops;
  3370. }
  3371. if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
  3372. ret = nla_parse_nested_deprecated(tbs->attr, ops->maxtype,
  3373. linkinfo[IFLA_INFO_DATA],
  3374. ops->policy, extack);
  3375. if (ret < 0)
  3376. goto put_ops;
  3377. data = tbs->attr;
  3378. }
  3379. if (ops->validate) {
  3380. ret = ops->validate(tb, data, extack);
  3381. if (ret < 0)
  3382. goto put_ops;
  3383. }
  3384. if (ops->peer_type) {
  3385. peer_net = rtnl_get_peer_net(skb, ops, tb, data, extack);
  3386. if (IS_ERR(peer_net)) {
  3387. ret = PTR_ERR(peer_net);
  3388. goto put_ops;
  3389. }
  3390. if (peer_net)
  3391. rtnl_nets_add(&rtnl_nets, peer_net);
  3392. }
  3393. }
  3394. tgt_net = rtnl_link_get_net_capable(skb, sock_net(skb->sk), tb, CAP_NET_ADMIN);
  3395. if (IS_ERR(tgt_net)) {
  3396. ret = PTR_ERR(tgt_net);
  3397. goto put_net;
  3398. }
  3399. rtnl_nets_add(&rtnl_nets, tgt_net);
  3400. if (tb[IFLA_LINK_NETNSID]) {
  3401. int id = nla_get_s32(tb[IFLA_LINK_NETNSID]);
  3402. link_net = get_net_ns_by_id(tgt_net, id);
  3403. if (!link_net) {
  3404. NL_SET_ERR_MSG(extack, "Unknown network namespace id");
  3405. ret = -EINVAL;
  3406. goto put_net;
  3407. }
  3408. rtnl_nets_add(&rtnl_nets, link_net);
  3409. if (!netlink_ns_capable(skb, link_net->user_ns, CAP_NET_ADMIN)) {
  3410. ret = -EPERM;
  3411. goto put_net;
  3412. }
  3413. }
  3414. rtnl_nets_lock(&rtnl_nets);
  3415. ret = __rtnl_newlink(skb, nlh, ops, tgt_net, link_net, peer_net, tbs, data, extack);
  3416. rtnl_nets_unlock(&rtnl_nets);
  3417. put_net:
  3418. rtnl_nets_destroy(&rtnl_nets);
  3419. put_ops:
  3420. if (ops)
  3421. rtnl_link_ops_put(ops, ops_srcu_index);
  3422. free:
  3423. kfree(tbs);
  3424. return ret;
  3425. }
  3426. static int rtnl_valid_getlink_req(struct sk_buff *skb,
  3427. const struct nlmsghdr *nlh,
  3428. struct nlattr **tb,
  3429. struct netlink_ext_ack *extack)
  3430. {
  3431. struct ifinfomsg *ifm;
  3432. int i, err;
  3433. ifm = nlmsg_payload(nlh, sizeof(*ifm));
  3434. if (!ifm) {
  3435. NL_SET_ERR_MSG(extack, "Invalid header for get link");
  3436. return -EINVAL;
  3437. }
  3438. if (!netlink_strict_get_check(skb))
  3439. return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
  3440. ifla_policy, extack);
  3441. if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
  3442. ifm->ifi_change) {
  3443. NL_SET_ERR_MSG(extack, "Invalid values in header for get link request");
  3444. return -EINVAL;
  3445. }
  3446. err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFLA_MAX,
  3447. ifla_policy, extack);
  3448. if (err)
  3449. return err;
  3450. for (i = 0; i <= IFLA_MAX; i++) {
  3451. if (!tb[i])
  3452. continue;
  3453. switch (i) {
  3454. case IFLA_IFNAME:
  3455. case IFLA_ALT_IFNAME:
  3456. case IFLA_EXT_MASK:
  3457. case IFLA_TARGET_NETNSID:
  3458. break;
  3459. default:
  3460. NL_SET_ERR_MSG(extack, "Unsupported attribute in get link request");
  3461. return -EINVAL;
  3462. }
  3463. }
  3464. return 0;
  3465. }
  3466. static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  3467. struct netlink_ext_ack *extack)
  3468. {
  3469. struct net *net = sock_net(skb->sk);
  3470. struct net *tgt_net = net;
  3471. struct ifinfomsg *ifm;
  3472. struct nlattr *tb[IFLA_MAX+1];
  3473. struct net_device *dev = NULL;
  3474. struct sk_buff *nskb;
  3475. int netnsid = -1;
  3476. int err;
  3477. u32 ext_filter_mask = 0;
  3478. err = rtnl_valid_getlink_req(skb, nlh, tb, extack);
  3479. if (err < 0)
  3480. return err;
  3481. err = rtnl_ensure_unique_netns(tb, extack, true);
  3482. if (err < 0)
  3483. return err;
  3484. if (tb[IFLA_TARGET_NETNSID]) {
  3485. netnsid = nla_get_s32(tb[IFLA_TARGET_NETNSID]);
  3486. tgt_net = rtnl_get_net_ns_capable(NETLINK_CB(skb).sk, netnsid);
  3487. if (IS_ERR(tgt_net))
  3488. return PTR_ERR(tgt_net);
  3489. }
  3490. if (tb[IFLA_EXT_MASK])
  3491. ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
  3492. err = -EINVAL;
  3493. ifm = nlmsg_data(nlh);
  3494. if (ifm->ifi_index > 0)
  3495. dev = __dev_get_by_index(tgt_net, ifm->ifi_index);
  3496. else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
  3497. dev = rtnl_dev_get(tgt_net, tb);
  3498. else
  3499. goto out;
  3500. err = -ENODEV;
  3501. if (dev == NULL)
  3502. goto out;
  3503. err = -ENOBUFS;
  3504. nskb = nlmsg_new_large(if_nlmsg_size(dev, ext_filter_mask));
  3505. if (nskb == NULL)
  3506. goto out;
  3507. /* Synchronize the carrier state so we don't report a state
  3508. * that we're not actually going to honour immediately; if
  3509. * the driver just did a carrier off->on transition, we can
  3510. * only TX if link watch work has run, but without this we'd
  3511. * already report carrier on, even if it doesn't work yet.
  3512. */
  3513. linkwatch_sync_dev(dev);
  3514. err = rtnl_fill_ifinfo(nskb, dev, net,
  3515. RTM_NEWLINK, NETLINK_CB(skb).portid,
  3516. nlh->nlmsg_seq, 0, 0, ext_filter_mask,
  3517. 0, NULL, 0, netnsid, GFP_KERNEL);
  3518. if (err < 0) {
  3519. /* -EMSGSIZE implies BUG in if_nlmsg_size */
  3520. WARN_ON(err == -EMSGSIZE);
  3521. kfree_skb(nskb);
  3522. } else
  3523. err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
  3524. out:
  3525. if (netnsid >= 0)
  3526. put_net(tgt_net);
  3527. return err;
  3528. }
  3529. static int rtnl_alt_ifname(int cmd, struct net_device *dev, struct nlattr *attr,
  3530. bool *changed, struct netlink_ext_ack *extack)
  3531. {
  3532. char *alt_ifname;
  3533. size_t size;
  3534. int err;
  3535. err = nla_validate(attr, attr->nla_len, IFLA_MAX, ifla_policy, extack);
  3536. if (err)
  3537. return err;
  3538. if (cmd == RTM_NEWLINKPROP) {
  3539. size = rtnl_prop_list_size(dev);
  3540. size += nla_total_size(ALTIFNAMSIZ);
  3541. if (size >= U16_MAX) {
  3542. NL_SET_ERR_MSG(extack,
  3543. "effective property list too long");
  3544. return -EINVAL;
  3545. }
  3546. }
  3547. alt_ifname = nla_strdup(attr, GFP_KERNEL_ACCOUNT);
  3548. if (!alt_ifname)
  3549. return -ENOMEM;
  3550. if (cmd == RTM_NEWLINKPROP) {
  3551. err = netdev_name_node_alt_create(dev, alt_ifname);
  3552. if (!err)
  3553. alt_ifname = NULL;
  3554. } else if (cmd == RTM_DELLINKPROP) {
  3555. err = netdev_name_node_alt_destroy(dev, alt_ifname);
  3556. } else {
  3557. WARN_ON_ONCE(1);
  3558. err = -EINVAL;
  3559. }
  3560. kfree(alt_ifname);
  3561. if (!err)
  3562. *changed = true;
  3563. return err;
  3564. }
  3565. static int rtnl_linkprop(int cmd, struct sk_buff *skb, struct nlmsghdr *nlh,
  3566. struct netlink_ext_ack *extack)
  3567. {
  3568. struct net *net = sock_net(skb->sk);
  3569. struct nlattr *tb[IFLA_MAX + 1];
  3570. struct net_device *dev;
  3571. struct ifinfomsg *ifm;
  3572. bool changed = false;
  3573. struct nlattr *attr;
  3574. int err, rem;
  3575. err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
  3576. if (err)
  3577. return err;
  3578. err = rtnl_ensure_unique_netns(tb, extack, true);
  3579. if (err)
  3580. return err;
  3581. ifm = nlmsg_data(nlh);
  3582. if (ifm->ifi_index > 0)
  3583. dev = __dev_get_by_index(net, ifm->ifi_index);
  3584. else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
  3585. dev = rtnl_dev_get(net, tb);
  3586. else
  3587. return -EINVAL;
  3588. if (!dev)
  3589. return -ENODEV;
  3590. if (!tb[IFLA_PROP_LIST])
  3591. return 0;
  3592. nla_for_each_nested(attr, tb[IFLA_PROP_LIST], rem) {
  3593. switch (nla_type(attr)) {
  3594. case IFLA_ALT_IFNAME:
  3595. err = rtnl_alt_ifname(cmd, dev, attr, &changed, extack);
  3596. if (err)
  3597. return err;
  3598. break;
  3599. }
  3600. }
  3601. if (changed)
  3602. netdev_state_change(dev);
  3603. return 0;
  3604. }
  3605. static int rtnl_newlinkprop(struct sk_buff *skb, struct nlmsghdr *nlh,
  3606. struct netlink_ext_ack *extack)
  3607. {
  3608. return rtnl_linkprop(RTM_NEWLINKPROP, skb, nlh, extack);
  3609. }
  3610. static int rtnl_dellinkprop(struct sk_buff *skb, struct nlmsghdr *nlh,
  3611. struct netlink_ext_ack *extack)
  3612. {
  3613. return rtnl_linkprop(RTM_DELLINKPROP, skb, nlh, extack);
  3614. }
  3615. static noinline_for_stack u32 rtnl_calcit(struct sk_buff *skb,
  3616. struct nlmsghdr *nlh)
  3617. {
  3618. struct net *net = sock_net(skb->sk);
  3619. size_t min_ifinfo_dump_size = 0;
  3620. u32 ext_filter_mask = 0;
  3621. struct net_device *dev;
  3622. struct nlattr *nla;
  3623. int hdrlen, rem;
  3624. /* Same kernel<->userspace interface hack as in rtnl_dump_ifinfo. */
  3625. hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
  3626. sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
  3627. if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
  3628. return NLMSG_GOODSIZE;
  3629. nla_for_each_attr_type(nla, IFLA_EXT_MASK,
  3630. nlmsg_attrdata(nlh, hdrlen),
  3631. nlmsg_attrlen(nlh, hdrlen), rem) {
  3632. if (nla_len(nla) == sizeof(u32))
  3633. ext_filter_mask = nla_get_u32(nla);
  3634. }
  3635. if (!ext_filter_mask)
  3636. return NLMSG_GOODSIZE;
  3637. /*
  3638. * traverse the list of net devices and compute the minimum
  3639. * buffer size based upon the filter mask.
  3640. */
  3641. rcu_read_lock();
  3642. for_each_netdev_rcu(net, dev) {
  3643. min_ifinfo_dump_size = max(min_ifinfo_dump_size,
  3644. if_nlmsg_size(dev, ext_filter_mask));
  3645. }
  3646. rcu_read_unlock();
  3647. return nlmsg_total_size(min_ifinfo_dump_size);
  3648. }
  3649. static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
  3650. {
  3651. int idx;
  3652. int s_idx = cb->family;
  3653. int type = cb->nlh->nlmsg_type - RTM_BASE;
  3654. int ret = 0;
  3655. if (s_idx == 0)
  3656. s_idx = 1;
  3657. for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
  3658. struct rtnl_link __rcu **tab;
  3659. struct rtnl_link *link;
  3660. rtnl_dumpit_func dumpit;
  3661. if (idx < s_idx || idx == PF_PACKET)
  3662. continue;
  3663. if (type < 0 || type >= RTM_NR_MSGTYPES)
  3664. continue;
  3665. tab = rcu_dereference_rtnl(rtnl_msg_handlers[idx]);
  3666. if (!tab)
  3667. continue;
  3668. link = rcu_dereference_rtnl(tab[type]);
  3669. if (!link)
  3670. continue;
  3671. dumpit = link->dumpit;
  3672. if (!dumpit)
  3673. continue;
  3674. if (idx > s_idx) {
  3675. memset(&cb->args[0], 0, sizeof(cb->args));
  3676. cb->prev_seq = 0;
  3677. cb->seq = 0;
  3678. }
  3679. ret = dumpit(skb, cb);
  3680. if (ret)
  3681. break;
  3682. }
  3683. cb->family = idx;
  3684. return skb->len ? : ret;
  3685. }
  3686. struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev,
  3687. unsigned int change,
  3688. u32 event, gfp_t flags, int *new_nsid,
  3689. int new_ifindex, u32 portid,
  3690. const struct nlmsghdr *nlh)
  3691. {
  3692. struct net *net = dev_net(dev);
  3693. struct sk_buff *skb;
  3694. int err = -ENOBUFS;
  3695. u32 seq = 0;
  3696. skb = nlmsg_new(if_nlmsg_size(dev, 0), flags);
  3697. if (skb == NULL)
  3698. goto errout;
  3699. if (nlmsg_report(nlh))
  3700. seq = nlmsg_seq(nlh);
  3701. else
  3702. portid = 0;
  3703. err = rtnl_fill_ifinfo(skb, dev, dev_net(dev),
  3704. type, portid, seq, change, 0, 0, event,
  3705. new_nsid, new_ifindex, -1, flags);
  3706. if (err < 0) {
  3707. /* -EMSGSIZE implies BUG in if_nlmsg_size() */
  3708. WARN_ON(err == -EMSGSIZE);
  3709. kfree_skb(skb);
  3710. goto errout;
  3711. }
  3712. return skb;
  3713. errout:
  3714. rtnl_set_sk_err(net, RTNLGRP_LINK, err);
  3715. return NULL;
  3716. }
  3717. void rtmsg_ifinfo_send(struct sk_buff *skb, struct net_device *dev, gfp_t flags,
  3718. u32 portid, const struct nlmsghdr *nlh)
  3719. {
  3720. struct net *net = dev_net(dev);
  3721. rtnl_notify(skb, net, portid, RTNLGRP_LINK, nlh, flags);
  3722. }
  3723. static void rtmsg_ifinfo_event(int type, struct net_device *dev,
  3724. unsigned int change, u32 event,
  3725. gfp_t flags, int *new_nsid, int new_ifindex,
  3726. u32 portid, const struct nlmsghdr *nlh)
  3727. {
  3728. struct sk_buff *skb;
  3729. if (dev->reg_state != NETREG_REGISTERED)
  3730. return;
  3731. skb = rtmsg_ifinfo_build_skb(type, dev, change, event, flags, new_nsid,
  3732. new_ifindex, portid, nlh);
  3733. if (skb)
  3734. rtmsg_ifinfo_send(skb, dev, flags, portid, nlh);
  3735. }
  3736. void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change,
  3737. gfp_t flags, u32 portid, const struct nlmsghdr *nlh)
  3738. {
  3739. rtmsg_ifinfo_event(type, dev, change, rtnl_get_event(0), flags,
  3740. NULL, 0, portid, nlh);
  3741. }
  3742. void rtmsg_ifinfo_newnet(int type, struct net_device *dev, unsigned int change,
  3743. gfp_t flags, int *new_nsid, int new_ifindex)
  3744. {
  3745. rtmsg_ifinfo_event(type, dev, change, rtnl_get_event(0), flags,
  3746. new_nsid, new_ifindex, 0, NULL);
  3747. }
  3748. static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
  3749. struct net_device *dev,
  3750. u8 *addr, u16 vid, u32 pid, u32 seq,
  3751. int type, unsigned int flags,
  3752. int nlflags, u16 ndm_state)
  3753. {
  3754. struct nlmsghdr *nlh;
  3755. struct ndmsg *ndm;
  3756. nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags);
  3757. if (!nlh)
  3758. return -EMSGSIZE;
  3759. ndm = nlmsg_data(nlh);
  3760. ndm->ndm_family = AF_BRIDGE;
  3761. ndm->ndm_pad1 = 0;
  3762. ndm->ndm_pad2 = 0;
  3763. ndm->ndm_flags = flags;
  3764. ndm->ndm_type = 0;
  3765. ndm->ndm_ifindex = dev->ifindex;
  3766. ndm->ndm_state = ndm_state;
  3767. if (nla_put(skb, NDA_LLADDR, dev->addr_len, addr))
  3768. goto nla_put_failure;
  3769. if (vid)
  3770. if (nla_put(skb, NDA_VLAN, sizeof(u16), &vid))
  3771. goto nla_put_failure;
  3772. nlmsg_end(skb, nlh);
  3773. return 0;
  3774. nla_put_failure:
  3775. nlmsg_cancel(skb, nlh);
  3776. return -EMSGSIZE;
  3777. }
  3778. static inline size_t rtnl_fdb_nlmsg_size(const struct net_device *dev)
  3779. {
  3780. return NLMSG_ALIGN(sizeof(struct ndmsg)) +
  3781. nla_total_size(dev->addr_len) + /* NDA_LLADDR */
  3782. nla_total_size(sizeof(u16)) + /* NDA_VLAN */
  3783. 0;
  3784. }
  3785. static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, u16 vid, int type,
  3786. u16 ndm_state)
  3787. {
  3788. struct net *net = dev_net(dev);
  3789. struct sk_buff *skb;
  3790. int err = -ENOBUFS;
  3791. skb = nlmsg_new(rtnl_fdb_nlmsg_size(dev), GFP_ATOMIC);
  3792. if (!skb)
  3793. goto errout;
  3794. err = nlmsg_populate_fdb_fill(skb, dev, addr, vid,
  3795. 0, 0, type, NTF_SELF, 0, ndm_state);
  3796. if (err < 0) {
  3797. kfree_skb(skb);
  3798. goto errout;
  3799. }
  3800. rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
  3801. return;
  3802. errout:
  3803. rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
  3804. }
  3805. /*
  3806. * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
  3807. */
  3808. int ndo_dflt_fdb_add(struct ndmsg *ndm,
  3809. struct nlattr *tb[],
  3810. struct net_device *dev,
  3811. const unsigned char *addr, u16 vid,
  3812. u16 flags)
  3813. {
  3814. int err = -EINVAL;
  3815. /* If aging addresses are supported device will need to
  3816. * implement its own handler for this.
  3817. */
  3818. if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
  3819. netdev_info(dev, "default FDB implementation only supports local addresses\n");
  3820. return err;
  3821. }
  3822. if (tb[NDA_FLAGS_EXT]) {
  3823. netdev_info(dev, "invalid flags given to default FDB implementation\n");
  3824. return err;
  3825. }
  3826. if (vid) {
  3827. netdev_info(dev, "vlans aren't supported yet for dev_uc|mc_add()\n");
  3828. return err;
  3829. }
  3830. if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
  3831. err = dev_uc_add_excl(dev, addr);
  3832. else if (is_multicast_ether_addr(addr))
  3833. err = dev_mc_add_excl(dev, addr);
  3834. /* Only return duplicate errors if NLM_F_EXCL is set */
  3835. if (err == -EEXIST && !(flags & NLM_F_EXCL))
  3836. err = 0;
  3837. return err;
  3838. }
  3839. EXPORT_SYMBOL(ndo_dflt_fdb_add);
  3840. static int fdb_vid_parse(struct nlattr *vlan_attr, u16 *p_vid,
  3841. struct netlink_ext_ack *extack)
  3842. {
  3843. u16 vid = 0;
  3844. if (vlan_attr) {
  3845. if (nla_len(vlan_attr) != sizeof(u16)) {
  3846. NL_SET_ERR_MSG(extack, "invalid vlan attribute size");
  3847. return -EINVAL;
  3848. }
  3849. vid = nla_get_u16(vlan_attr);
  3850. if (!vid || vid >= VLAN_VID_MASK) {
  3851. NL_SET_ERR_MSG(extack, "invalid vlan id");
  3852. return -EINVAL;
  3853. }
  3854. }
  3855. *p_vid = vid;
  3856. return 0;
  3857. }
  3858. static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
  3859. struct netlink_ext_ack *extack)
  3860. {
  3861. struct net *net = sock_net(skb->sk);
  3862. struct ndmsg *ndm;
  3863. struct nlattr *tb[NDA_MAX+1];
  3864. struct net_device *dev;
  3865. u8 *addr;
  3866. u16 vid;
  3867. int err;
  3868. err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, NULL,
  3869. extack);
  3870. if (err < 0)
  3871. return err;
  3872. ndm = nlmsg_data(nlh);
  3873. if (ndm->ndm_ifindex == 0) {
  3874. NL_SET_ERR_MSG(extack, "invalid ifindex");
  3875. return -EINVAL;
  3876. }
  3877. dev = __dev_get_by_index(net, ndm->ndm_ifindex);
  3878. if (dev == NULL) {
  3879. NL_SET_ERR_MSG(extack, "unknown ifindex");
  3880. return -ENODEV;
  3881. }
  3882. if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
  3883. NL_SET_ERR_MSG(extack, "invalid address");
  3884. return -EINVAL;
  3885. }
  3886. if (dev->type != ARPHRD_ETHER) {
  3887. NL_SET_ERR_MSG(extack, "FDB add only supported for Ethernet devices");
  3888. return -EINVAL;
  3889. }
  3890. addr = nla_data(tb[NDA_LLADDR]);
  3891. err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
  3892. if (err)
  3893. return err;
  3894. err = -EOPNOTSUPP;
  3895. /* Support fdb on master device the net/bridge default case */
  3896. if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
  3897. netif_is_bridge_port(dev)) {
  3898. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  3899. const struct net_device_ops *ops = br_dev->netdev_ops;
  3900. bool notified = false;
  3901. err = ops->ndo_fdb_add(ndm, tb, dev, addr, vid,
  3902. nlh->nlmsg_flags, &notified, extack);
  3903. if (err)
  3904. goto out;
  3905. else
  3906. ndm->ndm_flags &= ~NTF_MASTER;
  3907. }
  3908. /* Embedded bridge, macvlan, and any other device support */
  3909. if ((ndm->ndm_flags & NTF_SELF)) {
  3910. bool notified = false;
  3911. if (dev->netdev_ops->ndo_fdb_add)
  3912. err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
  3913. vid,
  3914. nlh->nlmsg_flags,
  3915. &notified, extack);
  3916. else
  3917. err = ndo_dflt_fdb_add(ndm, tb, dev, addr, vid,
  3918. nlh->nlmsg_flags);
  3919. if (!err && !notified) {
  3920. rtnl_fdb_notify(dev, addr, vid, RTM_NEWNEIGH,
  3921. ndm->ndm_state);
  3922. ndm->ndm_flags &= ~NTF_SELF;
  3923. }
  3924. }
  3925. out:
  3926. return err;
  3927. }
  3928. /*
  3929. * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
  3930. */
  3931. int ndo_dflt_fdb_del(struct ndmsg *ndm,
  3932. struct nlattr *tb[],
  3933. struct net_device *dev,
  3934. const unsigned char *addr, u16 vid)
  3935. {
  3936. int err = -EINVAL;
  3937. /* If aging addresses are supported device will need to
  3938. * implement its own handler for this.
  3939. */
  3940. if (!(ndm->ndm_state & NUD_PERMANENT)) {
  3941. netdev_info(dev, "default FDB implementation only supports local addresses\n");
  3942. return err;
  3943. }
  3944. if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
  3945. err = dev_uc_del(dev, addr);
  3946. else if (is_multicast_ether_addr(addr))
  3947. err = dev_mc_del(dev, addr);
  3948. return err;
  3949. }
  3950. EXPORT_SYMBOL(ndo_dflt_fdb_del);
  3951. static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
  3952. struct netlink_ext_ack *extack)
  3953. {
  3954. bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK);
  3955. struct net *net = sock_net(skb->sk);
  3956. const struct net_device_ops *ops;
  3957. struct ndmsg *ndm;
  3958. struct nlattr *tb[NDA_MAX+1];
  3959. struct net_device *dev;
  3960. __u8 *addr = NULL;
  3961. int err;
  3962. u16 vid;
  3963. if (!del_bulk) {
  3964. err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX,
  3965. NULL, extack);
  3966. } else {
  3967. /* For bulk delete, the drivers will parse the message with
  3968. * policy.
  3969. */
  3970. err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
  3971. }
  3972. if (err < 0)
  3973. return err;
  3974. ndm = nlmsg_data(nlh);
  3975. if (ndm->ndm_ifindex == 0) {
  3976. NL_SET_ERR_MSG(extack, "invalid ifindex");
  3977. return -EINVAL;
  3978. }
  3979. dev = __dev_get_by_index(net, ndm->ndm_ifindex);
  3980. if (dev == NULL) {
  3981. NL_SET_ERR_MSG(extack, "unknown ifindex");
  3982. return -ENODEV;
  3983. }
  3984. if (!del_bulk) {
  3985. if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
  3986. NL_SET_ERR_MSG(extack, "invalid address");
  3987. return -EINVAL;
  3988. }
  3989. addr = nla_data(tb[NDA_LLADDR]);
  3990. err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
  3991. if (err)
  3992. return err;
  3993. }
  3994. if (dev->type != ARPHRD_ETHER) {
  3995. NL_SET_ERR_MSG(extack, "FDB delete only supported for Ethernet devices");
  3996. return -EINVAL;
  3997. }
  3998. err = -EOPNOTSUPP;
  3999. /* Support fdb on master device the net/bridge default case */
  4000. if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
  4001. netif_is_bridge_port(dev)) {
  4002. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  4003. bool notified = false;
  4004. ops = br_dev->netdev_ops;
  4005. if (!del_bulk) {
  4006. if (ops->ndo_fdb_del)
  4007. err = ops->ndo_fdb_del(ndm, tb, dev, addr, vid,
  4008. &notified, extack);
  4009. } else {
  4010. if (ops->ndo_fdb_del_bulk)
  4011. err = ops->ndo_fdb_del_bulk(nlh, dev, extack);
  4012. }
  4013. if (err)
  4014. goto out;
  4015. else
  4016. ndm->ndm_flags &= ~NTF_MASTER;
  4017. }
  4018. /* Embedded bridge, macvlan, and any other device support */
  4019. if (ndm->ndm_flags & NTF_SELF) {
  4020. bool notified = false;
  4021. ops = dev->netdev_ops;
  4022. if (!del_bulk) {
  4023. if (ops->ndo_fdb_del)
  4024. err = ops->ndo_fdb_del(ndm, tb, dev, addr, vid,
  4025. &notified, extack);
  4026. else
  4027. err = ndo_dflt_fdb_del(ndm, tb, dev, addr, vid);
  4028. } else {
  4029. /* in case err was cleared by NTF_MASTER call */
  4030. err = -EOPNOTSUPP;
  4031. if (ops->ndo_fdb_del_bulk)
  4032. err = ops->ndo_fdb_del_bulk(nlh, dev, extack);
  4033. }
  4034. if (!err) {
  4035. if (!del_bulk && !notified)
  4036. rtnl_fdb_notify(dev, addr, vid, RTM_DELNEIGH,
  4037. ndm->ndm_state);
  4038. ndm->ndm_flags &= ~NTF_SELF;
  4039. }
  4040. }
  4041. out:
  4042. return err;
  4043. }
  4044. static int nlmsg_populate_fdb(struct sk_buff *skb,
  4045. struct netlink_callback *cb,
  4046. struct net_device *dev,
  4047. int *idx,
  4048. struct netdev_hw_addr_list *list)
  4049. {
  4050. struct ndo_fdb_dump_context *ctx = (void *)cb->ctx;
  4051. struct netdev_hw_addr *ha;
  4052. u32 portid, seq;
  4053. int err;
  4054. portid = NETLINK_CB(cb->skb).portid;
  4055. seq = cb->nlh->nlmsg_seq;
  4056. list_for_each_entry(ha, &list->list, list) {
  4057. if (*idx < ctx->fdb_idx)
  4058. goto skip;
  4059. err = nlmsg_populate_fdb_fill(skb, dev, ha->addr, 0,
  4060. portid, seq,
  4061. RTM_NEWNEIGH, NTF_SELF,
  4062. NLM_F_MULTI, NUD_PERMANENT);
  4063. if (err < 0)
  4064. return err;
  4065. skip:
  4066. *idx += 1;
  4067. }
  4068. return 0;
  4069. }
  4070. /**
  4071. * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
  4072. * @skb: socket buffer to store message in
  4073. * @cb: netlink callback
  4074. * @dev: netdevice
  4075. * @filter_dev: ignored
  4076. * @idx: the number of FDB table entries dumped is added to *@idx
  4077. *
  4078. * Default netdevice operation to dump the existing unicast address list.
  4079. * Returns number of addresses from list put in skb.
  4080. */
  4081. int ndo_dflt_fdb_dump(struct sk_buff *skb,
  4082. struct netlink_callback *cb,
  4083. struct net_device *dev,
  4084. struct net_device *filter_dev,
  4085. int *idx)
  4086. {
  4087. int err;
  4088. if (dev->type != ARPHRD_ETHER)
  4089. return -EINVAL;
  4090. netif_addr_lock_bh(dev);
  4091. err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->uc);
  4092. if (err)
  4093. goto out;
  4094. err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->mc);
  4095. out:
  4096. netif_addr_unlock_bh(dev);
  4097. return err;
  4098. }
  4099. EXPORT_SYMBOL(ndo_dflt_fdb_dump);
  4100. static int valid_fdb_dump_strict(const struct nlmsghdr *nlh,
  4101. int *br_idx, int *brport_idx,
  4102. struct netlink_ext_ack *extack)
  4103. {
  4104. struct nlattr *tb[NDA_MAX + 1];
  4105. struct ndmsg *ndm;
  4106. int err, i;
  4107. ndm = nlmsg_payload(nlh, sizeof(*ndm));
  4108. if (!ndm) {
  4109. NL_SET_ERR_MSG(extack, "Invalid header for fdb dump request");
  4110. return -EINVAL;
  4111. }
  4112. if (ndm->ndm_pad1 || ndm->ndm_pad2 || ndm->ndm_state ||
  4113. ndm->ndm_flags || ndm->ndm_type) {
  4114. NL_SET_ERR_MSG(extack, "Invalid values in header for fdb dump request");
  4115. return -EINVAL;
  4116. }
  4117. err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb,
  4118. NDA_MAX, NULL, extack);
  4119. if (err < 0)
  4120. return err;
  4121. *brport_idx = ndm->ndm_ifindex;
  4122. for (i = 0; i <= NDA_MAX; ++i) {
  4123. if (!tb[i])
  4124. continue;
  4125. switch (i) {
  4126. case NDA_IFINDEX:
  4127. if (nla_len(tb[i]) != sizeof(u32)) {
  4128. NL_SET_ERR_MSG(extack, "Invalid IFINDEX attribute in fdb dump request");
  4129. return -EINVAL;
  4130. }
  4131. *brport_idx = nla_get_u32(tb[NDA_IFINDEX]);
  4132. break;
  4133. case NDA_MASTER:
  4134. if (nla_len(tb[i]) != sizeof(u32)) {
  4135. NL_SET_ERR_MSG(extack, "Invalid MASTER attribute in fdb dump request");
  4136. return -EINVAL;
  4137. }
  4138. *br_idx = nla_get_u32(tb[NDA_MASTER]);
  4139. break;
  4140. default:
  4141. NL_SET_ERR_MSG(extack, "Unsupported attribute in fdb dump request");
  4142. return -EINVAL;
  4143. }
  4144. }
  4145. return 0;
  4146. }
  4147. static int valid_fdb_dump_legacy(const struct nlmsghdr *nlh,
  4148. int *br_idx, int *brport_idx,
  4149. struct netlink_ext_ack *extack)
  4150. {
  4151. struct nlattr *tb[IFLA_MAX+1];
  4152. int err;
  4153. /* A hack to preserve kernel<->userspace interface.
  4154. * Before Linux v4.12 this code accepted ndmsg since iproute2 v3.3.0.
  4155. * However, ndmsg is shorter than ifinfomsg thus nlmsg_parse() bails.
  4156. * So, check for ndmsg with an optional u32 attribute (not used here).
  4157. * Fortunately these sizes don't conflict with the size of ifinfomsg
  4158. * with an optional attribute.
  4159. */
  4160. if (nlmsg_len(nlh) != sizeof(struct ndmsg) &&
  4161. (nlmsg_len(nlh) != sizeof(struct ndmsg) +
  4162. nla_attr_size(sizeof(u32)))) {
  4163. struct ifinfomsg *ifm;
  4164. err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg),
  4165. tb, IFLA_MAX, ifla_policy,
  4166. extack);
  4167. if (err < 0) {
  4168. return -EINVAL;
  4169. } else if (err == 0) {
  4170. if (tb[IFLA_MASTER])
  4171. *br_idx = nla_get_u32(tb[IFLA_MASTER]);
  4172. }
  4173. ifm = nlmsg_data(nlh);
  4174. *brport_idx = ifm->ifi_index;
  4175. }
  4176. return 0;
  4177. }
  4178. static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
  4179. {
  4180. const struct net_device_ops *ops = NULL, *cops = NULL;
  4181. struct ndo_fdb_dump_context *ctx = (void *)cb->ctx;
  4182. struct net_device *dev, *br_dev = NULL;
  4183. struct net *net = sock_net(skb->sk);
  4184. int brport_idx = 0;
  4185. int br_idx = 0;
  4186. int fidx = 0;
  4187. int err;
  4188. NL_ASSERT_CTX_FITS(struct ndo_fdb_dump_context);
  4189. if (cb->strict_check)
  4190. err = valid_fdb_dump_strict(cb->nlh, &br_idx, &brport_idx,
  4191. cb->extack);
  4192. else
  4193. err = valid_fdb_dump_legacy(cb->nlh, &br_idx, &brport_idx,
  4194. cb->extack);
  4195. if (err < 0)
  4196. return err;
  4197. if (br_idx) {
  4198. br_dev = __dev_get_by_index(net, br_idx);
  4199. if (!br_dev)
  4200. return -ENODEV;
  4201. ops = br_dev->netdev_ops;
  4202. }
  4203. for_each_netdev_dump(net, dev, ctx->ifindex) {
  4204. if (brport_idx && (dev->ifindex != brport_idx))
  4205. continue;
  4206. if (!br_idx) { /* user did not specify a specific bridge */
  4207. if (netif_is_bridge_port(dev)) {
  4208. br_dev = netdev_master_upper_dev_get(dev);
  4209. cops = br_dev->netdev_ops;
  4210. }
  4211. } else {
  4212. if (dev != br_dev &&
  4213. !netif_is_bridge_port(dev))
  4214. continue;
  4215. if (br_dev != netdev_master_upper_dev_get(dev) &&
  4216. !netif_is_bridge_master(dev))
  4217. continue;
  4218. cops = ops;
  4219. }
  4220. if (netif_is_bridge_port(dev)) {
  4221. if (cops && cops->ndo_fdb_dump) {
  4222. err = cops->ndo_fdb_dump(skb, cb, br_dev, dev,
  4223. &fidx);
  4224. if (err == -EMSGSIZE)
  4225. break;
  4226. }
  4227. }
  4228. if (dev->netdev_ops->ndo_fdb_dump)
  4229. err = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, NULL,
  4230. &fidx);
  4231. else
  4232. err = ndo_dflt_fdb_dump(skb, cb, dev, NULL, &fidx);
  4233. if (err == -EMSGSIZE)
  4234. break;
  4235. cops = NULL;
  4236. /* reset fdb offset to 0 for rest of the interfaces */
  4237. ctx->fdb_idx = 0;
  4238. fidx = 0;
  4239. }
  4240. ctx->fdb_idx = fidx;
  4241. return skb->len;
  4242. }
  4243. static int valid_fdb_get_strict(const struct nlmsghdr *nlh,
  4244. struct nlattr **tb, u8 *ndm_flags,
  4245. int *br_idx, int *brport_idx, u8 **addr,
  4246. u16 *vid, struct netlink_ext_ack *extack)
  4247. {
  4248. struct ndmsg *ndm;
  4249. int err, i;
  4250. ndm = nlmsg_payload(nlh, sizeof(*ndm));
  4251. if (!ndm) {
  4252. NL_SET_ERR_MSG(extack, "Invalid header for fdb get request");
  4253. return -EINVAL;
  4254. }
  4255. if (ndm->ndm_pad1 || ndm->ndm_pad2 || ndm->ndm_state ||
  4256. ndm->ndm_type) {
  4257. NL_SET_ERR_MSG(extack, "Invalid values in header for fdb get request");
  4258. return -EINVAL;
  4259. }
  4260. if (ndm->ndm_flags & ~(NTF_MASTER | NTF_SELF)) {
  4261. NL_SET_ERR_MSG(extack, "Invalid flags in header for fdb get request");
  4262. return -EINVAL;
  4263. }
  4264. err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb,
  4265. NDA_MAX, nda_policy, extack);
  4266. if (err < 0)
  4267. return err;
  4268. *ndm_flags = ndm->ndm_flags;
  4269. *brport_idx = ndm->ndm_ifindex;
  4270. for (i = 0; i <= NDA_MAX; ++i) {
  4271. if (!tb[i])
  4272. continue;
  4273. switch (i) {
  4274. case NDA_MASTER:
  4275. *br_idx = nla_get_u32(tb[i]);
  4276. break;
  4277. case NDA_LLADDR:
  4278. if (nla_len(tb[i]) != ETH_ALEN) {
  4279. NL_SET_ERR_MSG(extack, "Invalid address in fdb get request");
  4280. return -EINVAL;
  4281. }
  4282. *addr = nla_data(tb[i]);
  4283. break;
  4284. case NDA_VLAN:
  4285. err = fdb_vid_parse(tb[i], vid, extack);
  4286. if (err)
  4287. return err;
  4288. break;
  4289. case NDA_VNI:
  4290. break;
  4291. default:
  4292. NL_SET_ERR_MSG(extack, "Unsupported attribute in fdb get request");
  4293. return -EINVAL;
  4294. }
  4295. }
  4296. return 0;
  4297. }
  4298. static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
  4299. struct netlink_ext_ack *extack)
  4300. {
  4301. struct net_device *dev = NULL, *br_dev = NULL;
  4302. const struct net_device_ops *ops = NULL;
  4303. struct net *net = sock_net(in_skb->sk);
  4304. struct nlattr *tb[NDA_MAX + 1];
  4305. struct sk_buff *skb;
  4306. int brport_idx = 0;
  4307. u8 ndm_flags = 0;
  4308. int br_idx = 0;
  4309. u8 *addr = NULL;
  4310. u16 vid = 0;
  4311. int err;
  4312. err = valid_fdb_get_strict(nlh, tb, &ndm_flags, &br_idx,
  4313. &brport_idx, &addr, &vid, extack);
  4314. if (err < 0)
  4315. return err;
  4316. if (!addr) {
  4317. NL_SET_ERR_MSG(extack, "Missing lookup address for fdb get request");
  4318. return -EINVAL;
  4319. }
  4320. if (brport_idx) {
  4321. dev = __dev_get_by_index(net, brport_idx);
  4322. if (!dev) {
  4323. NL_SET_ERR_MSG(extack, "Unknown device ifindex");
  4324. return -ENODEV;
  4325. }
  4326. }
  4327. if (br_idx) {
  4328. if (dev) {
  4329. NL_SET_ERR_MSG(extack, "Master and device are mutually exclusive");
  4330. return -EINVAL;
  4331. }
  4332. br_dev = __dev_get_by_index(net, br_idx);
  4333. if (!br_dev) {
  4334. NL_SET_ERR_MSG(extack, "Invalid master ifindex");
  4335. return -EINVAL;
  4336. }
  4337. ops = br_dev->netdev_ops;
  4338. }
  4339. if (dev) {
  4340. if (!ndm_flags || (ndm_flags & NTF_MASTER)) {
  4341. if (!netif_is_bridge_port(dev)) {
  4342. NL_SET_ERR_MSG(extack, "Device is not a bridge port");
  4343. return -EINVAL;
  4344. }
  4345. br_dev = netdev_master_upper_dev_get(dev);
  4346. if (!br_dev) {
  4347. NL_SET_ERR_MSG(extack, "Master of device not found");
  4348. return -EINVAL;
  4349. }
  4350. ops = br_dev->netdev_ops;
  4351. } else {
  4352. if (!(ndm_flags & NTF_SELF)) {
  4353. NL_SET_ERR_MSG(extack, "Missing NTF_SELF");
  4354. return -EINVAL;
  4355. }
  4356. ops = dev->netdev_ops;
  4357. }
  4358. }
  4359. if (!br_dev && !dev) {
  4360. NL_SET_ERR_MSG(extack, "No device specified");
  4361. return -ENODEV;
  4362. }
  4363. if (!ops || !ops->ndo_fdb_get) {
  4364. NL_SET_ERR_MSG(extack, "Fdb get operation not supported by device");
  4365. return -EOPNOTSUPP;
  4366. }
  4367. skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
  4368. if (!skb)
  4369. return -ENOBUFS;
  4370. if (br_dev)
  4371. dev = br_dev;
  4372. err = ops->ndo_fdb_get(skb, tb, dev, addr, vid,
  4373. NETLINK_CB(in_skb).portid,
  4374. nlh->nlmsg_seq, extack);
  4375. if (err)
  4376. goto out;
  4377. return rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid);
  4378. out:
  4379. kfree_skb(skb);
  4380. return err;
  4381. }
  4382. static int brport_nla_put_flag(struct sk_buff *skb, u32 flags, u32 mask,
  4383. unsigned int attrnum, unsigned int flag)
  4384. {
  4385. if (mask & flag)
  4386. return nla_put_u8(skb, attrnum, !!(flags & flag));
  4387. return 0;
  4388. }
  4389. int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
  4390. struct net_device *dev, u16 mode,
  4391. u32 flags, u32 mask, int nlflags,
  4392. u32 filter_mask,
  4393. int (*vlan_fill)(struct sk_buff *skb,
  4394. struct net_device *dev,
  4395. u32 filter_mask))
  4396. {
  4397. struct nlmsghdr *nlh;
  4398. struct ifinfomsg *ifm;
  4399. struct nlattr *br_afspec;
  4400. struct nlattr *protinfo;
  4401. u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
  4402. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  4403. int err = 0;
  4404. nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags);
  4405. if (nlh == NULL)
  4406. return -EMSGSIZE;
  4407. ifm = nlmsg_data(nlh);
  4408. ifm->ifi_family = AF_BRIDGE;
  4409. ifm->__ifi_pad = 0;
  4410. ifm->ifi_type = dev->type;
  4411. ifm->ifi_index = dev->ifindex;
  4412. ifm->ifi_flags = netif_get_flags(dev);
  4413. ifm->ifi_change = 0;
  4414. if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
  4415. nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
  4416. nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
  4417. (br_dev &&
  4418. nla_put_u32(skb, IFLA_MASTER, br_dev->ifindex)) ||
  4419. (dev->addr_len &&
  4420. nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
  4421. (dev->ifindex != dev_get_iflink(dev) &&
  4422. nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))))
  4423. goto nla_put_failure;
  4424. br_afspec = nla_nest_start_noflag(skb, IFLA_AF_SPEC);
  4425. if (!br_afspec)
  4426. goto nla_put_failure;
  4427. if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF)) {
  4428. nla_nest_cancel(skb, br_afspec);
  4429. goto nla_put_failure;
  4430. }
  4431. if (mode != BRIDGE_MODE_UNDEF) {
  4432. if (nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
  4433. nla_nest_cancel(skb, br_afspec);
  4434. goto nla_put_failure;
  4435. }
  4436. }
  4437. if (vlan_fill) {
  4438. err = vlan_fill(skb, dev, filter_mask);
  4439. if (err) {
  4440. nla_nest_cancel(skb, br_afspec);
  4441. goto nla_put_failure;
  4442. }
  4443. }
  4444. nla_nest_end(skb, br_afspec);
  4445. protinfo = nla_nest_start(skb, IFLA_PROTINFO);
  4446. if (!protinfo)
  4447. goto nla_put_failure;
  4448. if (brport_nla_put_flag(skb, flags, mask,
  4449. IFLA_BRPORT_MODE, BR_HAIRPIN_MODE) ||
  4450. brport_nla_put_flag(skb, flags, mask,
  4451. IFLA_BRPORT_GUARD, BR_BPDU_GUARD) ||
  4452. brport_nla_put_flag(skb, flags, mask,
  4453. IFLA_BRPORT_FAST_LEAVE,
  4454. BR_MULTICAST_FAST_LEAVE) ||
  4455. brport_nla_put_flag(skb, flags, mask,
  4456. IFLA_BRPORT_PROTECT, BR_ROOT_BLOCK) ||
  4457. brport_nla_put_flag(skb, flags, mask,
  4458. IFLA_BRPORT_LEARNING, BR_LEARNING) ||
  4459. brport_nla_put_flag(skb, flags, mask,
  4460. IFLA_BRPORT_LEARNING_SYNC, BR_LEARNING_SYNC) ||
  4461. brport_nla_put_flag(skb, flags, mask,
  4462. IFLA_BRPORT_UNICAST_FLOOD, BR_FLOOD) ||
  4463. brport_nla_put_flag(skb, flags, mask,
  4464. IFLA_BRPORT_PROXYARP, BR_PROXYARP) ||
  4465. brport_nla_put_flag(skb, flags, mask,
  4466. IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
  4467. brport_nla_put_flag(skb, flags, mask,
  4468. IFLA_BRPORT_BCAST_FLOOD, BR_BCAST_FLOOD)) {
  4469. nla_nest_cancel(skb, protinfo);
  4470. goto nla_put_failure;
  4471. }
  4472. nla_nest_end(skb, protinfo);
  4473. nlmsg_end(skb, nlh);
  4474. return 0;
  4475. nla_put_failure:
  4476. nlmsg_cancel(skb, nlh);
  4477. return err ? err : -EMSGSIZE;
  4478. }
  4479. EXPORT_SYMBOL_GPL(ndo_dflt_bridge_getlink);
  4480. static int valid_bridge_getlink_req(const struct nlmsghdr *nlh,
  4481. bool strict_check, u32 *filter_mask,
  4482. struct netlink_ext_ack *extack)
  4483. {
  4484. struct nlattr *tb[IFLA_MAX+1];
  4485. int err, i;
  4486. if (strict_check) {
  4487. struct ifinfomsg *ifm;
  4488. ifm = nlmsg_payload(nlh, sizeof(*ifm));
  4489. if (!ifm) {
  4490. NL_SET_ERR_MSG(extack, "Invalid header for bridge link dump");
  4491. return -EINVAL;
  4492. }
  4493. if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
  4494. ifm->ifi_change || ifm->ifi_index) {
  4495. NL_SET_ERR_MSG(extack, "Invalid values in header for bridge link dump request");
  4496. return -EINVAL;
  4497. }
  4498. err = nlmsg_parse_deprecated_strict(nlh,
  4499. sizeof(struct ifinfomsg),
  4500. tb, IFLA_MAX, ifla_policy,
  4501. extack);
  4502. } else {
  4503. err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg),
  4504. tb, IFLA_MAX, ifla_policy,
  4505. extack);
  4506. }
  4507. if (err < 0)
  4508. return err;
  4509. /* new attributes should only be added with strict checking */
  4510. for (i = 0; i <= IFLA_MAX; ++i) {
  4511. if (!tb[i])
  4512. continue;
  4513. switch (i) {
  4514. case IFLA_EXT_MASK:
  4515. *filter_mask = nla_get_u32(tb[i]);
  4516. break;
  4517. default:
  4518. if (strict_check) {
  4519. NL_SET_ERR_MSG(extack, "Unsupported attribute in bridge link dump request");
  4520. return -EINVAL;
  4521. }
  4522. }
  4523. }
  4524. return 0;
  4525. }
  4526. static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
  4527. {
  4528. const struct nlmsghdr *nlh = cb->nlh;
  4529. struct net *net = sock_net(skb->sk);
  4530. struct net_device *dev;
  4531. int idx = 0;
  4532. u32 portid = NETLINK_CB(cb->skb).portid;
  4533. u32 seq = nlh->nlmsg_seq;
  4534. u32 filter_mask = 0;
  4535. int err;
  4536. err = valid_bridge_getlink_req(nlh, cb->strict_check, &filter_mask,
  4537. cb->extack);
  4538. if (err < 0 && cb->strict_check)
  4539. return err;
  4540. rcu_read_lock();
  4541. for_each_netdev_rcu(net, dev) {
  4542. const struct net_device_ops *ops = dev->netdev_ops;
  4543. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  4544. if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
  4545. if (idx >= cb->args[0]) {
  4546. err = br_dev->netdev_ops->ndo_bridge_getlink(
  4547. skb, portid, seq, dev,
  4548. filter_mask, NLM_F_MULTI);
  4549. if (err < 0 && err != -EOPNOTSUPP) {
  4550. if (likely(skb->len))
  4551. break;
  4552. goto out_err;
  4553. }
  4554. }
  4555. idx++;
  4556. }
  4557. if (ops->ndo_bridge_getlink) {
  4558. if (idx >= cb->args[0]) {
  4559. err = ops->ndo_bridge_getlink(skb, portid,
  4560. seq, dev,
  4561. filter_mask,
  4562. NLM_F_MULTI);
  4563. if (err < 0 && err != -EOPNOTSUPP) {
  4564. if (likely(skb->len))
  4565. break;
  4566. goto out_err;
  4567. }
  4568. }
  4569. idx++;
  4570. }
  4571. }
  4572. err = skb->len;
  4573. out_err:
  4574. rcu_read_unlock();
  4575. cb->args[0] = idx;
  4576. return err;
  4577. }
  4578. static inline size_t bridge_nlmsg_size(void)
  4579. {
  4580. return NLMSG_ALIGN(sizeof(struct ifinfomsg))
  4581. + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
  4582. + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
  4583. + nla_total_size(sizeof(u32)) /* IFLA_MASTER */
  4584. + nla_total_size(sizeof(u32)) /* IFLA_MTU */
  4585. + nla_total_size(sizeof(u32)) /* IFLA_LINK */
  4586. + nla_total_size(sizeof(u32)) /* IFLA_OPERSTATE */
  4587. + nla_total_size(sizeof(u8)) /* IFLA_PROTINFO */
  4588. + nla_total_size(sizeof(struct nlattr)) /* IFLA_AF_SPEC */
  4589. + nla_total_size(sizeof(u16)) /* IFLA_BRIDGE_FLAGS */
  4590. + nla_total_size(sizeof(u16)); /* IFLA_BRIDGE_MODE */
  4591. }
  4592. static int rtnl_bridge_notify(struct net_device *dev)
  4593. {
  4594. struct net *net = dev_net(dev);
  4595. struct sk_buff *skb;
  4596. int err = -EOPNOTSUPP;
  4597. if (!dev->netdev_ops->ndo_bridge_getlink)
  4598. return 0;
  4599. skb = nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC);
  4600. if (!skb) {
  4601. err = -ENOMEM;
  4602. goto errout;
  4603. }
  4604. err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0, 0);
  4605. if (err < 0)
  4606. goto errout;
  4607. /* Notification info is only filled for bridge ports, not the bridge
  4608. * device itself. Therefore, a zero notification length is valid and
  4609. * should not result in an error.
  4610. */
  4611. if (!skb->len)
  4612. goto errout;
  4613. rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
  4614. return 0;
  4615. errout:
  4616. WARN_ON(err == -EMSGSIZE);
  4617. kfree_skb(skb);
  4618. if (err)
  4619. rtnl_set_sk_err(net, RTNLGRP_LINK, err);
  4620. return err;
  4621. }
  4622. static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  4623. struct netlink_ext_ack *extack)
  4624. {
  4625. struct net *net = sock_net(skb->sk);
  4626. struct ifinfomsg *ifm;
  4627. struct net_device *dev;
  4628. struct nlattr *br_spec, *attr, *br_flags_attr = NULL;
  4629. int rem, err = -EOPNOTSUPP;
  4630. u16 flags = 0;
  4631. if (nlmsg_len(nlh) < sizeof(*ifm))
  4632. return -EINVAL;
  4633. ifm = nlmsg_data(nlh);
  4634. if (ifm->ifi_family != AF_BRIDGE)
  4635. return -EPFNOSUPPORT;
  4636. dev = __dev_get_by_index(net, ifm->ifi_index);
  4637. if (!dev) {
  4638. NL_SET_ERR_MSG(extack, "unknown ifindex");
  4639. return -ENODEV;
  4640. }
  4641. br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
  4642. if (br_spec) {
  4643. nla_for_each_nested(attr, br_spec, rem) {
  4644. if (nla_type(attr) == IFLA_BRIDGE_FLAGS && !br_flags_attr) {
  4645. if (nla_len(attr) < sizeof(flags))
  4646. return -EINVAL;
  4647. br_flags_attr = attr;
  4648. flags = nla_get_u16(attr);
  4649. }
  4650. if (nla_type(attr) == IFLA_BRIDGE_MODE) {
  4651. if (nla_len(attr) < sizeof(u16))
  4652. return -EINVAL;
  4653. }
  4654. }
  4655. }
  4656. if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
  4657. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  4658. if (!br_dev || !br_dev->netdev_ops->ndo_bridge_setlink) {
  4659. err = -EOPNOTSUPP;
  4660. goto out;
  4661. }
  4662. err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags,
  4663. extack);
  4664. if (err)
  4665. goto out;
  4666. flags &= ~BRIDGE_FLAGS_MASTER;
  4667. }
  4668. if ((flags & BRIDGE_FLAGS_SELF)) {
  4669. if (!dev->netdev_ops->ndo_bridge_setlink)
  4670. err = -EOPNOTSUPP;
  4671. else
  4672. err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh,
  4673. flags,
  4674. extack);
  4675. if (!err) {
  4676. flags &= ~BRIDGE_FLAGS_SELF;
  4677. /* Generate event to notify upper layer of bridge
  4678. * change
  4679. */
  4680. err = rtnl_bridge_notify(dev);
  4681. }
  4682. }
  4683. if (br_flags_attr)
  4684. memcpy(nla_data(br_flags_attr), &flags, sizeof(flags));
  4685. out:
  4686. return err;
  4687. }
  4688. static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
  4689. struct netlink_ext_ack *extack)
  4690. {
  4691. struct net *net = sock_net(skb->sk);
  4692. struct ifinfomsg *ifm;
  4693. struct net_device *dev;
  4694. struct nlattr *br_spec, *attr = NULL;
  4695. int rem, err = -EOPNOTSUPP;
  4696. u16 flags = 0;
  4697. bool have_flags = false;
  4698. if (nlmsg_len(nlh) < sizeof(*ifm))
  4699. return -EINVAL;
  4700. ifm = nlmsg_data(nlh);
  4701. if (ifm->ifi_family != AF_BRIDGE)
  4702. return -EPFNOSUPPORT;
  4703. dev = __dev_get_by_index(net, ifm->ifi_index);
  4704. if (!dev) {
  4705. NL_SET_ERR_MSG(extack, "unknown ifindex");
  4706. return -ENODEV;
  4707. }
  4708. br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
  4709. if (br_spec) {
  4710. nla_for_each_nested_type(attr, IFLA_BRIDGE_FLAGS, br_spec,
  4711. rem) {
  4712. if (nla_len(attr) < sizeof(flags))
  4713. return -EINVAL;
  4714. have_flags = true;
  4715. flags = nla_get_u16(attr);
  4716. break;
  4717. }
  4718. }
  4719. if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
  4720. struct net_device *br_dev = netdev_master_upper_dev_get(dev);
  4721. if (!br_dev || !br_dev->netdev_ops->ndo_bridge_dellink) {
  4722. err = -EOPNOTSUPP;
  4723. goto out;
  4724. }
  4725. err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags);
  4726. if (err)
  4727. goto out;
  4728. flags &= ~BRIDGE_FLAGS_MASTER;
  4729. }
  4730. if ((flags & BRIDGE_FLAGS_SELF)) {
  4731. if (!dev->netdev_ops->ndo_bridge_dellink)
  4732. err = -EOPNOTSUPP;
  4733. else
  4734. err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh,
  4735. flags);
  4736. if (!err) {
  4737. flags &= ~BRIDGE_FLAGS_SELF;
  4738. /* Generate event to notify upper layer of bridge
  4739. * change
  4740. */
  4741. err = rtnl_bridge_notify(dev);
  4742. }
  4743. }
  4744. if (have_flags)
  4745. memcpy(nla_data(attr), &flags, sizeof(flags));
  4746. out:
  4747. return err;
  4748. }
  4749. static bool stats_attr_valid(unsigned int mask, int attrid, int idxattr)
  4750. {
  4751. return (mask & IFLA_STATS_FILTER_BIT(attrid)) &&
  4752. (!idxattr || idxattr == attrid);
  4753. }
  4754. static bool
  4755. rtnl_offload_xstats_have_ndo(const struct net_device *dev, int attr_id)
  4756. {
  4757. return dev->netdev_ops &&
  4758. dev->netdev_ops->ndo_has_offload_stats &&
  4759. dev->netdev_ops->ndo_get_offload_stats &&
  4760. dev->netdev_ops->ndo_has_offload_stats(dev, attr_id);
  4761. }
  4762. static unsigned int
  4763. rtnl_offload_xstats_get_size_ndo(const struct net_device *dev, int attr_id)
  4764. {
  4765. return rtnl_offload_xstats_have_ndo(dev, attr_id) ?
  4766. sizeof(struct rtnl_link_stats64) : 0;
  4767. }
  4768. static int
  4769. rtnl_offload_xstats_fill_ndo(struct net_device *dev, int attr_id,
  4770. struct sk_buff *skb)
  4771. {
  4772. unsigned int size = rtnl_offload_xstats_get_size_ndo(dev, attr_id);
  4773. struct nlattr *attr = NULL;
  4774. void *attr_data;
  4775. int err;
  4776. if (!size)
  4777. return -ENODATA;
  4778. attr = nla_reserve_64bit(skb, attr_id, size,
  4779. IFLA_OFFLOAD_XSTATS_UNSPEC);
  4780. if (!attr)
  4781. return -EMSGSIZE;
  4782. attr_data = nla_data(attr);
  4783. memset(attr_data, 0, size);
  4784. err = dev->netdev_ops->ndo_get_offload_stats(attr_id, dev, attr_data);
  4785. if (err)
  4786. return err;
  4787. return 0;
  4788. }
  4789. static unsigned int
  4790. rtnl_offload_xstats_get_size_stats(const struct net_device *dev,
  4791. enum netdev_offload_xstats_type type)
  4792. {
  4793. bool enabled = netdev_offload_xstats_enabled(dev, type);
  4794. return enabled ? sizeof(struct rtnl_hw_stats64) : 0;
  4795. }
  4796. struct rtnl_offload_xstats_request_used {
  4797. bool request;
  4798. bool used;
  4799. };
  4800. static int
  4801. rtnl_offload_xstats_get_stats(struct net_device *dev,
  4802. enum netdev_offload_xstats_type type,
  4803. struct rtnl_offload_xstats_request_used *ru,
  4804. struct rtnl_hw_stats64 *stats,
  4805. struct netlink_ext_ack *extack)
  4806. {
  4807. bool request;
  4808. bool used;
  4809. int err;
  4810. request = netdev_offload_xstats_enabled(dev, type);
  4811. if (!request) {
  4812. used = false;
  4813. goto out;
  4814. }
  4815. err = netdev_offload_xstats_get(dev, type, stats, &used, extack);
  4816. if (err)
  4817. return err;
  4818. out:
  4819. if (ru) {
  4820. ru->request = request;
  4821. ru->used = used;
  4822. }
  4823. return 0;
  4824. }
  4825. static int
  4826. rtnl_offload_xstats_fill_hw_s_info_one(struct sk_buff *skb, int attr_id,
  4827. struct rtnl_offload_xstats_request_used *ru)
  4828. {
  4829. struct nlattr *nest;
  4830. nest = nla_nest_start(skb, attr_id);
  4831. if (!nest)
  4832. return -EMSGSIZE;
  4833. if (nla_put_u8(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST, ru->request))
  4834. goto nla_put_failure;
  4835. if (nla_put_u8(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED, ru->used))
  4836. goto nla_put_failure;
  4837. nla_nest_end(skb, nest);
  4838. return 0;
  4839. nla_put_failure:
  4840. nla_nest_cancel(skb, nest);
  4841. return -EMSGSIZE;
  4842. }
  4843. static int
  4844. rtnl_offload_xstats_fill_hw_s_info(struct sk_buff *skb, struct net_device *dev,
  4845. struct netlink_ext_ack *extack)
  4846. {
  4847. enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
  4848. struct rtnl_offload_xstats_request_used ru_l3;
  4849. struct nlattr *nest;
  4850. int err;
  4851. err = rtnl_offload_xstats_get_stats(dev, t_l3, &ru_l3, NULL, extack);
  4852. if (err)
  4853. return err;
  4854. nest = nla_nest_start(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO);
  4855. if (!nest)
  4856. return -EMSGSIZE;
  4857. if (rtnl_offload_xstats_fill_hw_s_info_one(skb,
  4858. IFLA_OFFLOAD_XSTATS_L3_STATS,
  4859. &ru_l3))
  4860. goto nla_put_failure;
  4861. nla_nest_end(skb, nest);
  4862. return 0;
  4863. nla_put_failure:
  4864. nla_nest_cancel(skb, nest);
  4865. return -EMSGSIZE;
  4866. }
  4867. static int rtnl_offload_xstats_fill(struct sk_buff *skb, struct net_device *dev,
  4868. int *prividx, u32 off_filter_mask,
  4869. struct netlink_ext_ack *extack)
  4870. {
  4871. enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
  4872. int attr_id_hw_s_info = IFLA_OFFLOAD_XSTATS_HW_S_INFO;
  4873. int attr_id_l3_stats = IFLA_OFFLOAD_XSTATS_L3_STATS;
  4874. int attr_id_cpu_hit = IFLA_OFFLOAD_XSTATS_CPU_HIT;
  4875. bool have_data = false;
  4876. int err;
  4877. if (*prividx <= attr_id_cpu_hit &&
  4878. (off_filter_mask &
  4879. IFLA_STATS_FILTER_BIT(attr_id_cpu_hit))) {
  4880. err = rtnl_offload_xstats_fill_ndo(dev, attr_id_cpu_hit, skb);
  4881. if (!err) {
  4882. have_data = true;
  4883. } else if (err != -ENODATA) {
  4884. *prividx = attr_id_cpu_hit;
  4885. return err;
  4886. }
  4887. }
  4888. if (*prividx <= attr_id_hw_s_info &&
  4889. (off_filter_mask & IFLA_STATS_FILTER_BIT(attr_id_hw_s_info))) {
  4890. *prividx = attr_id_hw_s_info;
  4891. err = rtnl_offload_xstats_fill_hw_s_info(skb, dev, extack);
  4892. if (err)
  4893. return err;
  4894. have_data = true;
  4895. *prividx = 0;
  4896. }
  4897. if (*prividx <= attr_id_l3_stats &&
  4898. (off_filter_mask & IFLA_STATS_FILTER_BIT(attr_id_l3_stats))) {
  4899. unsigned int size_l3;
  4900. struct nlattr *attr;
  4901. *prividx = attr_id_l3_stats;
  4902. size_l3 = rtnl_offload_xstats_get_size_stats(dev, t_l3);
  4903. if (!size_l3)
  4904. goto skip_l3_stats;
  4905. attr = nla_reserve_64bit(skb, attr_id_l3_stats, size_l3,
  4906. IFLA_OFFLOAD_XSTATS_UNSPEC);
  4907. if (!attr)
  4908. return -EMSGSIZE;
  4909. err = rtnl_offload_xstats_get_stats(dev, t_l3, NULL,
  4910. nla_data(attr), extack);
  4911. if (err)
  4912. return err;
  4913. have_data = true;
  4914. skip_l3_stats:
  4915. *prividx = 0;
  4916. }
  4917. if (!have_data)
  4918. return -ENODATA;
  4919. *prividx = 0;
  4920. return 0;
  4921. }
  4922. static unsigned int
  4923. rtnl_offload_xstats_get_size_hw_s_info_one(const struct net_device *dev,
  4924. enum netdev_offload_xstats_type type)
  4925. {
  4926. return nla_total_size(0) +
  4927. /* IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST */
  4928. nla_total_size(sizeof(u8)) +
  4929. /* IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED */
  4930. nla_total_size(sizeof(u8)) +
  4931. 0;
  4932. }
  4933. static unsigned int
  4934. rtnl_offload_xstats_get_size_hw_s_info(const struct net_device *dev)
  4935. {
  4936. enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
  4937. return nla_total_size(0) +
  4938. /* IFLA_OFFLOAD_XSTATS_L3_STATS */
  4939. rtnl_offload_xstats_get_size_hw_s_info_one(dev, t_l3) +
  4940. 0;
  4941. }
  4942. static int rtnl_offload_xstats_get_size(const struct net_device *dev,
  4943. u32 off_filter_mask)
  4944. {
  4945. enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
  4946. int attr_id_cpu_hit = IFLA_OFFLOAD_XSTATS_CPU_HIT;
  4947. int nla_size = 0;
  4948. int size;
  4949. if (off_filter_mask &
  4950. IFLA_STATS_FILTER_BIT(attr_id_cpu_hit)) {
  4951. size = rtnl_offload_xstats_get_size_ndo(dev, attr_id_cpu_hit);
  4952. nla_size += nla_total_size_64bit(size);
  4953. }
  4954. if (off_filter_mask &
  4955. IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO))
  4956. nla_size += rtnl_offload_xstats_get_size_hw_s_info(dev);
  4957. if (off_filter_mask &
  4958. IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_L3_STATS)) {
  4959. size = rtnl_offload_xstats_get_size_stats(dev, t_l3);
  4960. nla_size += nla_total_size_64bit(size);
  4961. }
  4962. if (nla_size != 0)
  4963. nla_size += nla_total_size(0);
  4964. return nla_size;
  4965. }
  4966. struct rtnl_stats_dump_filters {
  4967. /* mask[0] filters outer attributes. Then individual nests have their
  4968. * filtering mask at the index of the nested attribute.
  4969. */
  4970. u32 mask[IFLA_STATS_MAX + 1];
  4971. };
  4972. static int rtnl_fill_statsinfo(struct sk_buff *skb, struct net_device *dev,
  4973. int type, u32 pid, u32 seq, u32 change,
  4974. unsigned int flags,
  4975. const struct rtnl_stats_dump_filters *filters,
  4976. int *idxattr, int *prividx,
  4977. struct netlink_ext_ack *extack)
  4978. {
  4979. unsigned int filter_mask = filters->mask[0];
  4980. struct if_stats_msg *ifsm;
  4981. struct nlmsghdr *nlh;
  4982. struct nlattr *attr;
  4983. int s_prividx = *prividx;
  4984. int err;
  4985. ASSERT_RTNL();
  4986. nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags);
  4987. if (!nlh)
  4988. return -EMSGSIZE;
  4989. ifsm = nlmsg_data(nlh);
  4990. ifsm->family = PF_UNSPEC;
  4991. ifsm->pad1 = 0;
  4992. ifsm->pad2 = 0;
  4993. ifsm->ifindex = dev->ifindex;
  4994. ifsm->filter_mask = filter_mask;
  4995. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, *idxattr)) {
  4996. struct rtnl_link_stats64 *sp;
  4997. attr = nla_reserve_64bit(skb, IFLA_STATS_LINK_64,
  4998. sizeof(struct rtnl_link_stats64),
  4999. IFLA_STATS_UNSPEC);
  5000. if (!attr) {
  5001. err = -EMSGSIZE;
  5002. goto nla_put_failure;
  5003. }
  5004. sp = nla_data(attr);
  5005. dev_get_stats(dev, sp);
  5006. }
  5007. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, *idxattr)) {
  5008. const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
  5009. if (ops && ops->fill_linkxstats) {
  5010. *idxattr = IFLA_STATS_LINK_XSTATS;
  5011. attr = nla_nest_start_noflag(skb,
  5012. IFLA_STATS_LINK_XSTATS);
  5013. if (!attr) {
  5014. err = -EMSGSIZE;
  5015. goto nla_put_failure;
  5016. }
  5017. err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
  5018. nla_nest_end(skb, attr);
  5019. if (err)
  5020. goto nla_put_failure;
  5021. *idxattr = 0;
  5022. }
  5023. }
  5024. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE,
  5025. *idxattr)) {
  5026. const struct rtnl_link_ops *ops = NULL;
  5027. const struct net_device *master;
  5028. master = netdev_master_upper_dev_get(dev);
  5029. if (master)
  5030. ops = master->rtnl_link_ops;
  5031. if (ops && ops->fill_linkxstats) {
  5032. *idxattr = IFLA_STATS_LINK_XSTATS_SLAVE;
  5033. attr = nla_nest_start_noflag(skb,
  5034. IFLA_STATS_LINK_XSTATS_SLAVE);
  5035. if (!attr) {
  5036. err = -EMSGSIZE;
  5037. goto nla_put_failure;
  5038. }
  5039. err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
  5040. nla_nest_end(skb, attr);
  5041. if (err)
  5042. goto nla_put_failure;
  5043. *idxattr = 0;
  5044. }
  5045. }
  5046. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS,
  5047. *idxattr)) {
  5048. u32 off_filter_mask;
  5049. off_filter_mask = filters->mask[IFLA_STATS_LINK_OFFLOAD_XSTATS];
  5050. *idxattr = IFLA_STATS_LINK_OFFLOAD_XSTATS;
  5051. attr = nla_nest_start_noflag(skb,
  5052. IFLA_STATS_LINK_OFFLOAD_XSTATS);
  5053. if (!attr) {
  5054. err = -EMSGSIZE;
  5055. goto nla_put_failure;
  5056. }
  5057. err = rtnl_offload_xstats_fill(skb, dev, prividx,
  5058. off_filter_mask, extack);
  5059. if (err == -ENODATA)
  5060. nla_nest_cancel(skb, attr);
  5061. else
  5062. nla_nest_end(skb, attr);
  5063. if (err && err != -ENODATA)
  5064. goto nla_put_failure;
  5065. *idxattr = 0;
  5066. }
  5067. if (stats_attr_valid(filter_mask, IFLA_STATS_AF_SPEC, *idxattr)) {
  5068. struct rtnl_af_ops *af_ops;
  5069. *idxattr = IFLA_STATS_AF_SPEC;
  5070. attr = nla_nest_start_noflag(skb, IFLA_STATS_AF_SPEC);
  5071. if (!attr) {
  5072. err = -EMSGSIZE;
  5073. goto nla_put_failure;
  5074. }
  5075. rcu_read_lock();
  5076. list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
  5077. if (af_ops->fill_stats_af) {
  5078. struct nlattr *af;
  5079. af = nla_nest_start_noflag(skb,
  5080. af_ops->family);
  5081. if (!af) {
  5082. rcu_read_unlock();
  5083. err = -EMSGSIZE;
  5084. goto nla_put_failure;
  5085. }
  5086. err = af_ops->fill_stats_af(skb, dev);
  5087. if (err == -ENODATA) {
  5088. nla_nest_cancel(skb, af);
  5089. } else if (err < 0) {
  5090. rcu_read_unlock();
  5091. goto nla_put_failure;
  5092. }
  5093. nla_nest_end(skb, af);
  5094. }
  5095. }
  5096. rcu_read_unlock();
  5097. nla_nest_end(skb, attr);
  5098. *idxattr = 0;
  5099. }
  5100. nlmsg_end(skb, nlh);
  5101. return 0;
  5102. nla_put_failure:
  5103. /* not a multi message or no progress mean a real error */
  5104. if (!(flags & NLM_F_MULTI) || s_prividx == *prividx)
  5105. nlmsg_cancel(skb, nlh);
  5106. else
  5107. nlmsg_end(skb, nlh);
  5108. return err;
  5109. }
  5110. static size_t if_nlmsg_stats_size(const struct net_device *dev,
  5111. const struct rtnl_stats_dump_filters *filters)
  5112. {
  5113. size_t size = NLMSG_ALIGN(sizeof(struct if_stats_msg));
  5114. unsigned int filter_mask = filters->mask[0];
  5115. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, 0))
  5116. size += nla_total_size_64bit(sizeof(struct rtnl_link_stats64));
  5117. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, 0)) {
  5118. const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
  5119. int attr = IFLA_STATS_LINK_XSTATS;
  5120. if (ops && ops->get_linkxstats_size) {
  5121. size += nla_total_size(ops->get_linkxstats_size(dev,
  5122. attr));
  5123. /* for IFLA_STATS_LINK_XSTATS */
  5124. size += nla_total_size(0);
  5125. }
  5126. }
  5127. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE, 0)) {
  5128. struct net_device *_dev = (struct net_device *)dev;
  5129. const struct rtnl_link_ops *ops = NULL;
  5130. const struct net_device *master;
  5131. /* netdev_master_upper_dev_get can't take const */
  5132. master = netdev_master_upper_dev_get(_dev);
  5133. if (master)
  5134. ops = master->rtnl_link_ops;
  5135. if (ops && ops->get_linkxstats_size) {
  5136. int attr = IFLA_STATS_LINK_XSTATS_SLAVE;
  5137. size += nla_total_size(ops->get_linkxstats_size(dev,
  5138. attr));
  5139. /* for IFLA_STATS_LINK_XSTATS_SLAVE */
  5140. size += nla_total_size(0);
  5141. }
  5142. }
  5143. if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS, 0)) {
  5144. u32 off_filter_mask;
  5145. off_filter_mask = filters->mask[IFLA_STATS_LINK_OFFLOAD_XSTATS];
  5146. size += rtnl_offload_xstats_get_size(dev, off_filter_mask);
  5147. }
  5148. if (stats_attr_valid(filter_mask, IFLA_STATS_AF_SPEC, 0)) {
  5149. struct rtnl_af_ops *af_ops;
  5150. /* for IFLA_STATS_AF_SPEC */
  5151. size += nla_total_size(0);
  5152. rcu_read_lock();
  5153. list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
  5154. if (af_ops->get_stats_af_size) {
  5155. size += nla_total_size(
  5156. af_ops->get_stats_af_size(dev));
  5157. /* for AF_* */
  5158. size += nla_total_size(0);
  5159. }
  5160. }
  5161. rcu_read_unlock();
  5162. }
  5163. return size;
  5164. }
  5165. #define RTNL_STATS_OFFLOAD_XSTATS_VALID ((1 << __IFLA_OFFLOAD_XSTATS_MAX) - 1)
  5166. static const struct nla_policy
  5167. rtnl_stats_get_policy_filters[IFLA_STATS_MAX + 1] = {
  5168. [IFLA_STATS_LINK_OFFLOAD_XSTATS] =
  5169. NLA_POLICY_MASK(NLA_U32, RTNL_STATS_OFFLOAD_XSTATS_VALID),
  5170. };
  5171. static const struct nla_policy
  5172. rtnl_stats_get_policy[IFLA_STATS_GETSET_MAX + 1] = {
  5173. [IFLA_STATS_GET_FILTERS] =
  5174. NLA_POLICY_NESTED(rtnl_stats_get_policy_filters),
  5175. };
  5176. static const struct nla_policy
  5177. ifla_stats_set_policy[IFLA_STATS_GETSET_MAX + 1] = {
  5178. [IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS] = NLA_POLICY_MAX(NLA_U8, 1),
  5179. };
  5180. static int rtnl_stats_get_parse_filters(struct nlattr *ifla_filters,
  5181. struct rtnl_stats_dump_filters *filters,
  5182. struct netlink_ext_ack *extack)
  5183. {
  5184. struct nlattr *tb[IFLA_STATS_MAX + 1];
  5185. int err;
  5186. int at;
  5187. err = nla_parse_nested(tb, IFLA_STATS_MAX, ifla_filters,
  5188. rtnl_stats_get_policy_filters, extack);
  5189. if (err < 0)
  5190. return err;
  5191. for (at = 1; at <= IFLA_STATS_MAX; at++) {
  5192. if (tb[at]) {
  5193. if (!(filters->mask[0] & IFLA_STATS_FILTER_BIT(at))) {
  5194. NL_SET_ERR_MSG(extack, "Filtered attribute not enabled in filter_mask");
  5195. return -EINVAL;
  5196. }
  5197. filters->mask[at] = nla_get_u32(tb[at]);
  5198. }
  5199. }
  5200. return 0;
  5201. }
  5202. static int rtnl_stats_get_parse(const struct nlmsghdr *nlh,
  5203. u32 filter_mask,
  5204. struct rtnl_stats_dump_filters *filters,
  5205. struct netlink_ext_ack *extack)
  5206. {
  5207. struct nlattr *tb[IFLA_STATS_GETSET_MAX + 1];
  5208. int err;
  5209. int i;
  5210. filters->mask[0] = filter_mask;
  5211. for (i = 1; i < ARRAY_SIZE(filters->mask); i++)
  5212. filters->mask[i] = -1U;
  5213. err = nlmsg_parse(nlh, sizeof(struct if_stats_msg), tb,
  5214. IFLA_STATS_GETSET_MAX, rtnl_stats_get_policy, extack);
  5215. if (err < 0)
  5216. return err;
  5217. if (tb[IFLA_STATS_GET_FILTERS]) {
  5218. err = rtnl_stats_get_parse_filters(tb[IFLA_STATS_GET_FILTERS],
  5219. filters, extack);
  5220. if (err)
  5221. return err;
  5222. }
  5223. return 0;
  5224. }
  5225. static int rtnl_valid_stats_req(const struct nlmsghdr *nlh, bool strict_check,
  5226. bool is_dump, struct netlink_ext_ack *extack)
  5227. {
  5228. struct if_stats_msg *ifsm;
  5229. ifsm = nlmsg_payload(nlh, sizeof(*ifsm));
  5230. if (!ifsm) {
  5231. NL_SET_ERR_MSG(extack, "Invalid header for stats dump");
  5232. return -EINVAL;
  5233. }
  5234. if (!strict_check)
  5235. return 0;
  5236. /* only requests using strict checks can pass data to influence
  5237. * the dump. The legacy exception is filter_mask.
  5238. */
  5239. if (ifsm->pad1 || ifsm->pad2 || (is_dump && ifsm->ifindex)) {
  5240. NL_SET_ERR_MSG(extack, "Invalid values in header for stats dump request");
  5241. return -EINVAL;
  5242. }
  5243. if (ifsm->filter_mask >= IFLA_STATS_FILTER_BIT(IFLA_STATS_MAX + 1)) {
  5244. NL_SET_ERR_MSG(extack, "Invalid stats requested through filter mask");
  5245. return -EINVAL;
  5246. }
  5247. return 0;
  5248. }
  5249. static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh,
  5250. struct netlink_ext_ack *extack)
  5251. {
  5252. struct rtnl_stats_dump_filters filters;
  5253. struct net *net = sock_net(skb->sk);
  5254. struct net_device *dev = NULL;
  5255. int idxattr = 0, prividx = 0;
  5256. struct if_stats_msg *ifsm;
  5257. struct sk_buff *nskb;
  5258. int err;
  5259. err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb),
  5260. false, extack);
  5261. if (err)
  5262. return err;
  5263. ifsm = nlmsg_data(nlh);
  5264. if (ifsm->ifindex > 0)
  5265. dev = __dev_get_by_index(net, ifsm->ifindex);
  5266. else
  5267. return -EINVAL;
  5268. if (!dev)
  5269. return -ENODEV;
  5270. if (!ifsm->filter_mask) {
  5271. NL_SET_ERR_MSG(extack, "Filter mask must be set for stats get");
  5272. return -EINVAL;
  5273. }
  5274. err = rtnl_stats_get_parse(nlh, ifsm->filter_mask, &filters, extack);
  5275. if (err)
  5276. return err;
  5277. nskb = nlmsg_new(if_nlmsg_stats_size(dev, &filters), GFP_KERNEL);
  5278. if (!nskb)
  5279. return -ENOBUFS;
  5280. err = rtnl_fill_statsinfo(nskb, dev, RTM_NEWSTATS,
  5281. NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0,
  5282. 0, &filters, &idxattr, &prividx, extack);
  5283. if (err < 0) {
  5284. /* -EMSGSIZE implies BUG in if_nlmsg_stats_size */
  5285. WARN_ON(err == -EMSGSIZE);
  5286. kfree_skb(nskb);
  5287. } else {
  5288. err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
  5289. }
  5290. return err;
  5291. }
  5292. static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
  5293. {
  5294. struct netlink_ext_ack *extack = cb->extack;
  5295. struct rtnl_stats_dump_filters filters;
  5296. struct net *net = sock_net(skb->sk);
  5297. unsigned int flags = NLM_F_MULTI;
  5298. struct if_stats_msg *ifsm;
  5299. struct {
  5300. unsigned long ifindex;
  5301. int idxattr;
  5302. int prividx;
  5303. } *ctx = (void *)cb->ctx;
  5304. struct net_device *dev;
  5305. int err;
  5306. cb->seq = net->dev_base_seq;
  5307. err = rtnl_valid_stats_req(cb->nlh, cb->strict_check, true, extack);
  5308. if (err)
  5309. return err;
  5310. ifsm = nlmsg_data(cb->nlh);
  5311. if (!ifsm->filter_mask) {
  5312. NL_SET_ERR_MSG(extack, "Filter mask must be set for stats dump");
  5313. return -EINVAL;
  5314. }
  5315. err = rtnl_stats_get_parse(cb->nlh, ifsm->filter_mask, &filters,
  5316. extack);
  5317. if (err)
  5318. return err;
  5319. for_each_netdev_dump(net, dev, ctx->ifindex) {
  5320. err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS,
  5321. NETLINK_CB(cb->skb).portid,
  5322. cb->nlh->nlmsg_seq, 0,
  5323. flags, &filters,
  5324. &ctx->idxattr, &ctx->prividx,
  5325. extack);
  5326. /* If we ran out of room on the first message,
  5327. * we're in trouble.
  5328. */
  5329. WARN_ON((err == -EMSGSIZE) && (skb->len == 0));
  5330. if (err < 0)
  5331. break;
  5332. ctx->prividx = 0;
  5333. ctx->idxattr = 0;
  5334. nl_dump_check_consistent(cb, nlmsg_hdr(skb));
  5335. }
  5336. return err;
  5337. }
  5338. void rtnl_offload_xstats_notify(struct net_device *dev)
  5339. {
  5340. struct rtnl_stats_dump_filters response_filters = {};
  5341. struct net *net = dev_net(dev);
  5342. int idxattr = 0, prividx = 0;
  5343. struct sk_buff *skb;
  5344. int err = -ENOBUFS;
  5345. ASSERT_RTNL();
  5346. response_filters.mask[0] |=
  5347. IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS);
  5348. response_filters.mask[IFLA_STATS_LINK_OFFLOAD_XSTATS] |=
  5349. IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO);
  5350. skb = nlmsg_new(if_nlmsg_stats_size(dev, &response_filters),
  5351. GFP_KERNEL);
  5352. if (!skb)
  5353. goto errout;
  5354. err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS, 0, 0, 0, 0,
  5355. &response_filters, &idxattr, &prividx, NULL);
  5356. if (err < 0) {
  5357. kfree_skb(skb);
  5358. goto errout;
  5359. }
  5360. rtnl_notify(skb, net, 0, RTNLGRP_STATS, NULL, GFP_KERNEL);
  5361. return;
  5362. errout:
  5363. rtnl_set_sk_err(net, RTNLGRP_STATS, err);
  5364. }
  5365. EXPORT_SYMBOL(rtnl_offload_xstats_notify);
  5366. static int rtnl_stats_set(struct sk_buff *skb, struct nlmsghdr *nlh,
  5367. struct netlink_ext_ack *extack)
  5368. {
  5369. enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
  5370. struct rtnl_stats_dump_filters response_filters = {};
  5371. struct nlattr *tb[IFLA_STATS_GETSET_MAX + 1];
  5372. struct net *net = sock_net(skb->sk);
  5373. struct net_device *dev = NULL;
  5374. struct if_stats_msg *ifsm;
  5375. bool notify = false;
  5376. int err;
  5377. err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb),
  5378. false, extack);
  5379. if (err)
  5380. return err;
  5381. ifsm = nlmsg_data(nlh);
  5382. if (ifsm->family != AF_UNSPEC) {
  5383. NL_SET_ERR_MSG(extack, "Address family should be AF_UNSPEC");
  5384. return -EINVAL;
  5385. }
  5386. if (ifsm->ifindex > 0)
  5387. dev = __dev_get_by_index(net, ifsm->ifindex);
  5388. else
  5389. return -EINVAL;
  5390. if (!dev)
  5391. return -ENODEV;
  5392. if (ifsm->filter_mask) {
  5393. NL_SET_ERR_MSG(extack, "Filter mask must be 0 for stats set");
  5394. return -EINVAL;
  5395. }
  5396. err = nlmsg_parse(nlh, sizeof(*ifsm), tb, IFLA_STATS_GETSET_MAX,
  5397. ifla_stats_set_policy, extack);
  5398. if (err < 0)
  5399. return err;
  5400. if (tb[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS]) {
  5401. u8 req = nla_get_u8(tb[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS]);
  5402. if (req)
  5403. err = netdev_offload_xstats_enable(dev, t_l3, extack);
  5404. else
  5405. err = netdev_offload_xstats_disable(dev, t_l3);
  5406. if (!err)
  5407. notify = true;
  5408. else if (err != -EALREADY)
  5409. return err;
  5410. response_filters.mask[0] |=
  5411. IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS);
  5412. response_filters.mask[IFLA_STATS_LINK_OFFLOAD_XSTATS] |=
  5413. IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO);
  5414. }
  5415. if (notify)
  5416. rtnl_offload_xstats_notify(dev);
  5417. return 0;
  5418. }
  5419. static int rtnl_mdb_valid_dump_req(const struct nlmsghdr *nlh,
  5420. struct netlink_ext_ack *extack)
  5421. {
  5422. struct br_port_msg *bpm;
  5423. bpm = nlmsg_payload(nlh, sizeof(*bpm));
  5424. if (!bpm) {
  5425. NL_SET_ERR_MSG(extack, "Invalid header for mdb dump request");
  5426. return -EINVAL;
  5427. }
  5428. if (bpm->ifindex) {
  5429. NL_SET_ERR_MSG(extack, "Filtering by device index is not supported for mdb dump request");
  5430. return -EINVAL;
  5431. }
  5432. if (nlmsg_attrlen(nlh, sizeof(*bpm))) {
  5433. NL_SET_ERR_MSG(extack, "Invalid data after header in mdb dump request");
  5434. return -EINVAL;
  5435. }
  5436. return 0;
  5437. }
  5438. struct rtnl_mdb_dump_ctx {
  5439. long idx;
  5440. };
  5441. static int rtnl_mdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
  5442. {
  5443. struct rtnl_mdb_dump_ctx *ctx = (void *)cb->ctx;
  5444. struct net *net = sock_net(skb->sk);
  5445. struct net_device *dev;
  5446. int idx, s_idx;
  5447. int err;
  5448. NL_ASSERT_CTX_FITS(struct rtnl_mdb_dump_ctx);
  5449. if (cb->strict_check) {
  5450. err = rtnl_mdb_valid_dump_req(cb->nlh, cb->extack);
  5451. if (err)
  5452. return err;
  5453. }
  5454. s_idx = ctx->idx;
  5455. idx = 0;
  5456. for_each_netdev(net, dev) {
  5457. if (idx < s_idx)
  5458. goto skip;
  5459. if (!dev->netdev_ops->ndo_mdb_dump)
  5460. goto skip;
  5461. err = dev->netdev_ops->ndo_mdb_dump(dev, skb, cb);
  5462. if (err == -EMSGSIZE)
  5463. goto out;
  5464. /* Moving on to next device, reset markers and sequence
  5465. * counters since they are all maintained per-device.
  5466. */
  5467. memset(cb->ctx, 0, sizeof(cb->ctx));
  5468. cb->prev_seq = 0;
  5469. cb->seq = 0;
  5470. skip:
  5471. idx++;
  5472. }
  5473. out:
  5474. ctx->idx = idx;
  5475. return skb->len;
  5476. }
  5477. static int rtnl_validate_mdb_entry_get(const struct nlattr *attr,
  5478. struct netlink_ext_ack *extack)
  5479. {
  5480. struct br_mdb_entry *entry = nla_data(attr);
  5481. if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
  5482. NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
  5483. return -EINVAL;
  5484. }
  5485. if (entry->ifindex) {
  5486. NL_SET_ERR_MSG(extack, "Entry ifindex cannot be specified");
  5487. return -EINVAL;
  5488. }
  5489. if (entry->state) {
  5490. NL_SET_ERR_MSG(extack, "Entry state cannot be specified");
  5491. return -EINVAL;
  5492. }
  5493. if (entry->flags) {
  5494. NL_SET_ERR_MSG(extack, "Entry flags cannot be specified");
  5495. return -EINVAL;
  5496. }
  5497. if (entry->vid >= VLAN_VID_MASK) {
  5498. NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
  5499. return -EINVAL;
  5500. }
  5501. if (entry->addr.proto != htons(ETH_P_IP) &&
  5502. entry->addr.proto != htons(ETH_P_IPV6) &&
  5503. entry->addr.proto != 0) {
  5504. NL_SET_ERR_MSG(extack, "Unknown entry protocol");
  5505. return -EINVAL;
  5506. }
  5507. return 0;
  5508. }
  5509. static const struct nla_policy mdba_get_policy[MDBA_GET_ENTRY_MAX + 1] = {
  5510. [MDBA_GET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
  5511. rtnl_validate_mdb_entry_get,
  5512. sizeof(struct br_mdb_entry)),
  5513. [MDBA_GET_ENTRY_ATTRS] = { .type = NLA_NESTED },
  5514. };
  5515. static int rtnl_mdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
  5516. struct netlink_ext_ack *extack)
  5517. {
  5518. struct nlattr *tb[MDBA_GET_ENTRY_MAX + 1];
  5519. struct net *net = sock_net(in_skb->sk);
  5520. struct br_port_msg *bpm;
  5521. struct net_device *dev;
  5522. int err;
  5523. err = nlmsg_parse(nlh, sizeof(struct br_port_msg), tb,
  5524. MDBA_GET_ENTRY_MAX, mdba_get_policy, extack);
  5525. if (err)
  5526. return err;
  5527. bpm = nlmsg_data(nlh);
  5528. if (!bpm->ifindex) {
  5529. NL_SET_ERR_MSG(extack, "Invalid ifindex");
  5530. return -EINVAL;
  5531. }
  5532. dev = __dev_get_by_index(net, bpm->ifindex);
  5533. if (!dev) {
  5534. NL_SET_ERR_MSG(extack, "Device doesn't exist");
  5535. return -ENODEV;
  5536. }
  5537. if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_GET_ENTRY)) {
  5538. NL_SET_ERR_MSG(extack, "Missing MDBA_GET_ENTRY attribute");
  5539. return -EINVAL;
  5540. }
  5541. if (!dev->netdev_ops->ndo_mdb_get) {
  5542. NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
  5543. return -EOPNOTSUPP;
  5544. }
  5545. return dev->netdev_ops->ndo_mdb_get(dev, tb, NETLINK_CB(in_skb).portid,
  5546. nlh->nlmsg_seq, extack);
  5547. }
  5548. static int rtnl_validate_mdb_entry(const struct nlattr *attr,
  5549. struct netlink_ext_ack *extack)
  5550. {
  5551. struct br_mdb_entry *entry = nla_data(attr);
  5552. if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
  5553. NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
  5554. return -EINVAL;
  5555. }
  5556. if (entry->ifindex == 0) {
  5557. NL_SET_ERR_MSG(extack, "Zero entry ifindex is not allowed");
  5558. return -EINVAL;
  5559. }
  5560. if (entry->addr.proto == htons(ETH_P_IP)) {
  5561. if (!ipv4_is_multicast(entry->addr.u.ip4) &&
  5562. !ipv4_is_zeronet(entry->addr.u.ip4)) {
  5563. NL_SET_ERR_MSG(extack, "IPv4 entry group address is not multicast or 0.0.0.0");
  5564. return -EINVAL;
  5565. }
  5566. if (ipv4_is_local_multicast(entry->addr.u.ip4)) {
  5567. NL_SET_ERR_MSG(extack, "IPv4 entry group address is local multicast");
  5568. return -EINVAL;
  5569. }
  5570. #if IS_ENABLED(CONFIG_IPV6)
  5571. } else if (entry->addr.proto == htons(ETH_P_IPV6)) {
  5572. if (ipv6_addr_is_ll_all_nodes(&entry->addr.u.ip6)) {
  5573. NL_SET_ERR_MSG(extack, "IPv6 entry group address is link-local all nodes");
  5574. return -EINVAL;
  5575. }
  5576. #endif
  5577. } else if (entry->addr.proto == 0) {
  5578. /* L2 mdb */
  5579. if (!is_multicast_ether_addr(entry->addr.u.mac_addr)) {
  5580. NL_SET_ERR_MSG(extack, "L2 entry group is not multicast");
  5581. return -EINVAL;
  5582. }
  5583. } else {
  5584. NL_SET_ERR_MSG(extack, "Unknown entry protocol");
  5585. return -EINVAL;
  5586. }
  5587. if (entry->state != MDB_PERMANENT && entry->state != MDB_TEMPORARY) {
  5588. NL_SET_ERR_MSG(extack, "Unknown entry state");
  5589. return -EINVAL;
  5590. }
  5591. if (entry->vid >= VLAN_VID_MASK) {
  5592. NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
  5593. return -EINVAL;
  5594. }
  5595. return 0;
  5596. }
  5597. static const struct nla_policy mdba_policy[MDBA_SET_ENTRY_MAX + 1] = {
  5598. [MDBA_SET_ENTRY_UNSPEC] = { .strict_start_type = MDBA_SET_ENTRY_ATTRS + 1 },
  5599. [MDBA_SET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
  5600. rtnl_validate_mdb_entry,
  5601. sizeof(struct br_mdb_entry)),
  5602. [MDBA_SET_ENTRY_ATTRS] = { .type = NLA_NESTED },
  5603. };
  5604. static int rtnl_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
  5605. struct netlink_ext_ack *extack)
  5606. {
  5607. struct nlattr *tb[MDBA_SET_ENTRY_MAX + 1];
  5608. struct net *net = sock_net(skb->sk);
  5609. struct br_port_msg *bpm;
  5610. struct net_device *dev;
  5611. int err;
  5612. err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb,
  5613. MDBA_SET_ENTRY_MAX, mdba_policy, extack);
  5614. if (err)
  5615. return err;
  5616. bpm = nlmsg_data(nlh);
  5617. if (!bpm->ifindex) {
  5618. NL_SET_ERR_MSG(extack, "Invalid ifindex");
  5619. return -EINVAL;
  5620. }
  5621. dev = __dev_get_by_index(net, bpm->ifindex);
  5622. if (!dev) {
  5623. NL_SET_ERR_MSG(extack, "Device doesn't exist");
  5624. return -ENODEV;
  5625. }
  5626. if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_SET_ENTRY)) {
  5627. NL_SET_ERR_MSG(extack, "Missing MDBA_SET_ENTRY attribute");
  5628. return -EINVAL;
  5629. }
  5630. if (!dev->netdev_ops->ndo_mdb_add) {
  5631. NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
  5632. return -EOPNOTSUPP;
  5633. }
  5634. return dev->netdev_ops->ndo_mdb_add(dev, tb, nlh->nlmsg_flags, extack);
  5635. }
  5636. static int rtnl_validate_mdb_entry_del_bulk(const struct nlattr *attr,
  5637. struct netlink_ext_ack *extack)
  5638. {
  5639. struct br_mdb_entry *entry = nla_data(attr);
  5640. struct br_mdb_entry zero_entry = {};
  5641. if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
  5642. NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
  5643. return -EINVAL;
  5644. }
  5645. if (entry->state != MDB_PERMANENT && entry->state != MDB_TEMPORARY) {
  5646. NL_SET_ERR_MSG(extack, "Unknown entry state");
  5647. return -EINVAL;
  5648. }
  5649. if (entry->flags) {
  5650. NL_SET_ERR_MSG(extack, "Entry flags cannot be set");
  5651. return -EINVAL;
  5652. }
  5653. if (entry->vid >= VLAN_N_VID - 1) {
  5654. NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
  5655. return -EINVAL;
  5656. }
  5657. if (memcmp(&entry->addr, &zero_entry.addr, sizeof(entry->addr))) {
  5658. NL_SET_ERR_MSG(extack, "Entry address cannot be set");
  5659. return -EINVAL;
  5660. }
  5661. return 0;
  5662. }
  5663. static const struct nla_policy mdba_del_bulk_policy[MDBA_SET_ENTRY_MAX + 1] = {
  5664. [MDBA_SET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
  5665. rtnl_validate_mdb_entry_del_bulk,
  5666. sizeof(struct br_mdb_entry)),
  5667. [MDBA_SET_ENTRY_ATTRS] = { .type = NLA_NESTED },
  5668. };
  5669. static int rtnl_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
  5670. struct netlink_ext_ack *extack)
  5671. {
  5672. bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK);
  5673. struct nlattr *tb[MDBA_SET_ENTRY_MAX + 1];
  5674. struct net *net = sock_net(skb->sk);
  5675. struct br_port_msg *bpm;
  5676. struct net_device *dev;
  5677. int err;
  5678. if (!del_bulk)
  5679. err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb,
  5680. MDBA_SET_ENTRY_MAX, mdba_policy,
  5681. extack);
  5682. else
  5683. err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX,
  5684. mdba_del_bulk_policy, extack);
  5685. if (err)
  5686. return err;
  5687. bpm = nlmsg_data(nlh);
  5688. if (!bpm->ifindex) {
  5689. NL_SET_ERR_MSG(extack, "Invalid ifindex");
  5690. return -EINVAL;
  5691. }
  5692. dev = __dev_get_by_index(net, bpm->ifindex);
  5693. if (!dev) {
  5694. NL_SET_ERR_MSG(extack, "Device doesn't exist");
  5695. return -ENODEV;
  5696. }
  5697. if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_SET_ENTRY)) {
  5698. NL_SET_ERR_MSG(extack, "Missing MDBA_SET_ENTRY attribute");
  5699. return -EINVAL;
  5700. }
  5701. if (del_bulk) {
  5702. if (!dev->netdev_ops->ndo_mdb_del_bulk) {
  5703. NL_SET_ERR_MSG(extack, "Device does not support MDB bulk deletion");
  5704. return -EOPNOTSUPP;
  5705. }
  5706. return dev->netdev_ops->ndo_mdb_del_bulk(dev, tb, extack);
  5707. }
  5708. if (!dev->netdev_ops->ndo_mdb_del) {
  5709. NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
  5710. return -EOPNOTSUPP;
  5711. }
  5712. return dev->netdev_ops->ndo_mdb_del(dev, tb, extack);
  5713. }
  5714. /* Process one rtnetlink message. */
  5715. static int rtnl_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
  5716. {
  5717. const bool needs_lock = !(cb->flags & RTNL_FLAG_DUMP_UNLOCKED);
  5718. rtnl_dumpit_func dumpit = cb->data;
  5719. int err;
  5720. /* Previous iteration have already finished, avoid calling->dumpit()
  5721. * again, it may not expect to be called after it reached the end.
  5722. */
  5723. if (!dumpit)
  5724. return 0;
  5725. if (needs_lock)
  5726. rtnl_lock();
  5727. err = dumpit(skb, cb);
  5728. if (needs_lock)
  5729. rtnl_unlock();
  5730. /* Old dump handlers used to send NLM_DONE as in a separate recvmsg().
  5731. * Some applications which parse netlink manually depend on this.
  5732. */
  5733. if (cb->flags & RTNL_FLAG_DUMP_SPLIT_NLM_DONE) {
  5734. if (err < 0 && err != -EMSGSIZE)
  5735. return err;
  5736. if (!err)
  5737. cb->data = NULL;
  5738. return skb->len;
  5739. }
  5740. return err;
  5741. }
  5742. static int rtnetlink_dump_start(struct sock *ssk, struct sk_buff *skb,
  5743. const struct nlmsghdr *nlh,
  5744. struct netlink_dump_control *control)
  5745. {
  5746. if (control->flags & RTNL_FLAG_DUMP_SPLIT_NLM_DONE ||
  5747. !(control->flags & RTNL_FLAG_DUMP_UNLOCKED)) {
  5748. WARN_ON(control->data);
  5749. control->data = control->dump;
  5750. control->dump = rtnl_dumpit;
  5751. }
  5752. return netlink_dump_start(ssk, skb, nlh, control);
  5753. }
  5754. static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
  5755. struct netlink_ext_ack *extack)
  5756. {
  5757. struct net *net = sock_net(skb->sk);
  5758. struct rtnl_link *link;
  5759. enum rtnl_kinds kind;
  5760. struct module *owner;
  5761. int err = -EOPNOTSUPP;
  5762. rtnl_doit_func doit;
  5763. unsigned int flags;
  5764. int family;
  5765. int type;
  5766. type = nlh->nlmsg_type;
  5767. if (type > RTM_MAX)
  5768. return -EOPNOTSUPP;
  5769. type -= RTM_BASE;
  5770. /* All the messages must have at least 1 byte length */
  5771. if (nlmsg_len(nlh) < sizeof(struct rtgenmsg))
  5772. return 0;
  5773. family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
  5774. kind = rtnl_msgtype_kind(type);
  5775. if (kind != RTNL_KIND_GET && !netlink_net_capable(skb, CAP_NET_ADMIN))
  5776. return -EPERM;
  5777. rcu_read_lock();
  5778. if (kind == RTNL_KIND_GET && (nlh->nlmsg_flags & NLM_F_DUMP)) {
  5779. struct sock *rtnl;
  5780. rtnl_dumpit_func dumpit;
  5781. u32 min_dump_alloc = 0;
  5782. link = rtnl_get_link(family, type);
  5783. if (!link || !link->dumpit) {
  5784. family = PF_UNSPEC;
  5785. link = rtnl_get_link(family, type);
  5786. if (!link || !link->dumpit)
  5787. goto err_unlock;
  5788. }
  5789. owner = link->owner;
  5790. dumpit = link->dumpit;
  5791. flags = link->flags;
  5792. if (type == RTM_GETLINK - RTM_BASE)
  5793. min_dump_alloc = rtnl_calcit(skb, nlh);
  5794. err = 0;
  5795. /* need to do this before rcu_read_unlock() */
  5796. if (!try_module_get(owner))
  5797. err = -EPROTONOSUPPORT;
  5798. rcu_read_unlock();
  5799. rtnl = net->rtnl;
  5800. if (err == 0) {
  5801. struct netlink_dump_control c = {
  5802. .dump = dumpit,
  5803. .min_dump_alloc = min_dump_alloc,
  5804. .module = owner,
  5805. .flags = flags,
  5806. };
  5807. err = rtnetlink_dump_start(rtnl, skb, nlh, &c);
  5808. /* netlink_dump_start() will keep a reference on
  5809. * module if dump is still in progress.
  5810. */
  5811. module_put(owner);
  5812. }
  5813. return err;
  5814. }
  5815. link = rtnl_get_link(family, type);
  5816. if (!link || !link->doit) {
  5817. family = PF_UNSPEC;
  5818. link = rtnl_get_link(PF_UNSPEC, type);
  5819. if (!link || !link->doit)
  5820. goto out_unlock;
  5821. }
  5822. owner = link->owner;
  5823. if (!try_module_get(owner)) {
  5824. err = -EPROTONOSUPPORT;
  5825. goto out_unlock;
  5826. }
  5827. flags = link->flags;
  5828. if (kind == RTNL_KIND_DEL && (nlh->nlmsg_flags & NLM_F_BULK) &&
  5829. !(flags & RTNL_FLAG_BULK_DEL_SUPPORTED)) {
  5830. NL_SET_ERR_MSG(extack, "Bulk delete is not supported");
  5831. module_put(owner);
  5832. goto err_unlock;
  5833. }
  5834. if (flags & RTNL_FLAG_DOIT_UNLOCKED) {
  5835. doit = link->doit;
  5836. rcu_read_unlock();
  5837. if (doit)
  5838. err = doit(skb, nlh, extack);
  5839. module_put(owner);
  5840. return err;
  5841. }
  5842. rcu_read_unlock();
  5843. rtnl_lock();
  5844. link = rtnl_get_link(family, type);
  5845. if (link && link->doit)
  5846. err = link->doit(skb, nlh, extack);
  5847. rtnl_unlock();
  5848. module_put(owner);
  5849. return err;
  5850. out_unlock:
  5851. rcu_read_unlock();
  5852. return err;
  5853. err_unlock:
  5854. rcu_read_unlock();
  5855. return -EOPNOTSUPP;
  5856. }
  5857. static void rtnetlink_rcv(struct sk_buff *skb)
  5858. {
  5859. netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
  5860. }
  5861. static int rtnetlink_bind(struct net *net, int group)
  5862. {
  5863. switch (group) {
  5864. case RTNLGRP_IPV4_MROUTE_R:
  5865. case RTNLGRP_IPV6_MROUTE_R:
  5866. if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
  5867. return -EPERM;
  5868. break;
  5869. }
  5870. return 0;
  5871. }
  5872. static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
  5873. {
  5874. struct net_device *dev = netdev_notifier_info_to_dev(ptr);
  5875. switch (event) {
  5876. case NETDEV_REBOOT:
  5877. case NETDEV_CHANGEMTU:
  5878. case NETDEV_CHANGEADDR:
  5879. case NETDEV_CHANGENAME:
  5880. case NETDEV_FEAT_CHANGE:
  5881. case NETDEV_BONDING_FAILOVER:
  5882. case NETDEV_POST_TYPE_CHANGE:
  5883. case NETDEV_NOTIFY_PEERS:
  5884. case NETDEV_CHANGEUPPER:
  5885. case NETDEV_RESEND_IGMP:
  5886. case NETDEV_CHANGEINFODATA:
  5887. case NETDEV_CHANGELOWERSTATE:
  5888. case NETDEV_CHANGE_TX_QUEUE_LEN:
  5889. rtmsg_ifinfo_event(RTM_NEWLINK, dev, 0, rtnl_get_event(event),
  5890. GFP_KERNEL, NULL, 0, 0, NULL);
  5891. break;
  5892. default:
  5893. break;
  5894. }
  5895. return NOTIFY_DONE;
  5896. }
  5897. static struct notifier_block rtnetlink_dev_notifier = {
  5898. .notifier_call = rtnetlink_event,
  5899. };
  5900. static int __net_init rtnetlink_net_init(struct net *net)
  5901. {
  5902. struct sock *sk;
  5903. struct netlink_kernel_cfg cfg = {
  5904. .groups = RTNLGRP_MAX,
  5905. .input = rtnetlink_rcv,
  5906. .flags = NL_CFG_F_NONROOT_RECV,
  5907. .bind = rtnetlink_bind,
  5908. };
  5909. sk = netlink_kernel_create(net, NETLINK_ROUTE, &cfg);
  5910. if (!sk)
  5911. return -ENOMEM;
  5912. net->rtnl = sk;
  5913. return 0;
  5914. }
  5915. static void __net_exit rtnetlink_net_exit(struct net *net)
  5916. {
  5917. netlink_kernel_release(net->rtnl);
  5918. net->rtnl = NULL;
  5919. }
  5920. static struct pernet_operations rtnetlink_net_ops = {
  5921. .init = rtnetlink_net_init,
  5922. .exit = rtnetlink_net_exit,
  5923. };
  5924. static const struct rtnl_msg_handler rtnetlink_rtnl_msg_handlers[] __initconst = {
  5925. {.msgtype = RTM_NEWLINK, .doit = rtnl_newlink,
  5926. .flags = RTNL_FLAG_DOIT_PERNET},
  5927. {.msgtype = RTM_DELLINK, .doit = rtnl_dellink,
  5928. .flags = RTNL_FLAG_DOIT_PERNET_WIP},
  5929. {.msgtype = RTM_GETLINK, .doit = rtnl_getlink,
  5930. .dumpit = rtnl_dump_ifinfo, .flags = RTNL_FLAG_DUMP_SPLIT_NLM_DONE},
  5931. {.msgtype = RTM_SETLINK, .doit = rtnl_setlink,
  5932. .flags = RTNL_FLAG_DOIT_PERNET_WIP},
  5933. {.msgtype = RTM_GETADDR, .dumpit = rtnl_dump_all},
  5934. {.msgtype = RTM_GETROUTE, .dumpit = rtnl_dump_all},
  5935. {.msgtype = RTM_GETNETCONF, .dumpit = rtnl_dump_all},
  5936. {.msgtype = RTM_GETSTATS, .doit = rtnl_stats_get,
  5937. .dumpit = rtnl_stats_dump},
  5938. {.msgtype = RTM_SETSTATS, .doit = rtnl_stats_set},
  5939. {.msgtype = RTM_NEWLINKPROP, .doit = rtnl_newlinkprop},
  5940. {.msgtype = RTM_DELLINKPROP, .doit = rtnl_dellinkprop},
  5941. {.protocol = PF_BRIDGE, .msgtype = RTM_GETLINK,
  5942. .dumpit = rtnl_bridge_getlink},
  5943. {.protocol = PF_BRIDGE, .msgtype = RTM_DELLINK,
  5944. .doit = rtnl_bridge_dellink},
  5945. {.protocol = PF_BRIDGE, .msgtype = RTM_SETLINK,
  5946. .doit = rtnl_bridge_setlink},
  5947. {.protocol = PF_BRIDGE, .msgtype = RTM_NEWNEIGH, .doit = rtnl_fdb_add},
  5948. {.protocol = PF_BRIDGE, .msgtype = RTM_DELNEIGH, .doit = rtnl_fdb_del,
  5949. .flags = RTNL_FLAG_BULK_DEL_SUPPORTED},
  5950. {.protocol = PF_BRIDGE, .msgtype = RTM_GETNEIGH, .doit = rtnl_fdb_get,
  5951. .dumpit = rtnl_fdb_dump},
  5952. {.protocol = PF_BRIDGE, .msgtype = RTM_NEWMDB, .doit = rtnl_mdb_add},
  5953. {.protocol = PF_BRIDGE, .msgtype = RTM_DELMDB, .doit = rtnl_mdb_del,
  5954. .flags = RTNL_FLAG_BULK_DEL_SUPPORTED},
  5955. {.protocol = PF_BRIDGE, .msgtype = RTM_GETMDB, .doit = rtnl_mdb_get,
  5956. .dumpit = rtnl_mdb_dump},
  5957. };
  5958. void __init rtnetlink_init(void)
  5959. {
  5960. if (register_pernet_subsys(&rtnetlink_net_ops))
  5961. panic("rtnetlink_init: cannot initialize rtnetlink\n");
  5962. register_netdevice_notifier(&rtnetlink_dev_notifier);
  5963. rtnl_register_many(rtnetlink_rtnl_msg_handlers);
  5964. }