kernel/ve/ve.c references x86-specific symbols (vdso_image_64, vdso_image_32, TIF_CPUID_OVERRIDE, cpuid_override_on()) that are not available under UML. Guard all VDSO image copying, freeing, and version-code patching, as well as the CPUID override flag propagation, with #ifdef CONFIG_X86.
Provide a static inline no-op stub for ve_free_vdso() on UML. Also guard the ve_get_vdso_32/64() stubs in the !CONFIG_VE section of ve.h with the same #ifdef CONFIG_X86, since the vdso_image_32 and vdso_image_64 externs they reference are equally unavailable. Signed-off-by: Eva Kurchatova <[email protected]> https://virtuozzo.atlassian.net/browse/VSTOR-134732 Feature: fix kunit --- include/linux/ve.h | 2 +- kernel/ve/ve.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/linux/ve.h b/include/linux/ve.h index 1d32f6f57f8b..778dd4890c6a 100644 --- a/include/linux/ve.h +++ b/include/linux/ve.h @@ -367,7 +367,7 @@ static inline void ve_setup_task(struct task_struct *p, struct ve_struct *ve) { static inline void ve_set_rpc_kill_fn(void (*fn)(struct net *, bool)) { } -#if defined(CONFIG_X86) && !defined(CONFIG_UML) +#ifdef CONFIG_X86 static inline struct vdso_image *ve_get_vdso_32(struct ve_struct *ve) { return (struct vdso_image *)&vdso_image_32; diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c index e58ffb22da87..a4d445c80333 100644 --- a/kernel/ve/ve.c +++ b/kernel/ve/ve.c @@ -82,8 +82,10 @@ struct ve_struct ve0 = { .meminfo_val = VE_MEMINFO_SYSTEM, .umh_running_helpers = ATOMIC_INIT(0), .umh_helpers_waitq = __WAIT_QUEUE_HEAD_INITIALIZER(ve0.umh_helpers_waitq), +#ifdef CONFIG_X86 .vdso_64 = (struct vdso_image*)&vdso_image_64, .vdso_32 = (struct vdso_image*)&vdso_image_32, +#endif }; EXPORT_SYMBOL(ve0); @@ -672,6 +674,7 @@ u64 ve_get_uptime(struct ve_struct *ve) } EXPORT_SYMBOL(ve_get_uptime); +#ifdef CONFIG_X86 static int copy_vdso(struct vdso_image **vdso_dst, const struct vdso_image *vdso_src) { struct vdso_image *vdso; @@ -709,6 +712,9 @@ static void ve_free_vdso(struct ve_struct *ve) kfree(ve->vdso_32); } } +#else +static inline void ve_free_vdso(struct ve_struct *ve) { } +#endif static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_css) { @@ -755,6 +761,7 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ if (err) goto err_log; +#ifdef CONFIG_X86 err = copy_vdso(&ve->vdso_64, &vdso_image_64); if (err) goto err_vdso; @@ -762,6 +769,7 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ err = copy_vdso(&ve->vdso_32, &vdso_image_32); if (err) goto err_vdso; +#endif err = ve_mount_devtmpfs(ve); if (err) @@ -1152,8 +1160,10 @@ static ssize_t ve_os_release_write(struct kernfs_open_file *of, char *buf, if (sscanf(buf, "%d.%d.%d", &n1, &n2, &n3) == 3) { new_version = ((n1 << 16) + (n2 << 8)) + n3; +#ifdef CONFIG_X86 *((int *)(ve->vdso_64->data + ve->vdso_64->sym_linux_version_code)) = new_version; *((int *)(ve->vdso_32->data + ve->vdso_32->sym_linux_version_code)) = new_version; +#endif } down_write(&uts_sem); @@ -1836,8 +1846,10 @@ void ve_setup_task(struct task_struct *task, struct ve_struct *ve) ve_set_task_start_time(ve, task); +#ifdef CONFIG_X86 if (cpuid_override_on()) set_tsk_thread_flag(task, TIF_CPUID_OVERRIDE); +#endif } EXPORT_SYMBOL(ve_setup_task); -- 2.54.0 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
