Module Name: src Committed By: maxv Date: Fri Nov 15 08:11:37 UTC 2019
Modified Files: src/sys/kern: subr_csan.c src/sys/sys: systm.h Log Message: Instrument copyout() in kCSan, for parity with kMSan. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/kern/subr_csan.c cvs rdiff -u -r1.289 -r1.290 src/sys/sys/systm.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/subr_csan.c diff -u src/sys/kern/subr_csan.c:1.4 src/sys/kern/subr_csan.c:1.5 --- src/sys/kern/subr_csan.c:1.4 Thu Nov 14 16:56:13 2019 +++ src/sys/kern/subr_csan.c Fri Nov 15 08:11:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_csan.c,v 1.4 2019/11/14 16:56:13 maxv Exp $ */ +/* $NetBSD: subr_csan.c,v 1.5 2019/11/15 08:11:37 maxv Exp $ */ /* * Copyright (c) 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_csan.c,v 1.4 2019/11/14 16:56:13 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_csan.c,v 1.5 2019/11/15 08:11:37 maxv Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -326,17 +326,20 @@ kcsan_strlen(const char *str) #undef copyinstr #undef copyoutstr #undef copyin +#undef copyout int kcsan_kcopy(const void *, void *, size_t); int kcsan_copystr(const void *, void *, size_t, size_t *); int kcsan_copyinstr(const void *, void *, size_t, size_t *); int kcsan_copyoutstr(const void *, void *, size_t, size_t *); int kcsan_copyin(const void *, void *, size_t); +int kcsan_copyout(const void *, void *, size_t); int kcopy(const void *, void *, size_t); int copystr(const void *, void *, size_t, size_t *); int copyinstr(const void *, void *, size_t, size_t *); int copyoutstr(const void *, void *, size_t, size_t *); int copyin(const void *, void *, size_t); +int copyout(const void *, void *, size_t); int kcsan_kcopy(const void *src, void *dst, size_t len) @@ -361,6 +364,13 @@ kcsan_copyin(const void *uaddr, void *ka } int +kcsan_copyout(const void *kaddr, void *uaddr, size_t len) +{ + kcsan_access((uintptr_t)kaddr, len, false, false, __RET_ADDR); + return copyout(kaddr, uaddr, len); +} + +int kcsan_copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done) { kcsan_access((uintptr_t)kaddr, len, true, false, __RET_ADDR); Index: src/sys/sys/systm.h diff -u src/sys/sys/systm.h:1.289 src/sys/sys/systm.h:1.290 --- src/sys/sys/systm.h:1.289 Thu Nov 14 16:23:53 2019 +++ src/sys/sys/systm.h Fri Nov 15 08:11:36 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: systm.h,v 1.289 2019/11/14 16:23:53 maxv Exp $ */ +/* $NetBSD: systm.h,v 1.290 2019/11/15 08:11:36 maxv Exp $ */ /*- * Copyright (c) 1982, 1988, 1991, 1993 @@ -299,11 +299,12 @@ int kcsan_copystr(const void *, void *, int kcsan_copyinstr(const void *, void *, size_t, size_t *); int kcsan_copyoutstr(const void *, void *, size_t, size_t *); int kcsan_copyin(const void *, void *, size_t); -int copyout(const void *, void *, size_t); +int kcsan_copyout(const void *, void *, size_t); #define copystr kcsan_copystr #define copyinstr kcsan_copyinstr #define copyoutstr kcsan_copyoutstr #define copyin kcsan_copyin +#define copyout kcsan_copyout #elif defined(_KERNEL) && defined(KMSAN) int kmsan_copystr(const void *, void *, size_t, size_t *); int kmsan_copyinstr(const void *, void *, size_t, size_t *);