payload: Fix running payloads in stage1
Don't attempt to modify string constants which live in read-only
memory.
Fixes: 75329c5 ("payload: Fix m1n1 stage 1 version passing")
Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
diff --git a/src/payload.c b/src/payload.c
index 9f3575c..5b1547f 100644
--- a/src/payload.c
+++ b/src/payload.c
@@ -333,10 +333,12 @@
for (size_t i = 0; i < chosen_cnt; i++) {
char *val = memchr(chosen[i], '=', MAX_VAR_NAME + 1);
+ char var[MAX_VAR_NAME + 1];
assert(val);
- val[0] = 0; // Terminate var name
- if (kboot_set_chosen(chosen[i] + 7, val + 1) < 0)
+ memcpy(var, chosen[i], val - chosen[i]);
+ var[val - chosen[i]] = 0; // Terminate var name
+ if (kboot_set_chosen(var + 7, val + 1) < 0)
printf("Failed to kboot set %s='%s'\n", chosen[i], val);
}