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:
Konrad Rzeszutek Wilk committed 2016-09-23 12:39:45 -04:00
1 parent 44db782fd2
commit aef04c0074
1 file changed
+12 -4
+12 -4
View File
@@ -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;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.