Re: What is the range of illegle memory addresses?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2021-05-18 at 10:55 -0500, Peng Yu via Gcc-help wrote:
> Hi,
> 
> NULL (0) is a commonly used value for an invalid memory address. I
> also see -1 is used for an illegal memory address.
> 
> Besides those values, I'd suspect that other values that are close to
> 0 (both negatives and positives) won't appear in real programs.
> 
> Is there a limit on the safe range that can be assumed to not be used
> by user level code as valid addresses?

Using a value from dereferencing NULL is always undefined behavior. 
Otherwise, it depends on platform, OS, and system configuration.

For example, on x86_64 Linux with 4-level page table [1] the userspace
address space is 47-bit.   So in non-kernel code any pointers >= 2^{47}
can be considered invalid.

For another example, on 32-bit x86 Linux with KPTI enabled, a valid
userspace pointer can be very close to 0xFFFFFFFF.  I'm not sure how
close, but I've observed some problem [2] caused by this.

Again, this question is off-topic.  I can't see how this is related to
GCC anyway.

[1]: https://www.kernel.org/doc/html/latest/x86/x86_64/mm.html
[2]: https://github.com/python/cpython/pull/13205
-- 
Xi Ruoyao <xry111@xxxxxxxxxxxxxxxx>
School of Aerospace Science and Technology, Xidian University




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux