[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH v6 00/12] livepatch: new features and fixes
 
 
 
 This series introduces new features to the livepatch functionality as 
briefly discussed during Xen Developer Summit 2019: [a] and [b]. 
It also provides a few fixes and some small improvements. 
 
Main changes in v6: 
- Added missing action pad field zeroing 
 
Main changes in v4: 
- Fix various typos and minor issues 
- Simplify arch_livepatch_{apply,revert} by using 
  common_livepatch_{apply,revert} 
- Improve python bindings and fix few issues 
 
Main changes in v3: 
- Fix expectation test to work on Arm 
- Add test for metadata (Konrad) 
- Minor fixes to documentation 
 
Main changes in v2: 
- added new features to livepatch documentation 
- added livepatch tests 
- enabled Arm support for [5] 
- make .modinfo optional for [11] 
- fixed typos 
 
FEATURES: 
 
1. independent modules (patches: [1], [2]) 
 
  * livepatch-build-tools repo dependency [A] 
 
  Livepatch enforces the following buildid-based dependency chain 
  between hotpatch modules: 
    1) first module depends on given hypervisor buildid 
    2) every consecutive module depends on previous module's buildid 
  This way proper hotpatch stack order is maintained and enforced. 
  While it is important for production hotpatches it limits agility and 
  blocks usage of testing or debug hotpatches. These kinds of hotpatch 
  modules are typically expected to be loaded at any time irrespective 
  of current state of the modules stack. 
 
  [A] livepatch-build: Embed hypervisor build id into every hotpatch 
 
2. pre- and post- apply|revert actions hooks (patches: [3], [4]) 
 
  * livepatch-build-tools repo dependency [B] 
 
  This is an implementation of 4 new livepatch module vetoing hooks, 
  that can be optionally supplied along with modules. 
  Hooks that currently exists in the livepatch mechanism aren't agile 
  enough and have various limitations: 
  * run only from within a quiescing zone 
  * cannot conditionally prevent applying or reverting 
  * do not have access to the module context 
  To address these limitations the following has been implemented: 
  1) pre-apply hook 
  2) post-apply hook 
  3) pre-revert hook 
  4) post-revert hook 
 
  [B] create-diff-object: Handle extra pre-|post- hooks 
 
3. apply|revert actions replacement hooks (patches: [5], [6], [7]) 
 
  * livepatch-build-tools repo dependency: [C], [D], [E] 
 
  To increase hotpatching system's agility and provide more flexiable 
  long-term hotpatch solution, allow to overwrite the default apply 
  and revert action functions with hook-like supplied alternatives. 
  The alternative functions are optional and the default functions are 
  used by default. 
 
  [C] create-diff-object: Do not create empty .livepatch.funcs section 
  [D] create-diff-object: Handle optional apply|revert hooks 
  [E] create-diff-object: Add support for applied/reverted marker 
 
4. inline asm hotpatching expectations (patches: [8]) 
 
  * livepatch-build-tools repo dependency: [F] 
 
  Expectations are designed as optional feature, since the main use of 
  them is planned for inline asm hotpatching. 
  The payload structure is modified as each expectation structure is 
  part of the livepatch_func structure and hence extends the payload. 
  The payload version is bumped to 3 with this change to highlight the 
  ABI modification and enforce proper support. 
  The expectation is manually enabled during inline asm module 
  construction. If enabled, expectation ensures that the expected 
  content of memory is to be found at a given patching (old_addr) 
  location. 
 
  [F] create-diff-object: Add support for expectations 
 
5. runtime hotpatch metadata support (patches: [9], [10], [11]) 
 
  Having detailed hotpatch metadata helps to properly identify module's 
  origin and version. It also allows to keep track of the history of 
  hotpatch loads in the system (at least within dmesg buffer size 
  limits). 
  Extend the livepatch list operation to fetch also payloads' metadata. 
  This is achieved by extending the sysctl list interface with 2 extra 
  guest handles: 
  * metadata     - an array of arbitrary size strings 
  * metadata_len - an array of metadata strings' lengths (uin32_t each) 
  To unify and simplify the interface, handle the modules' name strings 
  of arbitrary size by copying them in adhering chunks to the userland. 
 
6. python bindings for livepatch operations (patches: [12]) 
 
  Extend the XC python bindings library to support all common livepatch 
  operations and actions: 
  - status (pyxc_livepatch_status): 
  - action (pyxc_livepatch_action): 
  - upload (pyxc_livepatch_upload): 
  - list (pyxc_livepatch_list):
  
 
 This series looks like it would be a good candidate for a CHANGELOG.md line. 
 
 What about something like this: 
 
 -
 Livepatch improvements: Buildid / hotpatch "stack" restrictions, 
Additional {pre,post}-{apply,revert} hooks, inline hotpatching 
expectations, runtime hotpatch metdata, python bindings for livepatch 
operations 
 
  
 
    
     |