On 18.01.2019 09:00, Martin Husemann wrote: > On Thu, Jan 17, 2019 at 09:52:17PM +0100, Kamil Rytarowski wrote: >> The problem is that when we are in coredump_getseghdrs_elf64() and call >> copyin_proc() -> copyin_vmspace() -> copyin() we trigger a trap that is >> translated through trap() -> ... -> genfs_getpages() to EINVAL as there >> are no pages assigned to a mamory address. > > This is normal behaviour and uvm should assign an empty page at that > point. Why is that not working - i.e. what is special about this situation? > > Martin > It's not working because in genfs_getpages() we trigger the following condition: /* * Bounds-check the request. */ if (origoffset + (ap->a_centeridx << PAGE_SHIFT) >= memeof) { if ((flags & PGO_LOCKED) == 0) { mutex_exit(uobj->vmobjlock); } UVMHIST_LOG(ubchist, "off 0x%jx count %jd goes past EOF 0x%jx", origoffset, *ap->a_count, memeof,0); error = EINVAL; goto out_err; } -- src/sys/miscfs/genfs/genfs_io.c The test deliberately triggers equivalent scenario that results with a trap and a core(5) file generation, issuing a SIGBUS signal. The expected behavior is to dumped these page(s) into a core(5) file with a zeroed content.
Attachment:
signature.asc
Description: OpenPGP digital signature