diff mbox series

[v3,5/7] create-diff-object: Add support for expectations

Message ID 20191126122511.7409-6-wipawel@amazon.de (mailing list archive)
State New, archived
Headers show
Series livepatch-build-tools: new features and fixes | expand

Commit Message

Wieczorkiewicz, Pawel Nov. 26, 2019, 12:25 p.m. UTC
Extend livepatch_patch_func to support a new field: expect. This new
field describes the expected data, its length and whether expectation
is enabled. The expectation's data is of opaque padding size.

By default the expectation field is zero-out and the expectation is
disabled unless explicitly specified in the patch.

Signed-off-by: Pawel Wieczorkiewicz <wipawel@amazon.de>
Reviewed-by: Ross Lagerwall <ross.lagerwall@citrix.com>
---
Changed since v1:
  * Do not bump the payload version again.
---
 common.h             | 11 ++++++++++-
 create-diff-object.c |  1 +
 2 files changed, 11 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/common.h b/common.h
index 9f9cb7b..b6489db 100644
--- a/common.h
+++ b/common.h
@@ -115,6 +115,14 @@  struct kpatch_elf {
 };
 
 #define PATCH_INSN_SIZE 5
+#define MAX_REPLACEMENT_SIZE 31
+struct livepatch_expectation {
+	uint8_t enabled : 1;
+	uint8_t len : 5;
+	uint8_t pad : 2;
+	uint8_t data[MAX_REPLACEMENT_SIZE];
+};
+typedef struct livepatch_expectation livepatch_expectation_t;
 
 struct livepatch_patch_func {
 	char *name;
@@ -123,9 +131,10 @@  struct livepatch_patch_func {
 	uint32_t new_size;
 	uint32_t old_size;
 	uint8_t version;
-	unsigned char pad[31];
+	unsigned char pad[MAX_REPLACEMENT_SIZE];
 	uint8_t applied;
 	uint8_t _pad[7];
+	livepatch_expectation_t expect;
 };
 
 struct special_section {
diff --git a/create-diff-object.c b/create-diff-object.c
index e886d4c..abf3cc7 100644
--- a/create-diff-object.c
+++ b/create-diff-object.c
@@ -2017,6 +2017,7 @@  static void livepatch_create_patches_sections(struct kpatch_elf *kelf,
 			memset(funcs[index].pad, 0, sizeof funcs[index].pad);
 			funcs[index].applied = 0;
 			memset(funcs[index]._pad, 0, sizeof funcs[index]._pad);
+			memset(&funcs[index].expect, 0, sizeof funcs[index].expect);
 
 			/*
 			 * Add a relocation that will populate