⬢ DragonFlyBSD Kernel Audit
DF-5658 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/platform/vkernel64/x86_64/genassym.c b/sys/platform/vkernel64/x86_64/genassym.c
--- a/sys/platform/vkernel64/x86_64/genassym.c
+++ b/sys/platform/vkernel64/x86_64/genassym.c
@@ -119,3 +119,24 @@
 ASSYM(TD_SAVEFPU, offsetof(struct thread, td_savefpu));
 ASSYM(TDF_RUNNING, TDF_RUNNING);
 ASSYM(GD_NPXTHREAD, offsetof(struct mdglobaldata, gd_npxthread));
+
+/*
+ * Consumed by global.s (.set alias exports).  Omitting any of these makes
+ * gas resolve the macro as an undefined external symbol: the .set alias and
+ * its .globl export silently vanish from the linked vkernel with no build
+ * diagnostic (the vkernel is linked as a user program; undefined symbols
+ * without relocations are tolerated by ld).
+ */
+ASSYM(GD_REQFLAGS, offsetof(struct mdglobaldata, mi.gd_reqflags));
+ASSYM(GD_CNT, offsetof(struct mdglobaldata, mi.gd_cnt));
+ASSYM(GD_INTR_NESTING_LEVEL, offsetof(struct mdglobaldata, mi.gd_intr_nesting_level));
+ASSYM(GD_COMMON_TSSD, offsetof(struct mdglobaldata, gd_common_tssd));
+ASSYM(GD_TSS_GDT, offsetof(struct mdglobaldata, gd_tss_gdt));
+ASSYM(GD_COMMON_TSS, offsetof(struct mdglobaldata, gd_common_tss));
+ASSYM(GD_SAVEFPU, offsetof(struct mdglobaldata, gd_savefpu));
+ASSYM(GD_FPU_LOCK, offsetof(struct mdglobaldata, gd_fpu_lock));
+ASSYM(GD_FPENDING, offsetof(struct mdglobaldata, gd_fpending));
+ASSYM(GD_IPENDING, offsetof(struct mdglobaldata, gd_ipending));
+ASSYM(GD_SPENDING, offsetof(struct mdglobaldata, gd_spending));
+ASSYM(GD_CURRENTLDT, offsetof(struct mdglobaldata, gd_currentldt));
+ASSYM(GD_SS_EFLAGS, offsetof(struct mdglobaldata, gd_ss_eflags));
diff --git a/sys/platform/vkernel64/x86_64/global.s b/sys/platform/vkernel64/x86_64/global.s
--- a/sys/platform/vkernel64/x86_64/global.s
+++ b/sys/platform/vkernel64/x86_64/global.s
@@ -74,8 +74,6 @@
 	 */
 	.globl  gd_cpuid, gd_other_cpus
 	.globl	gd_ss_eflags, gd_intr_nesting_level
-	.globl  gd_CMAP1, gd_CMAP2, gd_CMAP3, gd_PMAP1
-	.globl  gd_CADDR1, gd_CADDR2, gd_CADDR3, gd_PADDR1
 	.globl  gd_spending, gd_ipending, gd_fpending
 	.globl	gd_cnt
 
@@ -83,14 +81,6 @@
 	.set    gd_other_cpus,globaldata + GD_OTHER_CPUS
 	.set    gd_ss_eflags,globaldata + GD_SS_EFLAGS
 	.set    gd_intr_nesting_level,globaldata + GD_INTR_NESTING_LEVEL
-	.set    gd_CMAP1,globaldata + GD_PRV_CMAP1
-	.set    gd_CMAP2,globaldata + GD_PRV_CMAP2
-	.set    gd_CMAP3,globaldata + GD_PRV_CMAP3
-	.set    gd_PMAP1,globaldata + GD_PRV_PMAP1
-	.set    gd_CADDR1,globaldata + GD_PRV_CADDR1
-	.set    gd_CADDR2,globaldata + GD_PRV_CADDR2
-	.set    gd_CADDR3,globaldata + GD_PRV_CADDR3
-	.set    gd_PADDR1,globaldata + GD_PRV_PADDR1
 	.set	gd_fpending,globaldata + GD_FPENDING
 	.set	gd_ipending,globaldata + GD_IPENDING
 	.set	gd_spending,globaldata + GD_SPENDING