Bug 24230 – Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone
Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P1
Component
druntime
Product
D
Version
D2
Platform
x86_64
OS
Solaris
Creation time
2023-11-06T16:28:16Z
Last change time
2023-11-20T11:13:28Z
Keywords
pull
Assigned to
No Owner
Creator
Iain Buclaw
Comments
Comment #0 by ibuclaw — 2023-11-06T16:28:16Z
Any program that pulls in core.cpuid results in an infinite loop when running inside a Solaris kernel zone.
https://github.com/dlang/dmd/blob/d24a8859b090911a2a48cbbd7666ff7e448acfc8/druntime/src/core/cpuid.d#L672-L696
Quote from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112408
---
Running getCpuInfo0B side-by-side in the kernel zone and on bare metal shows:
kernel zone bare metal
level 0
a 0 1
b 1 2
level 1
a 0 5
b 1 28
level 2
a 0 0
b 1 0
and so on for each higher level. So inside a kernel zone, a!=0 || b!=0 remains
true, explaining the loop.
If I'm reading the spec (Intel® 64 and IA-32 Architectures
Software Developer’s Manual, Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B,
3C, 3D, and 4, Order Number: 325462-081US, September 2023, Vol. 2A,
3-225, p.821) correctly, this is a bug in the kernel zone software:
A sub-leaf returning an invalid domain always returns 0 in EAX and EBX.
OTOH I don't see why getCpuInfo0B needs to loop here since it's only interested
in levels 0 and 1 anyway.
---
Comment #1 by dlang-bot — 2023-11-06T17:13:59Z
@ibuclaw created dlang/dmd pull request #15778 "fix Issue 24230 - Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone" fixing this issue:
- fix Issue 24230 - Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone
https://github.com/dlang/dmd/pull/15778
Comment #2 by dlang-bot — 2023-11-07T06:22:15Z
dlang/dmd pull request #15778 "fix Issue 24230 - Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone" was merged into stable:
- a52b48111411b0a88858f44db84cf6f3dfb8a1ca by Iain Buclaw:
fix Issue 24230 - Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone
https://github.com/dlang/dmd/pull/15778
Comment #3 by dlang-bot — 2023-11-20T11:13:28Z
dlang/dmd pull request #15829 "merge stable" was merged into master:
- 505e475b373a40d81635ee1df16cc1818448bb20 by Iain Buclaw:
fix Issue 24230 - Infinite loop in core.cpuid.getCpuInfo0B in Solaris/x86 kernel zone
https://github.com/dlang/dmd/pull/15829