1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
From 335cbb55567b20df8e8bd2d1b340609e272ddab6 Mon Sep 17 00:00:00 2001
From: Andrew Cooper <andrew.cooper3@citrix.com>
Date: Tue, 2 Apr 2024 16:19:11 +0200
Subject: [PATCH 63/67] xen/virtual-region: Include rodata pointers
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
These are optional. .init doesn't distinguish types of data like this, and
livepatches don't necesserily have any .rodata either.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Ross Lagerwall <ross.lagerwall@citrix.com>
master commit: ef969144a425e39f5b214a875b5713d0ea8575fb
master date: 2024-03-07 14:24:42 +0000
---
xen/common/livepatch.c | 6 ++++++
xen/common/virtual_region.c | 2 ++
xen/include/xen/virtual_region.h | 3 +++
3 files changed, 11 insertions(+)
diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c
index 29395f286f..28c09ddf58 100644
--- a/xen/common/livepatch.c
+++ b/xen/common/livepatch.c
@@ -788,6 +788,12 @@ static int prepare_payload(struct payload *payload,
region->text_start = payload->text_addr;
region->text_end = payload->text_addr + payload->text_size;
+ if ( payload->ro_size )
+ {
+ region->rodata_start = payload->ro_addr;
+ region->rodata_end = payload->ro_addr + payload->ro_size;
+ }
+
/* Optional sections. */
for ( i = 0; i < BUGFRAME_NR; i++ )
{
diff --git a/xen/common/virtual_region.c b/xen/common/virtual_region.c
index b22ffb75c4..9c566f8ec9 100644
--- a/xen/common/virtual_region.c
+++ b/xen/common/virtual_region.c
@@ -13,6 +13,8 @@ static struct virtual_region core = {
.list = LIST_HEAD_INIT(core.list),
.text_start = _stext,
.text_end = _etext,
+ .rodata_start = _srodata,
+ .rodata_end = _erodata,
};
/* Becomes irrelevant when __init sections are cleared. */
diff --git a/xen/include/xen/virtual_region.h b/xen/include/xen/virtual_region.h
index 442a45bf1f..dcdc95ba49 100644
--- a/xen/include/xen/virtual_region.h
+++ b/xen/include/xen/virtual_region.h
@@ -22,6 +22,9 @@ struct virtual_region
const void *text_start; /* .text virtual address start. */
const void *text_end; /* .text virtual address end. */
+ const void *rodata_start; /* .rodata virtual address start (optional). */
+ const void *rodata_end; /* .rodata virtual address end. */
+
/* If this is NULL the default lookup mechanism is used. */
symbols_lookup_t *symbols_lookup;
--
2.44.0
|