|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] xen: add interface for obtaining .config from hypervisor
On 17/01/2019 16:12, Wei Liu wrote:
> On Thu, Jan 17, 2019 at 03:57:21PM +0100, Juergen Gross wrote:
>> Add a sysctl interface for obtaining the .config file used to build
>> the hypervisor. The mechanism is inspired by the Linux kernel's one.
>>
>> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
>> ---
>> .gitignore | 2 ++
>> tools/flask/policy/modules/dom0.te | 2 +-
>> xen/common/Makefile | 7 +++++++
>> xen/common/sysctl.c | 13 +++++++++++++
>> xen/include/public/sysctl.h | 16 ++++++++++++++++
>> xen/include/xen/kernel.h | 3 +++
>> xen/tools/Makefile | 9 +++++++--
>> xen/tools/bin2c.c | 28 ++++++++++++++++++++++++++++
>> xen/xsm/flask/hooks.c | 3 +++
>> xen/xsm/flask/policy/access_vectors | 2 ++
>> 10 files changed, 82 insertions(+), 3 deletions(-)
>> create mode 100644 xen/tools/bin2c.c
>>
>> diff --git a/.gitignore b/.gitignore
>> index 26bc583f74..549b57020f 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -309,6 +309,7 @@ xen/arch/*/efi/boot.c
>> xen/arch/*/efi/compat.c
>> xen/arch/*/efi/efi.h
>> xen/arch/*/efi/runtime.c
>> +xen/common/config_data.c
>> xen/include/headers*.chk
>> xen/include/asm
>> xen/include/asm-*/asm-offsets.h
>> @@ -328,6 +329,7 @@ xen/test/livepatch/xen_nop.livepatch
>> xen/test/livepatch/xen_replace_world.livepatch
>> xen/tools/kconfig/.tmp_gtkcheck
>> xen/tools/kconfig/.tmp_qtcheck
>> +xen/tools/bin2c
>
> Move this ahead before kconfig?
Sorry, of course!
>
>> xen/tools/symbols
>> xen/xsm/flask/include/av_perm_to_string.h
>> xen/xsm/flask/include/av_permissions.h
>> diff --git a/tools/flask/policy/modules/dom0.te
>> b/tools/flask/policy/modules/dom0.te
>> index a347d664f8..b776e9f307 100644
>> --- a/tools/flask/policy/modules/dom0.te
>> +++ b/tools/flask/policy/modules/dom0.te
>> @@ -16,7 +16,7 @@ allow dom0_t xen_t:xen {
>> allow dom0_t xen_t:xen2 {
>> resource_op psr_cmt_op psr_alloc pmu_ctrl get_symbol
>> get_cpu_levelling_caps get_cpu_featureset livepatch_op
>> - coverage_op set_parameter
>> + coverage_op set_parameter get_config
>> };
>>
>> # Allow dom0 to use all XENVER_ subops that have checks.
>> diff --git a/xen/common/Makefile b/xen/common/Makefile
>> index 56fc201b6b..b375a49ed7 100644
>> --- a/xen/common/Makefile
>> +++ b/xen/common/Makefile
>> @@ -1,5 +1,6 @@
>> obj-y += bitmap.o
>> obj-y += bsearch.o
>> +obj-y += config_data.o
>> obj-$(CONFIG_CORE_PARKING) += core_parking.o
>> obj-y += cpu.o
>> obj-y += cpupool.o
>> @@ -83,3 +84,9 @@ subdir-$(CONFIG_UBSAN) += ubsan
>>
>> subdir-$(CONFIG_NEEDS_LIBELF) += libelf
>> subdir-$(CONFIG_HAS_DEVICE_TREE) += libfdt
>> +
>> +config_data.c: ../.config
>> + ( echo "const char xen_config_data[] ="; \
>> + cat $< | gzip | ../tools/bin2c; \
>> + echo ";"; \
>> + echo "unsigned int xen_config_data_sz = sizeof(xen_config_data) - 1;"
>> ) > $@
>> diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
>> index c0aa6bde4e..6b6608f67b 100644
>> --- a/xen/common/sysctl.c
>> +++ b/xen/common/sysctl.c
>> @@ -13,6 +13,7 @@
>> #include <xen/domain.h>
>> #include <xen/event.h>
>> #include <xen/domain_page.h>
>> +#include <xen/kernel.h>
>> #include <xen/tmem.h>
>> #include <xen/trace.h>
>> #include <xen/console.h>
>> @@ -502,6 +503,18 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)
>> u_sysctl)
>> break;
>> }
>>
>> + case XEN_SYSCTL_get_config:
>> + {
>> + unsigned int size = min(op->u.get_config.size, xen_config_data_sz);
>> +
>> + if ( size &&
>> + copy_to_guest(op->u.get_config.buffer, xen_config_data, size) )
>> + ret = -EFAULT;
>
> What's the point of copying when user supplied buffer is not big enough?
> They can't continue from where they left off anyway.
Hmm, true. Will change.
>
>> + op->u.get_config.size = xen_config_data_sz;
>> +
>> + break;
>> + }
>> +
>> default:
>> ret = arch_do_sysctl(op, u_sysctl);
>> copyback = 0;
>> diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h
>> index c49b4dcc99..fb5d93a242 100644
>> --- a/xen/include/public/sysctl.h
>> +++ b/xen/include/public/sysctl.h
>> @@ -1100,6 +1100,20 @@ typedef struct xen_sysctl_cpu_policy
>> xen_sysctl_cpu_policy_t;
>> DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_policy_t);
>> #endif
>>
>> +/*
>> + * XEN_SYSCTL_get_config
>> + *
>> + * Return gzip-ed .config file
>> + */
>> +struct xen_sysctl_get_config {
>> + XEN_GUEST_HANDLE_64(char) buffer; /* IN: pointer to buffer. */
>> + uint32_t size; /* IN: size of buffer. */
>> + /* OUT: size of config data. */
>> + uint32_t pad; /* IN: MUST be zero. */
>
> Please check pad is really zero in code.
Yes.
Juergen
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |