Module Name: src Committed By: riastradh Date: Wed Jul 6 01:12:46 UTC 2022
Modified Files: src/sys/dev/audio: audio.c src/sys/dev/nvmm: nvmm.c src/sys/external/bsd/drm2/dist/drm: drm_prime.c src/sys/external/bsd/drm2/drm: drm_cdevsw.c drm_gem_vm.c drm_vm.c src/sys/kern: kern_ksyms.c subr_kcov.c vfs_vnops.c src/sys/uvm: uvm_device.c uvm_mmap.c Log Message: uvm(9): fo_mmap caller guarantees positive size. No functional change intended, just sprinkling assertions to make it clearer. To generate a diff of this commit: cvs rdiff -u -r1.133 -r1.134 src/sys/dev/audio/audio.c cvs rdiff -u -r1.43 -r1.44 src/sys/dev/nvmm/nvmm.c cvs rdiff -u -r1.19 -r1.20 src/sys/external/bsd/drm2/dist/drm/drm_prime.c cvs rdiff -u -r1.29 -r1.30 src/sys/external/bsd/drm2/drm/drm_cdevsw.c cvs rdiff -u -r1.14 -r1.15 src/sys/external/bsd/drm2/drm/drm_gem_vm.c cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/drm2/drm/drm_vm.c cvs rdiff -u -r1.105 -r1.106 src/sys/kern/kern_ksyms.c cvs rdiff -u -r1.16 -r1.17 src/sys/kern/subr_kcov.c cvs rdiff -u -r1.228 -r1.229 src/sys/kern/vfs_vnops.c cvs rdiff -u -r1.73 -r1.74 src/sys/uvm/uvm_device.c cvs rdiff -u -r1.182 -r1.183 src/sys/uvm/uvm_mmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/audio/audio.c diff -u src/sys/dev/audio/audio.c:1.133 src/sys/dev/audio/audio.c:1.134 --- src/sys/dev/audio/audio.c:1.133 Sat Apr 23 11:44:01 2022 +++ src/sys/dev/audio/audio.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: audio.c,v 1.133 2022/04/23 11:44:01 isaki Exp $ */ +/* $NetBSD: audio.c,v 1.134 2022/07/06 01:12:45 riastradh Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -181,7 +181,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.133 2022/04/23 11:44:01 isaki Exp $"); +__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.134 2022/07/06 01:12:45 riastradh Exp $"); #ifdef _KERNEL_OPT #include "audio.h" @@ -2098,6 +2098,8 @@ audiommap(struct file *fp, off_t *offp, int bound; int error; + KASSERT(len > 0); + KASSERT(fp->f_audioctx); file = fp->f_audioctx; dev = file->dev; @@ -3562,6 +3564,8 @@ audio_mmap(struct audio_softc *sc, off_t TRACEF(2, file, "off=%lld, prot=%d", (long long)(*offp), prot); + KASSERT(len > 0); + if (*offp < 0) return EINVAL; Index: src/sys/dev/nvmm/nvmm.c diff -u src/sys/dev/nvmm/nvmm.c:1.43 src/sys/dev/nvmm/nvmm.c:1.44 --- src/sys/dev/nvmm/nvmm.c:1.43 Mon Apr 12 09:22:58 2021 +++ src/sys/dev/nvmm/nvmm.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm.c,v 1.43 2021/04/12 09:22:58 mrg Exp $ */ +/* $NetBSD: nvmm.c,v 1.44 2022/07/06 01:12:45 riastradh Exp $ */ /* * Copyright (c) 2018-2020 Maxime Villard, m00nbsd.net @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.43 2021/04/12 09:22:58 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.44 2022/07/06 01:12:45 riastradh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1099,6 +1099,8 @@ nvmm_mmap(file_t *fp, off_t *offp, size_ nvmm_cpuid_t cpuid; int error; + KASESRT(size > 0); + if (prot & PROT_EXEC) return EACCES; if (size != PAGE_SIZE) Index: src/sys/external/bsd/drm2/dist/drm/drm_prime.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.19 src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.20 --- src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.19 Sun Dec 19 11:37:23 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_prime.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_prime.c,v 1.19 2021/12/19 11:37:23 riastradh Exp $ */ +/* $NetBSD: drm_prime.c,v 1.20 2022/07/06 01:12:45 riastradh Exp $ */ /* * Copyright © 2012 Red Hat @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_prime.c,v 1.19 2021/12/19 11:37:23 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_prime.c,v 1.20 2022/07/06 01:12:45 riastradh Exp $"); #include <linux/export.h> #include <linux/dma-buf.h> @@ -901,6 +901,7 @@ int drm_gem_prime_mmap(struct drm_gem_ob goto out; #ifdef __NetBSD__ + KASSERT(size > 0); ret = obj->dev->driver->mmap_object(obj->dev, *offp, size, prot, uobjp, offp, fil); #else @@ -946,6 +947,7 @@ int drm_gem_dmabuf_mmap(struct dma_buf * return -ENOSYS; #ifdef __NetBSD__ + KASSERT(size > 0); return dev->driver->gem_prime_mmap(obj, offp, size, prot, flagsp, advicep, uobjp, maxprotp); #else Index: src/sys/external/bsd/drm2/drm/drm_cdevsw.c diff -u src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.29 src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.30 --- src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.29 Sun Dec 19 12:23:42 2021 +++ src/sys/external/bsd/drm2/drm/drm_cdevsw.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_cdevsw.c,v 1.29 2021/12/19 12:23:42 riastradh Exp $ */ +/* $NetBSD: drm_cdevsw.c,v 1.30 2022/07/06 01:12:45 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.29 2021/12/19 12:23:42 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.30 2022/07/06 01:12:45 riastradh Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -520,6 +520,8 @@ drm_fop_mmap(struct file *fp, off_t *off int error; KASSERT(fp == file->filp); + KASSERT(len > 0); + /* XXX errno Linux->NetBSD */ error = -(*dev->driver->mmap_object)(dev, *offp, len, prot, uobjp, offp, file->filp); Index: src/sys/external/bsd/drm2/drm/drm_gem_vm.c diff -u src/sys/external/bsd/drm2/drm/drm_gem_vm.c:1.14 src/sys/external/bsd/drm2/drm/drm_gem_vm.c:1.15 --- src/sys/external/bsd/drm2/drm/drm_gem_vm.c:1.14 Sun Dec 19 09:52:00 2021 +++ src/sys/external/bsd/drm2/drm/drm_gem_vm.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_gem_vm.c,v 1.14 2021/12/19 09:52:00 riastradh Exp $ */ +/* $NetBSD: drm_gem_vm.c,v 1.15 2022/07/06 01:12:45 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_gem_vm.c,v 1.14 2021/12/19 09:52:00 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_gem_vm.c,v 1.15 2022/07/06 01:12:45 riastradh Exp $"); #include <sys/types.h> #include <sys/file.h> @@ -71,6 +71,8 @@ drm_gem_or_legacy_mmap_object(struct drm { int ret; + KASSERT(nbytes > 0); + ret = drm_gem_mmap_object(dev, byte_offset, nbytes, prot, uobjp, uoffsetp, file); if (ret) @@ -88,6 +90,8 @@ drm_gem_mmap_object(struct drm_device *d { int ret; + KASSERT(nbytes > 0); + mutex_lock(&dev->struct_mutex); ret = drm_gem_mmap_object_locked(dev, byte_offset, nbytes, prot, uobjp, uoffsetp, file); Index: src/sys/external/bsd/drm2/drm/drm_vm.c diff -u src/sys/external/bsd/drm2/drm/drm_vm.c:1.12 src/sys/external/bsd/drm2/drm/drm_vm.c:1.13 --- src/sys/external/bsd/drm2/drm/drm_vm.c:1.12 Sun Dec 19 09:52:59 2021 +++ src/sys/external/bsd/drm2/drm/drm_vm.c Wed Jul 6 01:12:45 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vm.c,v 1.12 2021/12/19 09:52:59 riastradh Exp $ */ +/* $NetBSD: drm_vm.c,v 1.13 2022/07/06 01:12:45 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_vm.c,v 1.12 2021/12/19 09:52:59 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_vm.c,v 1.13 2022/07/06 01:12:45 riastradh Exp $"); #include <sys/types.h> #include <sys/conf.h> @@ -60,6 +60,7 @@ drm_legacy_mmap_object(struct drm_device struct uvm_object *uobj; KASSERT(offset == (offset & ~(PAGE_SIZE-1))); + KASSERT(size > 0); /* * Attach the device. The size and offset are used only for Index: src/sys/kern/kern_ksyms.c diff -u src/sys/kern/kern_ksyms.c:1.105 src/sys/kern/kern_ksyms.c:1.106 --- src/sys/kern/kern_ksyms.c:1.105 Wed Sep 22 05:42:19 2021 +++ src/sys/kern/kern_ksyms.c Wed Jul 6 01:12:46 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_ksyms.c,v 1.105 2021/09/22 05:42:19 rin Exp $ */ +/* $NetBSD: kern_ksyms.c,v 1.106 2022/07/06 01:12:46 riastradh Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.105 2021/09/22 05:42:19 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.106 2022/07/06 01:12:46 riastradh Exp $"); #if defined(_KERNEL) && defined(_KERNEL_OPT) #include "opt_copy_symtab.h" @@ -1395,6 +1395,7 @@ ksymsmmap(struct file *fp, off_t *offp, /* uvm_mmap guarantees page-aligned offset and size. */ KASSERT(*offp == round_page(*offp)); KASSERT(nbytes == round_page(nbytes)); + KASSERT(nbytes > 0); /* Refuse negative offsets. */ if (*offp < 0) Index: src/sys/kern/subr_kcov.c diff -u src/sys/kern/subr_kcov.c:1.16 src/sys/kern/subr_kcov.c:1.17 --- src/sys/kern/subr_kcov.c:1.16 Fri Jul 3 16:11:11 2020 +++ src/sys/kern/subr_kcov.c Wed Jul 6 01:12:46 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kcov.c,v 1.16 2020/07/03 16:11:11 maxv Exp $ */ +/* $NetBSD: subr_kcov.c,v 1.17 2022/07/06 01:12:46 riastradh Exp $ */ /* * Copyright (c) 2019-2020 The NetBSD Foundation, Inc. @@ -524,6 +524,8 @@ kcov_fops_mmap(file_t *fp, off_t *offp, kcov_t *kd, *kdbuf; int error = 0; + KASSERT(size > 0); + if (prot & PROT_EXEC) return EACCES; if (off < 0) Index: src/sys/kern/vfs_vnops.c diff -u src/sys/kern/vfs_vnops.c:1.228 src/sys/kern/vfs_vnops.c:1.229 --- src/sys/kern/vfs_vnops.c:1.228 Sun May 22 11:27:36 2022 +++ src/sys/kern/vfs_vnops.c Wed Jul 6 01:12:46 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnops.c,v 1.228 2022/05/22 11:27:36 andvar Exp $ */ +/* $NetBSD: vfs_vnops.c,v 1.229 2022/07/06 01:12:46 riastradh Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.228 2022/05/22 11:27:36 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.229 2022/07/06 01:12:46 riastradh Exp $"); #include "veriexec.h" @@ -919,6 +919,8 @@ vn_mmap(struct file *fp, off_t *offp, si flags = *flagsp; maxprot = VM_PROT_EXECUTE; + KASSERT(size > 0); + vp = fp->f_vnode; if (vp->v_type != VREG && vp->v_type != VCHR && vp->v_type != VBLK) { Index: src/sys/uvm/uvm_device.c diff -u src/sys/uvm/uvm_device.c:1.73 src/sys/uvm/uvm_device.c:1.74 --- src/sys/uvm/uvm_device.c:1.73 Mon Mar 28 12:39:18 2022 +++ src/sys/uvm/uvm_device.c Wed Jul 6 01:12:46 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_device.c,v 1.73 2022/03/28 12:39:18 riastradh Exp $ */ +/* $NetBSD: uvm_device.c,v 1.74 2022/07/06 01:12:46 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_device.c,v 1.73 2022/03/28 12:39:18 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_device.c,v 1.74 2022/07/06 01:12:46 riastradh Exp $"); #include "opt_uvmhist.h" @@ -117,6 +117,8 @@ udv_attach(dev_t device, vm_prot_t acces UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(maphist, "(device=%#jx)", device,0,0,0); + KASSERT(size > 0); + /* * before we do anything, ensure this device supports mmap */ Index: src/sys/uvm/uvm_mmap.c diff -u src/sys/uvm/uvm_mmap.c:1.182 src/sys/uvm/uvm_mmap.c:1.183 --- src/sys/uvm/uvm_mmap.c:1.182 Wed Jul 6 00:40:28 2022 +++ src/sys/uvm/uvm_mmap.c Wed Jul 6 01:12:46 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_mmap.c,v 1.182 2022/07/06 00:40:28 riastradh Exp $ */ +/* $NetBSD: uvm_mmap.c,v 1.183 2022/07/06 01:12:46 riastradh Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.182 2022/07/06 00:40:28 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.183 2022/07/06 01:12:46 riastradh Exp $"); #include "opt_compat_netbsd.h" #include "opt_pax.h" @@ -1011,6 +1011,8 @@ uvm_mmap_dev(struct proc *p, void **addr struct uvm_object *uobj; int error, flags, prot; + KASSERT(len > 0); + flags = MAP_SHARED; prot = VM_PROT_READ | VM_PROT_WRITE; if (*addrp)