VULN_CHECK_I913V6 Gi [ddlZddlmZddlZddlZddlZddlmZddl Z ddl m Z m Z ejjZGddeZy)N)commands)PopenPIPEceZdZdZdZdZdZedZe dZ e dZ e dZ d Z d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZej@fdZ!dZ"dZ#dZ$ej@fdZ%d Z&d!Z'ej@fd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/ dAd+Z0dBd,Z1dBd-Z2dBd.Z3d/Z4d0Z5d1Z6d2Z7d3Z8dCd4Z9dDd5Z:d6Z;d7Z dBd:Z?d;Z@d<ZAd=ZBdEd>ZCdEd?ZDd@ZEy*)FPlugina Base class for all plugins. Plugins change various system settings in order to get desired performance or power saving. Plugins use Monitor objects to get information from the running system. Intentionally a lot of logic is included in the plugin to increase plugin flexibility. c p|j|jj|_||_||_||_||_||_tj|_ |j||_ ||_d|_d|_|j#|_t'|_y)zPlugin constructor.FN)create __class____name___storage_monitors_repository_hardware_inventory_device_matcher_device_matcher_udev_instance_factory collections OrderedDict _instances_init_commands _global_cfg _variables_has_dynamic_options_devices_inited#_get_config_options_used_by_dynamic_options_used_by_dynamicr_cmd) selfmonitors_repositorystorage_factoryhardware_inventorydevice_matcherdevice_matcher_udevinstance_factory global_cfg variabless 7/usr/lib/python3.12/site-packages/tuned/plugins/base.py__init__zPlugin.__init__s"(()@)@A$-1$/$'$1$+$++-$/$$/#$$"&"J"J"L$j$)c$|jyN)destroy_instancesrs r&cleanupzPlugin.cleanup,sr(cL|js|jd|_yy)NT)r _init_devicesr,s r& init_deviceszPlugin.init_devices/s$  4 r(cx|jjjddjdddS)N._)r __module__splitr,s r&namez Plugin.name4s4  " " ( ( -b 1 7 7Q ? BBr(ciS)z-Default configuration options for the plugin.r,s r&_get_config_optionszPlugin._get_config_options<  )r(ciS)z*Explanation of each config option functionr:)clss r&get_config_options_hintszPlugin.get_config_options_hintsAr<r(cgS)znList of config options used by dynamic tuning. Their previous values will be automatically saved and restored.r:r,s r&rz*Plugin._get_config_options_used_by_dynamicFr<r(c|jj}|D]K}||vs |jr ||||<tj d|d|j j dM|S)z3Merge provided options with plugin default options.zUnknown option 'z' for plugin ''.)r;copyrlogwarningr r )roptions effectivekeys r&_get_effective_optionszPlugin._get_effective_optionsKse&&(--/) c Y$33S\IcNKK#t~~?V?VWX  r(crt|tur|St|j}|dk(xs|dk(S)Ntrue1)typeboolstrlower)rvalues r& _option_boolzPlugin._option_boolVs8 %[D < e*   % & (ESL(r(c >||jvrtd|z|j|}|jj ||||||||} | |j|<t j t|jjd|_| S)z8Create new instance of the plugin and seize the devices.z.Plugin instance with name '%s' already exists.c |djS)Nr5)priority)xs r&z(Plugin.create_instance..isZ[\]Z^ZgZgr(rH) r ExceptionrIrr rrsorteditems) rr8rUdevices_expressiondevices_udev_regex script_pre script_postrFeffective_optionsinstances r&create_instancezPlugin.create_instance`s T__ CdJ KK11':  # # * *4xASUg {-/("$//$++F4??3H3H3JPg,hi$/ /r(c|j|k7rtd|d|d|j|jvrtd|z|j|j}|j ||j|j=y)zDestroy existing instance.zPlugin instance 'z"' does not belong to this plugin 'rBz+Plugin instance '%s' was already destroyed.N)_pluginrYr8r_destroy_instancerras r&destroy_instancezPlugin.destroy_instancemss  RZ\`a bb ]]$//) @8K LL __X]] +(" oohmm$r(ctjd|jd|jd|j|y)zInitialize an instance.zinitializing instance  ()N)rDdebugr8_instance_initrfs r&initialize_instancezPlugin.initialize_instancexs)))x}}dii HIhr(c t|jjD]C}tj d|j d|j d|j |E|jjy)zDestroy all instances.zdestroying instance rirjN)listrvaluesrDrkr8reclearrfs r&r+zPlugin.destroy_instances}sWt--/0h99hmmTYY GH(#1//r(cH|j||j|yr*)release_devices_instance_cleanuprfs r&rezPlugin._destroy_instancesx "r(ctr*NotImplementedErrorrfs r&rlzPlugin._instance_init r(ctr*rvrfs r&rtzPlugin._instance_cleanuprxr(cNd|_t|_t|_yNF)_devices_supportedset_assigned_devices _free_devicesr,s r&r/zPlugin._init_devicess!$5$u$r(cy)zOverride this in a subclass to transform a list of device names (e.g. ['sda']) to a list of pyudev.Device objects, if your plugin supports itNr:)rdevicess r&_get_device_objectszPlugin._get_device_objectss r(c|j/t|jj|j|S|j |}|*t jd|jtS|jj|j|}t|Dcgc]}|jc}Scc}w)Nz?((43E3EF) NQ&(/ ;;;hmmKL --4mmtyy Gdii D88499M NO ##I.Y&"r(c4|jsy|j|jz|jz}d|_|jj |jj |xj|zc_|xj |zc_yr{)r|processed_devicesrr~rrqr)rra to_releases r&rszPlugin.release_devicess  **  *(/ ""$ !!#J& "r(cB|jsdg}|D] }||| yr*)r|)rracallbackrdevices r&_run_for_each_devicezPlugin._run_for_each_devices& X7f Hfr(cyr*r:rraenablings r&_instance_pre_staticzPlugin._instance_pre_staticr(cyr*r:rs r&_instance_post_staticzPlugin._instance_post_staticrr(ctjj|}|jj t j t j}|D]}|j|syyNTF) ospathrealpathrget_listconstsCFG_PROFILE_DIRSCFG_DEF_PROFILE_DIRS startswith)rr profile_pathsps r&_safe_script_pathzPlugin._safe_script_pathsX   $ $""++F,C,CVE`E`a- a ooa   r(c R|yt|dk(r'tjd|jd|dy|j dstj dy|j |stj dd |zzytjj|}d }|D]9}tj} | j|jj|g} |tjk(r| j!d | j!|tj#d |d t%| dtj'dt%t)| j+z t-|g| zt.t.d | |d } | j1\} } | j2r*tj d|| j2| ddfzd}<|S#t4t6f$r(}tj d|d|d}Yd}~qd}~wwxYw)Nrz Instance 'z': no device to call script 'z' for./zQRelative paths cannot be used in script_pre or script_post. Use ${i:PROFILE_DIR}.Fz?Paths outside of the profile directories cannot be used in the z0script_pre or script_post, ignoring script: '%s'T full_rollbackzcalling script 'z' with arguments ''zusing environment '%s')stdoutstderr close_fdsenvcwduniversal_newlineszscript '%s' error: %d, '%s'r3zscript 'z ' error: )rrDrEr8rrrrrdirnameenvironrrget_envr ROLLBACK_FULLappendrrOrkror[rr communicate returncodeOSErrorIOError)rrascriptoprrollbackdir_nameretdevr argumentsprocouterres r&_call_device_scriptzPlugin._call_device_scripts ^ \Q;;hmmU[\]    3 99    '99 N86ABC  WW__V $( # c ZZ7 >>$//))+,t9&&&& _% C88Y PQ99 %D,A(B BC  &Y& $' 4 1D!HC YY,Sb/RRS S#* * 7 II34 CsA'G//H&>H!!H&c|jsy|jr|j||jd|j|j |d|j ||j|d|j||jd|j|jrp|jjtjtjr8|j||j!||j"|j|j$j'|j|jj)y)zG Apply static and dynamic tuning if the plugin instance is active. NapplyT)rhas_static_tuningrr^rr_instance_apply_staticrr_has_dynamic_tuningrgetrCFG_DYNAMIC_TUNINGCFG_DEF_DYNAMIC_TUNING_instance_init_dynamicr_instance_apply_dynamicrrrqrfs r&instance_apply_tuningzPlugin.instance_apply_tunings   Hh&9&9 h'')Xt,x(h-Hh&:&: h'')   T%5%5%9%9&:S:SU[UrUr%sx(Xt'C'CXE^E^_ ##H$=$=> !!#r(c|jsyt|jdk7r1tj ddj |jz|j j}|jr\|j||jd|dk(ry|j|||dk(ry|j||jd|dk(ryyy)z< Verify static tuning if the plugin instance is active. Nrz)BUG: Some devices have not been tuned: %srverifyFT) rrrrDrrrrCrrr^_instance_verify_staticr_)rraignore_missingrs r&instance_verify_tuningzPlugin.instance_verify_tunings   " "#q(99 8 yy**+,-  & & + + -'  x)<)GC&1Cs %A4A4ctr*rvrrars r&rz Plugin._instance_unapply_dynamicgrxr(ctr*rvrs r&rzPlugin._instance_update_dynamicjrxr(cvtj|_|j|j y)z Initialize commands. N)rrr_autoregister_commands_check_commandsr,s r&rzPlugin._init_commandsqs,**,$.r(c|jjD]}|jdrt||}t |ds.|j d}|j j|d|i}d|j vr/d|d<||d<|j d|d<|j d|d<nKd |j vr||d <n7d|j vr)||d<|j d|d<|j d|d<||j |<tjtt|j jd |_y) zd Register all commands marked using @command_set, @command_get, and @command_custom decorators. ___commandr8r}Ncustom per_devicerUrc|ddS)Nr5rUr:) name_infos r&rWz/Plugin._autoregister_commands..sfopqfrs}f~r(rX) r __dict__rgetattrhasattrrrrrrrZiterr[)r member_namemember command_namers r&rzPlugin._autoregister_commandsys>^^,,kT" D+ &6 &* % //&)< ..  \FL+A B4 vDNDK6Dz2D  DKFOO#DN6Dz2D"&4>>,--2**6$t~~7K7K7M2NT~+A$.r(ct|jjD].\}}|jddrd|vsd|vs"t d|zy)z2 Check if all commands are defined correctly. rFrr}z,Plugin command '%s' is not defined correctlyN)rorr[r TypeError)rr commands r&rzPlugin._check_commandssV $DNN$8$8$:;lG kk(E"  7e72 B\Q RR |j|||Rycc}wNrr8)rorrprexpandrFr_execute_non_device_commandrrar  new_values r&rz'Plugin._execute_all_non_device_commandss~)-dnn.C.C.E)Fd)FggVbNc')Fdg%%h&6&6&:&:76?D&QR9$$Xw Beds B B c2t|jjDcgc] }|ds | c}D]X}|jj |j j |dd}|>|D]}|j||||Zycc}wr)rorrprrrFr_execute_device_command)rrarr r!rs r&rz#Plugin._execute_all_device_commandss)-dnn.C.C.E)F`)Fg'R^J_')F`g%%h&6&6&:&:76?D&QR9 v  7FIF a`s BBc6d}t|jjDcgc] }|dr | c}D]W}|jj |j j |dd}|>|j||||dk(sVd}Y|Scc}wNTrr8F)rorrprrrFr_verify_non_device_command)rrarrr r!s r&rz&Plugin._verify_all_non_device_commandss #)-dnn.C.C.E)Fd)FggVbNc')Fdg%%h&6&6&:&:76?D&QR9 &&x)^TX]] S e * es BBc Fd}t|jjDcgc] }|ds | c}D]_}|jj |j j |dd}|>|D]}|j|||||dk(sd}a|Scc}wr%)rorrprrrFr_verify_device_command)rrarrrr r!rs r&rz"Plugin._verify_all_device_commandss #)-dnn.C.C.E)F`)Fg'R^J_')F`g%%h&6&6&:&:76?D&QR9 v ""8WfiX\aa S a *as BBc P|qt|}t|dkr|S|dd}|dd}||dvr|S|S |dk(rt|t|kDr|Sy|dk(rt|t|kr|Sy |S|S#t$r&tj d|d|d|d|d Y|SwxYw) Nr5)<>r+r*zcannot compare new value 'z' with current value 'z' by operator 'z ', using 'z' directly as new value)rOrint ValueErrorrDrE)rr! current_valuenwsrvals r&_process_assignment_modifiersz$Plugin._process_assignment_modifierss Y3 #h!m  BQ2 QR3 "31 1 b Sy C3}%% j  s C3}%% j    bKKBDQSUW`ab bsA6A66+B%$B%c8||d|||S|d|S)Nrrr:)rrar rrs r&_get_current_valuezPlugin._get_current_values.  '%.. II '%. ""r(c|j|||}|j||}|||j|||||Sr*)r4r1r)rrar rr!r.s r&rzPlugin._check_and_save_valuesM))(GVD-00MJ)}8Xw v> r(c~|d|dd||dd|y|j||||}||d|||ddyyNrTFr}simremover)rrar rr!s r&r#zPlugin._execute_device_commands] X"78T9feUHE))(GVYO9GEN9fheeLr(cz|d|dd|dd|y|j||d|}||d||ddyyr7r;r s r&rz"Plugin._execute_non_device_commandsY X"78T9eUH=))(GT9M9GEN9heeDr(c|jjt|}tjd|rtj dd|S|S)Nz\s*(0+,?)+([\da-fA-F]*,?)*\s*$z ^\s*(0+,?)+r)runquoterOrematchsub)rrQvs r& _norm_valuezPlugin._norm_valuesA iiE #!XX/3 &&Q '' (r(cx|yd}|T|rR|'tjtj|zytjtj||fzy|:|j |}|j |} t |t |k(}|j||||||S#t$r t |dt |dk(}nb#t$rVt|t|k(}|s:t|jd}|D]}|j}||k(}|snYnwxYwYwxYw)NFT|)r) rDrr STR_VERIFY_PROFILE_VALUE_MISSING'STR_VERIFY_PROFILE_DEVICE_VALUE_MISSINGrCr,r-rOr7strip_log_verification_result) rr8r!r.rrrvalsr0s r& _verify_valuezPlugin._verify_valuesI  #~ nHHV 4 4t ;< HHV ; ;vtn LM ##M2= *9  i.C . .Cc9F $ *    y" ]B!7 7S  y>S/ /S  ^ ! !# &d# YY[s M !s    s=B00 D9:CD9AD3-D30D92D33D98D9c r|r|@tjtj|t |j fzytjtj ||t |j fzy|Xtjtj|t |j t |j fzytjtj||t |j t |j fzyr) rDrrSTR_VERIFY_PROFILE_VALUE_OKrOrI"STR_VERIFY_PROFILE_DEVICE_VALUE_OKrSTR_VERIFY_PROFILE_VALUE_FAIL$STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL)rr8successr!r.rs r&rJzPlugin._log_verification_result>s  nHHV / /4]9K9Q9Q9S2T TU HHV 6 6&$MHZH`H`Hb9c cd  nIIf22dC 8 TT))(GVTb)c-00MJ) genY$F)  GFOY ~W] ^^r(c|d|dd|d||S|j||}|j||}|y|d||dd}|j|d|||S)NrTr}Fr8rT)rrar r!rr.s r&r&z!Plugin._verify_non_device_commandWs X" '( D)T>8 LL))(G<-00MJ) genY$>)  GFOY ~ VVr(ctt|jjDcgc] }|dr | c}D]E}|jj |dd|d|j vs4|j||Gycc}wr)reversedrorrprFrr_cleanup_non_device_command)rrar s r&rz'Plugin._cleanup_all_non_device_commandsas$t~~7L7L7N2Om2OwW^_kWl72OmngGFOT2>GFOW[WtWtDt$$Xw7oms B B c0tt|jjDcgc] }|ds | c}D]N}|jj |dd|d|j vs4|D]}|j||||Pycc}wr)rWrorrprFrr_cleanup_device_command)rrarr:r rs r&rz#Plugin._cleanup_all_device_commandsfs$t~~7L7L7N2Oi2OwSZ[gSh72OijgGFOT2>GFOW[WtWtDt !!(GVVDkis BBc|d|ddd|dd|y|j|||}||d|||d||j|||yNrFr}r8rr)rrar rr: old_values r&rZzPlugin._cleanup_device_commandlsh X"78UD&%A  7F;9GEN9fhefMx&1r(c|d|ddddd|y|j||}||d||dd|j||yr\r])rrar r^s r&rXz"Plugin._cleanup_non_device_commandus` X"78UD%9  739GEN9heeDx)r()NNNr*r{)NN)F)Fr r6 __qualname____doc__r'r-r0propertyr8 classmethodr;r?rrIrRrbrgrmr+rerlrtr/rrrrsrrrrr ROLLBACK_SOFTrrrrrrrrrrrrrrrrrrrrrrrr1r4rr#rrCrLrJr(r&rrrZrXr:r(r&rr s,  C C       )  % #  2#$ #$JPI]I]% N$*,i9?8L8Lw$I :@9M9M2 2 A> S >B  "C G   0# ME  B  _W8 E 2*r(r)r? tuned.constsrtuned.profiles.variablestuned tuned.logsrtuned.utils.commandsrr subprocessrrlogsrrDobjectrr:r(r&rms; ) " jjnnp *Vp *r(