Skip to content

Commit

Permalink
NetBSD's mod.rs: fix cpuid_t definition.
Browse files Browse the repository at this point in the history
...in particular for 32-bit CPUs / ports, such as 32-bit arm,
i386, and powerpc.

In the C header files on NetBSD, this is defined as

  typedef unsigned long   cpuid_t;

and on ILP32 CPUs, that ends up being a 32-bit quantity.
Defining this as a 64-bit type wrecks havoc on our 32-bit ports
when e.g. _cpuset_isset() is used (as was introduced with 1.72.0),
causing immediate SEGV due to NULL pointer de-reference, as observed
in

  rust-lang/rust#116665

So, instead, define it as ::c_ulong, and let the CPU-specific type
definitions take care of the sizing.
  • Loading branch information
he32 authored and Brijeshkrishna committed Oct 22, 2023
1 parent b0469b6 commit f63fb62
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/unix/bsd/netbsdlike/netbsd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type __pthread_spin_t = __cpu_simple_lock_nv_t;
pub type vm_size_t = ::uintptr_t; // FIXME: deprecated since long time
pub type lwpid_t = ::c_uint;
pub type shmatt_t = ::c_uint;
pub type cpuid_t = u64;
pub type cpuid_t = ::c_ulong;
pub type cpuset_t = _cpuset;
pub type pthread_spin_t = ::c_uchar;
pub type timer_t = ::c_int;
Expand Down

0 comments on commit f63fb62

Please sign in to comment.