Module Name:    src
Committed By:   kamil
Date:           Sat Apr  4 19:24:51 UTC 2020

Modified Files:
        src/sys/rump/librump/rumpvfs: rumpfs.c

Log Message:
Avoid copying zero-sized objects (from the NULL address)

Detected with UBSan


To generate a diff of this commit:
cvs rdiff -u -r1.154 -r1.155 src/sys/rump/librump/rumpvfs/rumpfs.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/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.154 src/sys/rump/librump/rumpvfs/rumpfs.c:1.155
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.154	Fri Jan 17 20:08:09 2020
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Sat Apr  4 19:24:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.154 2020/01/17 20:08:09 ad Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.155 2020/04/04 19:24:51 kamil Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.154 2020/01/17 20:08:09 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.155 2020/04/04 19:24:51 kamil Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -977,7 +977,8 @@ rump_vop_setattr(void *v)
 			return ENOSPC;
 
 		copylen = MIN(rn->rn_dlen, newlen);
-		memcpy(newdata, rn->rn_data, copylen);
+		if (copylen > 0)
+			memcpy(newdata, rn->rn_data, copylen);
 		memset((char *)newdata + copylen, 0, newlen - copylen);
 
 		if ((rn->rn_flags & RUMPNODE_EXTSTORAGE) == 0) {
@@ -1492,7 +1493,8 @@ rump_vop_write(void *v)
 			return ENOSPC;
 		rn->rn_dlen = newlen;
 		memset(rn->rn_data, 0, newlen);
-		memcpy(rn->rn_data, olddata, oldlen);
+		if (oldlen > 0)
+			memcpy(rn->rn_data, olddata, oldlen);
 		allocd = true;
 		uvm_vnp_setsize(vp, newlen);
 	}

Reply via email to