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)