On Tue, Jan 31, 2023 at 1:49 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:
Everything else seems to be going with EFAULT.
So I think fo kernel faults it's always basically up to the exception handler, and sending a signal regardless of that is just wrong. Of course, an exception handler might choose to send a signal, but it just shouldn't be the do_page_fault() handler that does it. For user faults, I think the rule ends up being that "if there's no mapping, or if there is a protection fault, then we should do SIGSEGV". If there's an actual mapping in place, and the mapping has the right permissions for the access, but fails for some *other* reason, then we send SIGBUS. So a shared mmap past the end of the file (but within the area that was used for mmap) would SIGBUS, while a write to a read-only mapping would SIGSEGV. Things like unaligned accesses also might SIGBUS rather than SIGSEGV. And I'm not surprised that there are exceptions to the rule, because almost nothing really cares. In most situations, it's a fatal error. And even when catching them, the end result is generally the same (either "print out helpful message and die", or "longjump to some safe code"). So most of the time it's probably not going to matter all that much which signal gets sent in practice. Linus