lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241004191104.GI1310185@kernel.org>
Date: Fri, 4 Oct 2024 20:11:04 +0100
From: Simon Horman <horms@...nel.org>
To: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
Cc: linux-hyperv@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
	linux-kernel@...r.kernel.org, kvm@...r.kernel.org,
	iommu@...ts.linux.dev, netdev@...r.kernel.org,
	linux-pci@...r.kernel.org, linux-arch@...r.kernel.org,
	virtualization@...ts.linux.dev, kys@...rosoft.com,
	haiyangz@...rosoft.com, wei.liu@...nel.org, decui@...rosoft.com,
	catalin.marinas@....com, will@...nel.org, luto@...nel.org,
	tglx@...utronix.de, mingo@...hat.com, bp@...en8.de,
	dave.hansen@...ux.intel.com, x86@...nel.org, hpa@...or.com,
	seanjc@...gle.com, pbonzini@...hat.com, peterz@...radead.org,
	daniel.lezcano@...aro.org, joro@...tes.org, robin.murphy@....com,
	davem@...emloft.net, edumazet@...gle.com, kuba@...nel.org,
	pabeni@...hat.com, lpieralisi@...nel.org, kw@...ux.com,
	robh@...nel.org, bhelgaas@...gle.com, arnd@...db.de,
	sgarzare@...hat.com, jinankjain@...ux.microsoft.com,
	muminulrussell@...il.com, skinsburskii@...ux.microsoft.com,
	mukeshrathor@...rosoft.com
Subject: Re: [PATCH 5/5] hyperv: Use hvhdk.h instead of hyperv-tlfs.h in
 Hyper-V code

On Thu, Oct 03, 2024 at 12:51:04PM -0700, Nuno Das Neves wrote:
> To move toward importing headers from Hyper-V directly, switch to
> using hvhdk.h in all Hyper-V code. KVM code that uses Hyper-V
> definitions from hyperv-tlfs.h remains untouched.
> 
> Add HYPERV_NONTLFS_HEADERS everywhere mshyperv.h, asm/svm.h,
> clocksource/hyperv_timer.h is included in Hyper-V code.
> 
> Replace hyperv-tlfs.h with hvhdk.h directly in linux/hyperv.h, and
> define HYPERV_NONTLFS_HEADERS there, since it is only used in
> Hyper-V device code.
> 
> Update a couple of definitions to updated names found in the new
> headers: HV_EXT_MEM_HEAT_HINT, HV_SUBNODE_TYPE_ANY.
> 
> Signed-off-by: Nuno Das Neves <nunodasneves@...ux.microsoft.com>

...

> diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c
> index b1a4de4eee29..62b2a270ae65 100644
> --- a/arch/arm64/hyperv/mshyperv.c
> +++ b/arch/arm64/hyperv/mshyperv.c
> @@ -15,6 +15,7 @@
>  #include <linux/errno.h>
>  #include <linux/version.h>
>  #include <linux/cpuhotplug.h>
> +#define HYPERV_NONTLFS_HEADERS
>  #include <asm/mshyperv.h>
>  
>  static bool hyperv_initialized;

Hi,

With this change in place I see allmodconfig x86_64 builds reporting that
HV_REGISTER_FEATURES is undeclared.

arch/arm64/hyperv/mshyperv.c: In function 'hyperv_init':
arch/arm64/hyperv/mshyperv.c:53:26: error: 'HV_REGISTER_FEATURES' undeclared (first use in this function); did you mean 'HV_REGISTER_FEATURES_INFO'?
   53 |         hv_get_vpreg_128(HV_REGISTER_FEATURES, &result);
      |                          ^~~~~~~~~~~~~~~~~~~~
      |                          HV_REGISTER_FEATURES_INFO
arch/arm64/hyperv/mshyperv.c:53:26: note: each undeclared identifier is reported only once for each function it appears in
arch/arm64/hyperv/mshyperv.c:58:26: error: 'HV_REGISTER_ENLIGHTENMENTS' undeclared (first use in this function); did you mean 'HV_ACCESS_REENLIGHTENMENT'?
   58 |         hv_get_vpreg_128(HV_REGISTER_ENLIGHTENMENTS, &result);
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          HV_ACCESS_REENLIGHTENMENT

> diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c
> index 6d83ceb7f1ba..5f4053c49658 100644
> --- a/arch/x86/entry/vdso/vma.c
> +++ b/arch/x86/entry/vdso/vma.c
> @@ -25,6 +25,7 @@
>  #include <asm/page.h>
>  #include <asm/desc.h>
>  #include <asm/cpufeature.h>
> +#define HYPERV_NONTLFS_HEADERS
>  #include <clocksource/hyperv_timer.h>
>  
>  #undef _ASM_X86_VVAR_H
> diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
> index f022d5f64fb6..4fe3b3b13256 100644
> --- a/arch/x86/hyperv/hv_apic.c
> +++ b/arch/x86/hyperv/hv_apic.c
> @@ -26,6 +26,7 @@
>  #include <linux/slab.h>
>  #include <linux/cpuhotplug.h>
>  #include <asm/hypervisor.h>
> +#define HYPERV_NONTLFS_HEADERS
>  #include <asm/mshyperv.h>
>  #include <asm/apic.h>
>  
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index fc3c3d76c181..680c4abc456e 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -19,6 +19,7 @@
>  #include <asm/sev.h>
>  #include <asm/ibt.h>
>  #include <asm/hypervisor.h>
> +#define HYPERV_NONTLFS_HEADERS
>  #include <asm/mshyperv.h>
>  #include <asm/idtentry.h>
>  #include <asm/set_memory.h>

And here too, with x86_64 allmodconfig.

In file included from ./include/linux/string.h:390,
                 from ./include/linux/efi.h:16,
                 from arch/x86/hyperv/hv_init.c:12:
arch/x86/hyperv/hv_init.c: In function 'get_vtl':
./include/linux/overflow.h:372:23: error: invalid application of 'sizeof' to incomplete type 'struct hv_get_vp_registers_input'
  372 |                 sizeof(*(p)) + flex_array_size(p, member, count),       \
      |                       ^
./include/linux/fortify-string.h:502:42: note: in definition of macro '__fortify_memset_chk'
  502 |         size_t __fortify_size = (size_t)(size);                         \
      |                                          ^~~~
arch/x86/hyperv/hv_init.c:427:9: note: in expansion of macro 'memset'
  427 |         memset(input, 0, struct_size(input, element, 1));
      |         ^~~~~~
arch/x86/hyperv/hv_init.c:427:26: note: in expansion of macro 'struct_size'
  427 |         memset(input, 0, struct_size(input, element, 1));
      |                          ^~~~~~~~~~~

[errors trimmed for the sake of brevity]

...

> diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c
> index 04775346369c..a8bb6ad7efb6 100644
> --- a/arch/x86/hyperv/hv_vtl.c
> +++ b/arch/x86/hyperv/hv_vtl.c
> @@ -10,6 +10,7 @@
>  #include <asm/boot.h>
>  #include <asm/desc.h>
>  #include <asm/i8259.h>
> +#define HYPERV_NONTLFS_HEADERS
>  #include <asm/mshyperv.h>
>  #include <asm/realmode.h>
>  #include <../kernel/smpboot.h>

And, likewise, with this patch applied I see a number of errors when
compiling this file. This is with allmodconfig on x86_64 with:

Modified: CONFIG_HYPERV=y (instead of m)
Added: CONFIG_HYPERV_VTL_MODE=y

arch/x86/hyperv/hv_vtl.c: In function 'hv_vtl_bringup_vcpu':
arch/x86/hyperv/hv_vtl.c:154:34: error: 'HVCALL_ENABLE_VP_VTL' undeclared (first use in this function)
  154 |         status = hv_do_hypercall(HVCALL_ENABLE_VP_VTL, input, NULL);
      |                                  ^~~~~~~~~~~~~~~~~~~~
arch/x86/hyperv/hv_vtl.c:154:34: note: each undeclared identifier is reported only once for each function it appears in
In file included from ./include/linux/string.h:390,
                 from ./include/linux/bitmap.h:13,
                 from ./include/linux/cpumask.h:12,
                 from ./arch/x86/include/asm/apic.h:5,
                 from arch/x86/hyperv/hv_vtl.c:9:
arch/x86/hyperv/hv_vtl.c: In function 'hv_vtl_apicid_to_vp_id':
arch/x86/hyperv/hv_vtl.c:189:32: error: invalid application of 'sizeof' to incomplete type 'struct hv_get_vp_from_apic_id_in'
  189 |         memset(input, 0, sizeof(*input));
      |                                ^
./include/linux/fortify-string.h:502:42: note: in definition of macro '__fortify_memset_chk'
  502 |         size_t __fortify_size = (size_t)(size);                         \
      |                                          ^~~~
arch/x86/hyperv/hv_vtl.c:189:9: note: in expansion of macro 'memset'
  189 |         memset(input, 0, sizeof(*input));
      |         ^~~~~~
arch/x86/hyperv/hv_vtl.c:190:14: error: invalid use of undefined type 'struct hv_get_vp_from_apic_id_in'
  190 |         input->partition_id = HV_PARTITION_ID_SELF;
      |              ^~
arch/x86/hyperv/hv_vtl.c:191:14: error: invalid use of undefined type 'struct hv_get_vp_from_apic_id_in'
  191 |         input->apic_ids[0] = apic_id;
      |              ^~
arch/x86/hyperv/hv_vtl.c:195:45: error: 'HVCALL_GET_VP_ID_FROM_APIC_ID' undeclared (first use in this function)
  195 |         control = HV_HYPERCALL_REP_COMP_1 | HVCALL_GET_VP_ID_FROM_APIC_ID;
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

...

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ