Bring in FreeBSD/1.206 by Alan Cox, bde@, and tegge@:
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 10 Dec 2004 19:50:32 +0000 (19:50 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 10 Dec 2004 19:50:32 +0000 (19:50 +0000)
Almost nine years ago, when support for 1TB files was introduced in
revision 1.55, the address parameter to vnode_pager_addr() was changed
from an unsigned 32-bit quantity to a signed 64-bit quantity.  However,
an out-of-range check on the address was not updated.  Consequently,
memory-mapped I/O on files greater than 2GB could cause a kernel panic.
Since the address is now a signed 64-bit quantity, the problem resolution
is simply to remove a cast.

PR: FreeBSD/73010

sys/vm/vnode_pager.c

index 7e67300..be2a198 100644 (file)
@@ -39,7 +39,7 @@
  *
  *     from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91
  * $FreeBSD: src/sys/vm/vnode_pager.c,v 1.116.2.7 2002/12/31 09:34:51 dillon Exp $
- * $DragonFly: src/sys/vm/vnode_pager.c,v 1.16 2004/10/12 19:21:16 dillon Exp $
+ * $DragonFly: src/sys/vm/vnode_pager.c,v 1.17 2004/12/10 19:50:32 dillon Exp $
  */
 
 /*
@@ -370,7 +370,7 @@ vnode_pager_addr(struct vnode *vp, vm_ooffset_t address, int *run)
        daddr_t vblock;
        int voffset;
 
-       if ((int) address < 0)
+       if (address < 0)
                return -1;
 
        if (vp->v_mount == NULL)