mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
livepatch: Reject payloads with .alternative or .ex_table if support is not built-in.
If the payload had the sections mentioned but the hypervisor did not support some of them (say on ARM the .ex_table) - instead of ignoring them - it should forbid loading of such payload. Reviewed-by: Ross Lagerwall <ross.lagerwall@citrix.com> Reviewed-by: Julien Grall <julien.grall@arm.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
44db782fd2
commit
aef04c0074
1 file changed
+12
-4
+12
-4
@@ -641,10 +641,10 @@ static int prepare_payload(struct payload *payload,
|
||||
sizeof(*region->frame[i].bugs);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_ALTERNATIVE
|
||||
sec = livepatch_elf_sec_by_name(elf, ".altinstructions");
|
||||
if ( sec )
|
||||
{
|
||||
#ifdef CONFIG_HAS_ALTERNATIVE
|
||||
struct alt_instr *a, *start, *end;
|
||||
|
||||
if ( sec->sec->sh_size % sizeof(*a) )
|
||||
@@ -671,13 +671,17 @@ static int prepare_payload(struct payload *payload,
|
||||
}
|
||||
}
|
||||
apply_alternatives(start, end);
|
||||
}
|
||||
#else
|
||||
dprintk(XENLOG_ERR, LIVEPATCH "%s: We don't support alternative patching!\n",
|
||||
elf->name);
|
||||
return -EOPNOTSUPP;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_EX_TABLE
|
||||
sec = livepatch_elf_sec_by_name(elf, ".ex_table");
|
||||
if ( sec )
|
||||
{
|
||||
#ifdef CONFIG_HAS_EX_TABLE
|
||||
struct exception_table_entry *s, *e;
|
||||
|
||||
if ( !sec->sec->sh_size ||
|
||||
@@ -696,8 +700,12 @@ static int prepare_payload(struct payload *payload,
|
||||
|
||||
region->ex = s;
|
||||
region->ex_end = e;
|
||||
}
|
||||
#else
|
||||
dprintk(XENLOG_ERR, LIVEPATCH "%s: We don't support .ex_table!\n",
|
||||
elf->name);
|
||||
return -EOPNOTSUPP;
|
||||
#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||