From 2185188f8360ea1952c7339c2702a16f15b12be1 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 24 May 2014 01:27:57 +0200 Subject: kernel: fix read size calculation in pio() demand load on amd64, the text segment is aligned and padded to 2MB, but segment granularity is 4K which can give us page faults that are beyond the highest file offset. this is perfectly valid, but was not handled correctly in pio(). --- sys/src/9/port/fault.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'sys/src/9/port/fault.c') diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c index 1919c2890..3d4530401 100644 --- a/sys/src/9/port/fault.c +++ b/sys/src/9/port/fault.c @@ -211,9 +211,11 @@ retry: } c = s->image->c; - ask = s->flen-soff; - if(ask > BY2PG) - ask = BY2PG; + ask = BY2PG; + if(soff >= s->flen) + ask = 0; + else if((soff+ask) > s->flen) + ask = s->flen-soff; } else { /* from a swap image */ daddr = swapaddr(loadrec); -- cgit v1.2.3