diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-05-26 00:45:10 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-05-26 00:45:10 +0200 |
| commit | 3dc82dc04bc87f6f86300bd9b4451034e5399e51 (patch) | |
| tree | 3a7f53ac0ef4dcb74f714f2885a92751165ed8b8 | |
| parent | 15fc6c1cc05249f342ff4279688f1f9c4e162dec (diff) | |
| download | plan9front-3dc82dc04bc87f6f86300bd9b4451034e5399e51.tar.xz | |
pc64: fix ulongs for address of devarchs realmodemem file
| -rw-r--r-- | sys/src/9/pc/devarch.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/sys/src/9/pc/devarch.c b/sys/src/9/pc/devarch.c index 71c59ffff..7cd845c08 100644 --- a/sys/src/9/pc/devarch.c +++ b/sys/src/9/pc/devarch.c @@ -1010,20 +1010,22 @@ archctlwrite(Chan*, void *a, long n, vlong) static long rmemrw(int isr, void *a, long n, vlong off) { + uintptr addr = off; + if(off < 0 || n < 0) error("bad offset/count"); if(isr){ - if(off >= MB) + if(addr >= MB) return 0; - if(off+n >= MB) - n = MB - off; - memmove(a, KADDR((ulong)off), n); + if(addr+n >= MB) + n = MB - addr; + memmove(a, KADDR(addr), n); }else{ - /* allow vga framebuf's access */ - if(off >= MB || off+n > MB || - (off < 0xA0000 || off+n > 0xB0000+0x10000)) + /* allow vga framebuf's write access */ + if(addr >= MB || addr+n > MB || + (addr < 0xA0000 || addr+n > 0xB0000+0x10000)) error("bad offset/count in write"); - memmove(KADDR((ulong)off), a, n); + memmove(KADDR(addr), a, n); } return n; } |
