From patchwork Wed Feb 26 12:47:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?SsO8cmdlbiBHcm/Dnw==?= X-Patchwork-Id: 11406449 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 450A714E3 for ; Wed, 26 Feb 2020 12:48:52 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1ABED21927 for ; Wed, 26 Feb 2020 12:48:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1ABED21927 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j6w6B-0002R1-IK; Wed, 26 Feb 2020 12:47:35 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j6w6A-0002Px-Hq for xen-devel@lists.xenproject.org; Wed, 26 Feb 2020 12:47:34 +0000 X-Inumbo-ID: 1b48c272-5896-11ea-8cb6-bc764e2007e4 Received: from mx2.suse.de (unknown [195.135.220.15]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 1b48c272-5896-11ea-8cb6-bc764e2007e4; Wed, 26 Feb 2020 12:47:11 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 89A93B138; Wed, 26 Feb 2020 12:47:10 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xenproject.org Date: Wed, 26 Feb 2020 13:47:05 +0100 Message-Id: <20200226124705.29212-13-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20200226124705.29212-1-jgross@suse.com> References: <20200226124705.29212-1-jgross@suse.com> Subject: [Xen-devel] [PATCH v6 12/12] xen: remove XEN_SYSCTL_set_parameter support X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , Stefano Stabellini , Julien Grall , Wei Liu , Konrad Rzeszutek Wilk , Andrew Cooper , Ian Jackson , George Dunlap , Jan Beulich , Daniel De Graaf , Volodymyr Babchuk , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" The functionality of XEN_SYSCTL_set_parameter is available via hypfs now, so it can be removed. This allows to remove the kernel_param structure for runtime parameters by putting the now only used structure element into the hypfs node structure of the runtime parameters. Signed-off-by: Juergen Gross Acked-by: Jan Beulich --- V6: - new patch --- tools/flask/policy/modules/dom0.te | 2 +- xen/arch/arm/xen.lds.S | 5 ---- xen/arch/x86/xen.lds.S | 5 ---- xen/common/hypfs.c | 12 +-------- xen/common/kernel.c | 11 -------- xen/common/sysctl.c | 36 -------------------------- xen/include/public/sysctl.h | 18 ------------- xen/include/xen/hypfs.h | 2 -- xen/include/xen/lib.h | 1 - xen/include/xen/param.h | 50 +++++++------------------------------ xen/xsm/flask/hooks.c | 3 --- xen/xsm/flask/policy/access_vectors | 2 -- 12 files changed, 11 insertions(+), 136 deletions(-) diff --git a/tools/flask/policy/modules/dom0.te b/tools/flask/policy/modules/dom0.te index 20925e38a2..0a63ce15b6 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 }; # Allow dom0 to use all XENVER_ subops that have checks. diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S index 0061a8dfea..8bd971bd57 100644 --- a/xen/arch/arm/xen.lds.S +++ b/xen/arch/arm/xen.lds.S @@ -54,11 +54,6 @@ SECTIONS *(.data.rel.ro) *(.data.rel.ro.*) - . = ALIGN(POINTER_ALIGN); - __param_start = .; - *(.data.param) - __param_end = .; - __proc_info_start = .; *(.proc.info) __proc_info_end = .; diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index 21a37f0f57..88f14e5e59 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -128,11 +128,6 @@ SECTIONS *(.ex_table.pre) __stop___pre_ex_table = .; - . = ALIGN(POINTER_ALIGN); - __param_start = .; - *(.data.param) - __param_end = .; - #if defined(CONFIG_HAS_VPCI) && defined(CONFIG_LATE_HWDOM) . = ALIGN(POINTER_ALIGN); __start_vpci_array = .; diff --git a/xen/common/hypfs.c b/xen/common/hypfs.c index 9503ef0731..f2e86e4632 100644 --- a/xen/common/hypfs.c +++ b/xen/common/hypfs.c @@ -302,7 +302,7 @@ int hypfs_write_custom(struct hypfs_entry_leaf *leaf, goto out; p = container_of(leaf, struct param_hypfs, hypfs); - ret = p->param->par.func(buf); + ret = p->func(buf); out: xfree(buf); @@ -375,13 +375,3 @@ long do_hypfs_op(unsigned int cmd, return ret; } - -void hypfs_write_lock(void) -{ - write_lock(&hypfs_lock); -} - -void hypfs_write_unlock(void) -{ - write_unlock(&hypfs_lock); -} diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 7516242337..876830f5fa 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -196,17 +196,6 @@ static void __init _cmdline_parse(const char *cmdline) parse_params(cmdline, __setup_start, __setup_end); } -int runtime_parse(const char *line) -{ - int ret; - - hypfs_write_lock(); - ret = parse_params(line, __param_start, __param_end); - hypfs_write_unlock(); - - return ret; -} - /** * cmdline_parse -- parses the xen command line. * If CONFIG_CMDLINE is set, it would be parsed prior to @cmdline. diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 1c6a817476..ec916424e5 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -471,42 +471,6 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) copyback = 1; break; - case XEN_SYSCTL_set_parameter: - { -#define XEN_SET_PARAMETER_MAX_SIZE 1023 - char *params; - - if ( op->u.set_parameter.pad[0] || op->u.set_parameter.pad[1] || - op->u.set_parameter.pad[2] ) - { - ret = -EINVAL; - break; - } - if ( op->u.set_parameter.size > XEN_SET_PARAMETER_MAX_SIZE ) - { - ret = -E2BIG; - break; - } - params = xmalloc_bytes(op->u.set_parameter.size + 1); - if ( !params ) - { - ret = -ENOMEM; - break; - } - if ( copy_from_guest(params, op->u.set_parameter.params, - op->u.set_parameter.size) ) - ret = -EFAULT; - else - { - params[op->u.set_parameter.size] = 0; - ret = runtime_parse(params); - } - - xfree(params); - - 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 7e43bfe1bd..0d243eb30c 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -1024,22 +1024,6 @@ struct xen_sysctl_livepatch_op { } u; }; -/* - * XEN_SYSCTL_set_parameter - * - * Change hypervisor parameters at runtime. - * The input string is parsed similar to the boot parameters. - * Parameters are a single string terminated by a NUL byte of max. size - * characters. Multiple settings can be specified by separating them - * with blanks. - */ - -struct xen_sysctl_set_parameter { - XEN_GUEST_HANDLE_64(char) params; /* IN: pointer to parameters. */ - uint16_t size; /* IN: size of parameters. */ - uint16_t pad[3]; /* IN: MUST be zero. */ -}; - #if defined(__i386__) || defined(__x86_64__) /* * XEN_SYSCTL_get_cpu_policy (x86 specific) @@ -1102,7 +1086,6 @@ struct xen_sysctl { #define XEN_SYSCTL_get_cpu_levelling_caps 25 #define XEN_SYSCTL_get_cpu_featureset 26 #define XEN_SYSCTL_livepatch_op 27 -#define XEN_SYSCTL_set_parameter 28 #define XEN_SYSCTL_get_cpu_policy 29 uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ union { @@ -1131,7 +1114,6 @@ struct xen_sysctl { struct xen_sysctl_cpu_levelling_caps cpu_levelling_caps; struct xen_sysctl_cpu_featureset cpu_featureset; struct xen_sysctl_livepatch_op livepatch; - struct xen_sysctl_set_parameter set_parameter; #if defined(__i386__) || defined(__x86_64__) struct xen_sysctl_cpu_policy cpu_policy; #endif diff --git a/xen/include/xen/hypfs.h b/xen/include/xen/hypfs.h index 6c1db290cb..84a8f9b338 100644 --- a/xen/include/xen/hypfs.h +++ b/xen/include/xen/hypfs.h @@ -101,7 +101,5 @@ int hypfs_write_bool(struct hypfs_entry_leaf *leaf, XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned long ulen); int hypfs_write_custom(struct hypfs_entry_leaf *leaf, XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned long ulen); -void hypfs_write_lock(void); -void hypfs_write_unlock(void); #endif /* __XEN_HYPFS_H__ */ diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h index 5d718bbdba..7e425e28cd 100644 --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -75,7 +75,6 @@ struct domain; void cmdline_parse(const char *cmdline); -int runtime_parse(const char *line); int parse_bool(const char *s, const char *e); /** diff --git a/xen/include/xen/param.h b/xen/include/xen/param.h index 7184113751..241cde33b1 100644 --- a/xen/include/xen/param.h +++ b/xen/include/xen/param.h @@ -27,16 +27,14 @@ struct kernel_param { }; struct param_hypfs { - const struct kernel_param *param; struct hypfs_entry_leaf hypfs; void (*init_leaf)(struct param_hypfs *par); + int (*func)(const char *); }; extern const struct kernel_param __setup_start[], __setup_end[]; -extern const struct kernel_param __param_start[], __param_end[]; extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; -#define __dataparam __used_section(".data.param") #define __paramhypfs __used_section(".data.paramhypfs") #define __param(att) static const att \ @@ -87,7 +85,6 @@ extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; { .name = setup_str_ign, \ .type = OPT_IGNORE } -#define __rtparam __param(__dataparam) #define __paramfs static __paramhypfs \ __attribute__((__aligned__(sizeof(void *)))) struct param_hypfs @@ -99,28 +96,17 @@ extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; /* initfunc needs to set size and content, e.g. via custom_runtime_set_var(). */ #define custom_runtime_only_param(_name, _var, initfunc) \ - __rtparam __rtpar_##_var = \ - { .name = _name, \ - .type = OPT_CUSTOM, \ - .par.func = _var }; \ __paramfs __parfs_##_var = \ - { .param = &__rtpar_##_var, \ - .init_leaf = initfunc, \ - .hypfs.e.type = XEN_HYPFS_TYPE_STRING, \ + { .hypfs.e.type = XEN_HYPFS_TYPE_STRING, \ .hypfs.e.encoding = XEN_HYPFS_ENC_PLAIN, \ .hypfs.e.name = _name, \ .hypfs.e.read = hypfs_read_leaf, \ - .hypfs.e.write = hypfs_write_custom } + .hypfs.e.write = hypfs_write_custom, \ + .init_leaf = initfunc, \ + .func = _var } #define boolean_runtime_only_param(_name, _var) \ - __rtparam __rtpar_##_var = \ - { .name = _name, \ - .type = OPT_BOOL, \ - .len = sizeof(_var) + \ - BUILD_BUG_ON_ZERO(sizeof(_var) != sizeof(bool)), \ - .par.var = &_var }; \ __paramfs __parfs_##_var = \ - { .param = &__rtpar_##_var, \ - .hypfs.e.type = XEN_HYPFS_TYPE_BOOL, \ + { .hypfs.e.type = XEN_HYPFS_TYPE_BOOL, \ .hypfs.e.encoding = XEN_HYPFS_ENC_PLAIN, \ .hypfs.e.name = _name, \ .hypfs.e.size = sizeof(_var), \ @@ -128,14 +114,8 @@ extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; .hypfs.e.write = hypfs_write_bool, \ .hypfs.content = &_var } #define integer_runtime_only_param(_name, _var) \ - __rtparam __rtpar_##_var = \ - { .name = _name, \ - .type = OPT_UINT, \ - .len = sizeof(_var), \ - .par.var = &_var }; \ __paramfs __parfs_##_var = \ - { .param = &__rtpar_##_var, \ - .hypfs.e.type = XEN_HYPFS_TYPE_UINT, \ + { .hypfs.e.type = XEN_HYPFS_TYPE_UINT, \ .hypfs.e.encoding = XEN_HYPFS_ENC_PLAIN, \ .hypfs.e.name = _name, \ .hypfs.e.size = sizeof(_var), \ @@ -143,14 +123,8 @@ extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; .hypfs.e.write = hypfs_write_leaf, \ .hypfs.content = &_var } #define size_runtime_only_param(_name, _var) \ - __rtparam __rtpar_##_var = \ - { .name = _name, \ - .type = OPT_SIZE, \ - .len = sizeof(_var), \ - .par.var = &_var }; \ __paramfs __parfs_##_var = \ - { .param = &__rtpar_##_var, \ - .hypfs.e.type = XEN_HYPFS_TYPE_UINT, \ + { .hypfs.e.type = XEN_HYPFS_TYPE_UINT, \ .hypfs.e.encoding = XEN_HYPFS_ENC_PLAIN, \ .hypfs.e.name = _name, \ .hypfs.e.size = sizeof(_var), \ @@ -158,14 +132,8 @@ extern struct param_hypfs __paramhypfs_start[], __paramhypfs_end[]; .hypfs.e.write = hypfs_write_leaf, \ .hypfs.content = &_var } #define string_runtime_only_param(_name, _var) \ - __rtparam __rtpar_##_var = \ - { .name = _name, \ - .type = OPT_STR, \ - .len = sizeof(_var), \ - .par.var = &_var }; \ __paramfs __parfs_##_var = \ - { .param = &__rtpar_##_var, \ - .hypfs.e.type = XEN_HYPFS_TYPE_STRING, \ + { .hypfs.e.type = XEN_HYPFS_TYPE_STRING, \ .hypfs.e.encoding = XEN_HYPFS_ENC_PLAIN, \ .hypfs.e.name = _name, \ .hypfs.e.size = sizeof(_var), \ diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index e257328928..9adb69f649 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -821,9 +821,6 @@ static int flask_sysctl(int cmd) case XEN_SYSCTL_coverage_op: return avc_current_has_perm(SECINITSID_XEN, SECCLASS_XEN2, XEN2__COVERAGE_OP, NULL); - case XEN_SYSCTL_set_parameter: - return avc_current_has_perm(SECINITSID_XEN, SECCLASS_XEN2, - XEN2__SET_PARAMETER, NULL); default: return avc_unknown_permission("sysctl", cmd); diff --git a/xen/xsm/flask/policy/access_vectors b/xen/xsm/flask/policy/access_vectors index c9e385fb9b..b87c99ea98 100644 --- a/xen/xsm/flask/policy/access_vectors +++ b/xen/xsm/flask/policy/access_vectors @@ -99,8 +99,6 @@ class xen2 livepatch_op # XEN_SYSCTL_coverage_op coverage_op -# XEN_SYSCTL_set_parameter - set_parameter } # Classes domain and domain2 consist of operations that a domain performs on