[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH for-4.7 2/3] docs/xsplice: Fix syntax when compiling to pdf with pandoc



Pandoc (version 1.12.4.2 from Debian Jessie) complains at the embedded \n in
the signature checking paragraph.

  /usr/bin/pandoc --number-sections --toc --standalone misc/xsplice.markdown
    --output pdf/misc/xsplice.pdf
  ! Undefined control sequence.
  l.1085 appended\textasciitilde{}\n

Surround the string in backticks to make it verbatim text.

While altering this file, strip the substantial quantity of trailing
whitespace.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
 docs/misc/xsplice.markdown | 304 ++++++++++++++++++++++-----------------------
 1 file changed, 152 insertions(+), 152 deletions(-)

diff --git a/docs/misc/xsplice.markdown b/docs/misc/xsplice.markdown
index 4a98be1..80f8bc7 100644
--- a/docs/misc/xsplice.markdown
+++ b/docs/misc/xsplice.markdown
@@ -90,18 +90,18 @@ As example we will assume the hypervisor does not have 
XSA-132 (see
 the hypervisor with it. The original code looks as so:
 
 <pre>
-   48 89 e0                  mov    %rsp,%rax  
-   48 25 00 80 ff ff         and    $0xffffffffffff8000,%rax  
+   48 89 e0                  mov    %rsp,%rax
+   48 25 00 80 ff ff         and    $0xffffffffffff8000,%rax
 </pre>
 
 while the new patched hypervisor would be:
 
 <pre>
-   48 c7 45 b8 00 00 00 00   movq   $0x0,-0x48(%rbp)  
-   48 c7 45 c0 00 00 00 00   movq   $0x0,-0x40(%rbp)  
-   48 c7 45 c8 00 00 00 00   movq   $0x0,-0x38(%rbp)  
-   48 89 e0                  mov    %rsp,%rax  
-   48 25 00 80 ff ff         and    $0xffffffffffff8000,%rax  
+   48 c7 45 b8 00 00 00 00   movq   $0x0,-0x48(%rbp)
+   48 c7 45 c0 00 00 00 00   movq   $0x0,-0x40(%rbp)
+   48 c7 45 c8 00 00 00 00   movq   $0x0,-0x38(%rbp)
+   48 89 e0                  mov    %rsp,%rax
+   48 25 00 80 ff ff         and    $0xffffffffffff8000,%rax
 </pre>
 
 This is inside the arch_do_domctl. This new change adds 21 extra
@@ -113,8 +113,8 @@ As such we could simplify this problem by only patching the 
site
 which calls arch_do_domctl:
 
 <pre>
-do_domctl:  
- e8 4b b1 05 00          callq  ffff82d08015fbb9 <arch_do_domctl>  
+do_domctl:
+ e8 4b b1 05 00          callq  ffff82d08015fbb9 <arch_do_domctl>
 </pre>
 
 with a new address for where the new `arch_do_domctl` would be (this
@@ -128,8 +128,8 @@ Patching the offset in `hypercall_table` for `do_domctl:
 
 <pre>
 
- ffff82d08024d490:   79 30  
- ffff82d08024d492:   10 80 d0 82 ff ff   
+ ffff82d08024d490:   79 30
+ ffff82d08024d492:   10 80 d0 82 ff ff
 
 </pre>
 
@@ -172,9 +172,9 @@ from that). Patching the offset in `hypercall_table` for 
the old
 `do_xen_version` (ffff82d080112f9e <do_xen_version>)
 
 </pre>
- ffff82d08024b270 <hypercall_table>:   
- ...  
- ffff82d08024b2f8:   9e 2f 11 80 d0 82 ff ff  
+ ffff82d08024b270 <hypercall_table>:
+ ...
+ ffff82d08024b2f8:   9e 2f 11 80 d0 82 ff ff
 
 </pre>
 
@@ -187,17 +187,17 @@ An alternative solution would be to patch insert a 
trampoline in the
 old `do_xen_version' function to directly jump to the new `do_xen_version`.
 
 <pre>
- ffff82d080112f9e do_xen_version:  
- ffff82d080112f9e:       48 c7 c0 da ff ff ff    mov    
$0xffffffffffffffda,%rax  
- ffff82d080112fa5:       83 ff 09                cmp    $0x9,%edi  
- ffff82d080112fa8:       0f 87 24 05 00 00       ja     ffff82d0801134d2 ; 
do_xen_version+0x534  
+ ffff82d080112f9e do_xen_version:
+ ffff82d080112f9e:       48 c7 c0 da ff ff ff    mov    
$0xffffffffffffffda,%rax
+ ffff82d080112fa5:       83 ff 09                cmp    $0x9,%edi
+ ffff82d080112fa8:       0f 87 24 05 00 00       ja     ffff82d0801134d2 ; 
do_xen_version+0x534
 </pre>
 
 with:
 
 <pre>
- ffff82d080112f9e do_xen_version:  
- ffff82d080112f9e:       e9 XX YY ZZ QQ          jmpq   [new do_xen_version]  
+ ffff82d080112f9e do_xen_version:
+ ffff82d080112f9e:       e9 XX YY ZZ QQ          jmpq   [new do_xen_version]
 </pre>
 
 which would lessen the amount of patching to just one location.
@@ -296,15 +296,15 @@ The `.xsplice.funcs` contains an array of 
xsplice_patch_func structures
 which describe the functions to be patched:
 
 <pre>
-struct xsplice_patch_func {  
-    const char *name;  
-    void *new_addr;  
-    void *old_addr;  
-    uint32_t new_size;  
-    uint32_t old_size;  
-    uint8_t version;  
-    uint8_t opaque[31];  
-};  
+struct xsplice_patch_func {
+    const char *name;
+    void *new_addr;
+    void *old_addr;
+    uint32_t new_size;
+    uint32_t old_size;
+    uint8_t version;
+    uint8_t opaque[31];
+};
 </pre>
 
 The size of the structure is 64 bytes on 64-bit hypervisors. It will be
@@ -345,33 +345,33 @@ to `old_addr`.
 A simple example of what a payload file can be:
 
 <pre>
-/* MUST be in sync with hypervisor. */  
-struct xsplice_patch_func {  
-    const char *name;  
-    void *new_addr;  
-    void *old_addr;  
-    uint32_t new_size;  
-    uint32_t old_size;  
+/* MUST be in sync with hypervisor. */
+struct xsplice_patch_func {
+    const char *name;
+    void *new_addr;
+    void *old_addr;
+    uint32_t new_size;
+    uint32_t old_size;
     uint8_t version;
-    uint8_t pad[31];  
-};  
+    uint8_t pad[31];
+};
 
-/* Our replacement function for xen_extra_version. */  
-const char *xen_hello_world(void)  
-{  
-    return "Hello World";  
-}  
+/* Our replacement function for xen_extra_version. */
+const char *xen_hello_world(void)
+{
+    return "Hello World";
+}
 
-static unsigned char patch_this_fnc[] = "xen_extra_version";  
+static unsigned char patch_this_fnc[] = "xen_extra_version";
 
-struct xsplice_patch_func xsplice_hello_world = {  
+struct xsplice_patch_func xsplice_hello_world = {
     .version = XSPLICE_PAYLOAD_VERSION,
-    .name = patch_this_fnc,  
-    .new_addr = xen_hello_world,  
-    .old_addr = (void *)0xffff82d08013963c, /* Extracted from xen-syms. */  
-    .new_size = 13, /* To be be computed by scripts. */  
-    .old_size = 13, /* -----------""---------------  */  
-} __attribute__((__section__(".xsplice.funcs")));  
+    .name = patch_this_fnc,
+    .new_addr = xen_hello_world,
+    .old_addr = (void *)0xffff82d08013963c, /* Extracted from xen-syms. */
+    .new_size = 13, /* To be be computed by scripts. */
+    .old_size = 13, /* -----------""---------------  */
+} __attribute__((__section__(".xsplice.funcs")));
 
 </pre>
 
@@ -424,13 +424,13 @@ one uint32_t to determine the sub-operations and one 
padding field which
 *MUST* always be zero.
 
 <pre>
-struct xen_sysctl_xsplice_op {  
-    uint32_t cmd;                   /* IN: XEN_SYSCTL_XSPLICE_*. */  
-    uint32_t pad;                   /* IN: Always zero. */  
-       union {  
-          ... see below ...  
-        } u;  
-};  
+struct xen_sysctl_xsplice_op {
+    uint32_t cmd;                   /* IN: XEN_SYSCTL_XSPLICE_*. */
+    uint32_t pad;                   /* IN: Always zero. */
+       union {
+          ... see below ...
+        } u;
+};
 
 </pre>
 while the rest of hypercall specific structures are part of the this structure.
@@ -447,17 +447,17 @@ which contains:
 The structure is as follow:
 
 <pre>
-/*  
- *  Uniquely identifies the payload.  Should be human readable.  
- * Includes the NUL terminator  
- */  
-#define XEN_XSPLICE_NAME_SIZE 128  
-struct xen_xsplice_name {  
-    XEN_GUEST_HANDLE_64(char) name;         /* IN, pointer to name. */  
-    uint16_t size;                          /* IN, size of name. May be upto   
-                                               XEN_XSPLICE_NAME_SIZE. */  
-    uint16_t pad[3];                        /* IN: MUST be zero. */ 
-};  
+/*
+ *  Uniquely identifies the payload.  Should be human readable.
+ * Includes the NUL terminator
+ */
+#define XEN_XSPLICE_NAME_SIZE 128
+struct xen_xsplice_name {
+    XEN_GUEST_HANDLE_64(char) name;         /* IN, pointer to name. */
+    uint16_t size;                          /* IN, size of name. May be upto
+                                               XEN_XSPLICE_NAME_SIZE. */
+    uint16_t pad[3];                        /* IN: MUST be zero. */
+};
 </pre>
 
 ### XEN_SYSCTL_XSPLICE_UPLOAD (0)
@@ -485,11 +485,11 @@ The `payload` is the ELF payload as mentioned in the 
`Payload format` section.
 The structure is as follow:
 
 <pre>
-struct xen_sysctl_xsplice_upload {  
-    xen_xsplice_name_t name;            /* IN, name of the patch. */  
-    uint64_t size;                      /* IN, size of the ELF file. */  
-    XEN_GUEST_HANDLE_64(uint8) payload; /* IN: ELF file. */  
-};  
+struct xen_sysctl_xsplice_upload {
+    xen_xsplice_name_t name;            /* IN, name of the patch. */
+    uint64_t size;                      /* IN, size of the ELF file. */
+    XEN_GUEST_HANDLE_64(uint8) payload; /* IN: ELF file. */
+};
 </pre>
 
 ### XEN_SYSCTL_XSPLICE_GET (1)
@@ -538,17 +538,17 @@ This operation is synchronous and does not require 
preemption.
 The structure is as follow:
 
 <pre>
-struct xen_xsplice_status {  
-#define XSPLICE_STATUS_CHECKED      1  
-#define XSPLICE_STATUS_APPLIED      2  
-    uint32_t state;                 /* OUT: XSPLICE_STATE_*. */  
-    int32_t rc;                     /* OUT: 0 if no error, otherwise -XEN_EXX. 
*/  
-};  
-
-struct xen_sysctl_xsplice_get {  
-    xen_xsplice_name_t name;        /* IN, the name of the payload. */  
-    xen_xsplice_status_t status;    /* IN/OUT: status of the payload. */  
-};  
+struct xen_xsplice_status {
+#define XSPLICE_STATUS_CHECKED      1
+#define XSPLICE_STATUS_APPLIED      2
+    uint32_t state;                 /* OUT: XSPLICE_STATE_*. */
+    int32_t rc;                     /* OUT: 0 if no error, otherwise -XEN_EXX. 
*/
+};
+
+struct xen_sysctl_xsplice_get {
+    xen_xsplice_name_t name;        /* IN, the name of the payload. */
+    xen_xsplice_status_t status;    /* IN/OUT: status of the payload. */
+};
 </pre>
 
 ### XEN_SYSCTL_XSPLICE_LIST (2)
@@ -612,24 +612,24 @@ The `struct xen_xsplice_status` structure contains an 
status of payload which in
 The structure is as follow:
 
 <pre>
-struct xen_sysctl_xsplice_list {  
+struct xen_sysctl_xsplice_list {
     uint32_t version;                       /* OUT: Hypervisor stamps value.
-                                               If varies between calls, we are 
 
-                                               getting stale data. */  
+                                               If varies between calls, we are
+                                               getting stale data. */
     uint32_t idx;                           /* IN: Index into hypervisor list. 
*/
-    uint32_t nr;                            /* IN: How many status, names, and 
len  
-                                               should be filled out. Can be 
zero to get  
-                                               amount of payloads and version. 
 
-                                               OUT: How many payloads left. */ 
 
-    uint32_t pad;                           /* IN: Must be zero. */  
-    XEN_GUEST_HANDLE_64(xen_xsplice_status_t) status;  /* OUT. Must have 
enough  
-                                               space allocate for nr of them. 
*/  
-    XEN_GUEST_HANDLE_64(char) id;           /* OUT: Array of names. Each 
member  
-                                               MUST XEN_XSPLICE_NAME_SIZE in 
size.  
-                                               Must have nr of them. */  
-    XEN_GUEST_HANDLE_64(uint32) len;        /* OUT: Array of lengths of 
name's.  
-                                               Must have nr of them. */  
-};  
+    uint32_t nr;                            /* IN: How many status, names, and 
len
+                                               should be filled out. Can be 
zero to get
+                                               amount of payloads and version.
+                                               OUT: How many payloads left. */
+    uint32_t pad;                           /* IN: Must be zero. */
+    XEN_GUEST_HANDLE_64(xen_xsplice_status_t) status;  /* OUT. Must have enough
+                                               space allocate for nr of them. 
*/
+    XEN_GUEST_HANDLE_64(char) id;           /* OUT: Array of names. Each member
+                                               MUST XEN_XSPLICE_NAME_SIZE in 
size.
+                                               Must have nr of them. */
+    XEN_GUEST_HANDLE_64(uint32) len;        /* OUT: Array of lengths of name's.
+                                               Must have nr of them. */
+};
 </pre>
 
 ### XEN_SYSCTL_XSPLICE_ACTION (3)
@@ -665,17 +665,17 @@ The return value will be zero unless the provided fields 
are incorrect.
 The structure is as follow:
 
 <pre>
-#define XSPLICE_ACTION_UNLOAD  1  
-#define XSPLICE_ACTION_REVERT  2  
-#define XSPLICE_ACTION_APPLY   3  
-#define XSPLICE_ACTION_REPLACE 4  
-struct xen_sysctl_xsplice_action {  
-    xen_xsplice_name_t name;                /* IN, name of the patch. */  
-    uint32_t cmd;                           /* IN: XSPLICE_ACTION_* */  
-    uint32_t time;                          /* IN: Zero if no timeout. */   
-                                            /* Or upper bound of time (ms) */  
 
-                                            /* for operation to take. */  
-};  
+#define XSPLICE_ACTION_UNLOAD  1
+#define XSPLICE_ACTION_REVERT  2
+#define XSPLICE_ACTION_APPLY   3
+#define XSPLICE_ACTION_REPLACE 4
+struct xen_sysctl_xsplice_action {
+    xen_xsplice_name_t name;                /* IN, name of the patch. */
+    uint32_t cmd;                           /* IN: XSPLICE_ACTION_* */
+    uint32_t time;                          /* IN: Zero if no timeout. */
+                                            /* Or upper bound of time (ms) */
+                                            /* for operation to take. */
+};
 
 </pre>
 
@@ -686,11 +686,11 @@ The XSPLICE_ACTION prefix has been dropped to easy 
reading and
 does not include the XSPLICE_STATES:
 
 <pre>
-              /->\  
-              \  /  
- UNLOAD <--- CHECK ---> REPLACE|APPLY --> REVERT --\  
-                \                                  |  
-                 \-------------------<-------------/  
+              /->\
+              \  /
+ UNLOAD <--- CHECK ---> REPLACE|APPLY --> REVERT --\
+                \                                  |
+                 \-------------------<-------------/
 
 </pre>
 ## State transition table of XSPLICE_ACTION commands and XSPLICE_STATUS.
@@ -1007,46 +1007,46 @@ expecting such that it can properly do signature 
verification.
 
 The signature is based on the all of the payloads continuously laid out
 in memory. The signature is to be appended at the end of the ELF payload
-prefixed with the string '~Module signature appended~\n', followed by
+prefixed with the string `'~Module signature appended~\n'`, followed by
 an signature header then followed by the signature, key identifier, and signers
 name.
 
 Specifically the signature header would be:
 
 <pre>
-#define PKEY_ALGO_DSA       0  
-#define PKEY_ALGO_RSA       1  
-
-#define PKEY_ID_PGP         0 /* OpenPGP generated key ID */  
-#define PKEY_ID_X509        1 /* X.509 arbitrary subjectKeyIdentifier */  
-
-#define HASH_ALGO_MD4          0  
-#define HASH_ALGO_MD5          1  
-#define HASH_ALGO_SHA1         2  
-#define HASH_ALGO_RIPE_MD_160  3  
-#define HASH_ALGO_SHA256       4  
-#define HASH_ALGO_SHA384       5  
-#define HASH_ALGO_SHA512       6  
-#define HASH_ALGO_SHA224       7  
-#define HASH_ALGO_RIPE_MD_128  8  
-#define HASH_ALGO_RIPE_MD_256  9  
-#define HASH_ALGO_RIPE_MD_320 10  
-#define HASH_ALGO_WP_256      11  
-#define HASH_ALGO_WP_384      12  
-#define HASH_ALGO_WP_512      13  
-#define HASH_ALGO_TGR_128     14  
-#define HASH_ALGO_TGR_160     15  
-#define HASH_ALGO_TGR_192     16  
-
-
-struct elf_payload_signature {  
-       u8      algo;           /* Public-key crypto algorithm PKEY_ALGO_*. */  
-       u8      hash;           /* Digest algorithm: HASH_ALGO_*. */  
-       u8      id_type;        /* Key identifier type PKEY_ID*. */  
-       u8      signer_len;     /* Length of signer's name */  
-       u8      key_id_len;     /* Length of key identifier */  
-       u8      __pad[3];  
-       __be32  sig_len;        /* Length of signature data */  
+#define PKEY_ALGO_DSA       0
+#define PKEY_ALGO_RSA       1
+
+#define PKEY_ID_PGP         0 /* OpenPGP generated key ID */
+#define PKEY_ID_X509        1 /* X.509 arbitrary subjectKeyIdentifier */
+
+#define HASH_ALGO_MD4          0
+#define HASH_ALGO_MD5          1
+#define HASH_ALGO_SHA1         2
+#define HASH_ALGO_RIPE_MD_160  3
+#define HASH_ALGO_SHA256       4
+#define HASH_ALGO_SHA384       5
+#define HASH_ALGO_SHA512       6
+#define HASH_ALGO_SHA224       7
+#define HASH_ALGO_RIPE_MD_128  8
+#define HASH_ALGO_RIPE_MD_256  9
+#define HASH_ALGO_RIPE_MD_320 10
+#define HASH_ALGO_WP_256      11
+#define HASH_ALGO_WP_384      12
+#define HASH_ALGO_WP_512      13
+#define HASH_ALGO_TGR_128     14
+#define HASH_ALGO_TGR_160     15
+#define HASH_ALGO_TGR_192     16
+
+
+struct elf_payload_signature {
+       u8      algo;           /* Public-key crypto algorithm PKEY_ALGO_*. */
+       u8      hash;           /* Digest algorithm: HASH_ALGO_*. */
+       u8      id_type;        /* Key identifier type PKEY_ID*. */
+       u8      signer_len;     /* Length of signer's name */
+       u8      key_id_len;     /* Length of key identifier */
+       u8      __pad[3];
+       __be32  sig_len;        /* Length of signature data */
 };
 
 </pre>
@@ -1085,7 +1085,7 @@ this means 5 bytes are required.
 Depending on compiler settings, there are several functions in Xen that
 are smaller (without inter-function padding).
 
-<pre> 
+<pre>
 readelf -sW xen-syms | grep " FUNC " | \
     awk '{ if ($3 < 5) print $3, $4, $5, $8 }'
 
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.