On Wed, Nov 07, 2018 at 05:08:17PM +0100, Lucas Stach wrote: > Am Mittwoch, den 07.11.2018, 16:45 +0300 schrieb Peter Mamonov: > > Hi, Lucas, > > > > On Tue, Nov 06, 2018 at 05:14:07PM +0100, Lucas Stach wrote: > > > On 64bit arches the file covering the whole address space is larger than > > > what can be represented in the loff_t type (s64) used for the file size. > > > Thus the size of this device is interpreted as negative in a lot of > > > places. Fix this by truncating the size to fit the file size type. > > > > While this is probably an appropriate solution for some architectures, it will > > cause problems on MIPS64. The root of evil is MIPS64 address space > > segmentation: https://docplayer.net/docs-images/25/4553906/images/21-0.png). > > Most notably your patch prevents access to the xkphys segment, where most > > peripheral devices of a SoC are accessible. > > Isn't this a problem for MIPS64 even before my patch? For example the > "mw" command uses open_and_lseek on the dev/mem file with the address > of the write being the seek offset. As this is a loff_t value, seeking > to something with the highest order bit set won't do what you expect to > happen, right? You are right. I fixed this in a straightforward manner (see the patch below). Guess it's time to find a better solution :) Author: Peter Mamonov <pmamonov@xxxxxxxxx> Date: Thu Jul 6 13:32:53 2017 +0300 FIXME: fs: fix memory access for 64bit MIPS diff --git a/fs/fs.c b/fs/fs.c index f61ee091b5..45190812c5 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -941,8 +941,6 @@ loff_t lseek(int fildes, loff_t offset, int whence) case SEEK_SET: if (f->size != FILE_SIZE_STREAM && offset > f->size) goto out; - if (offset < 0) - goto out; pos = offset; break; case SEEK_CUR: @@ -960,10 +958,6 @@ loff_t lseek(int fildes, loff_t offset, int whence) } pos = fsdrv->lseek(&f->fsdev->dev, f, pos); - if (pos < 0) { - errno = -pos; - return -1; - } return pos; Regards, Peter > > Regards, > Lucas _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox