Module Name:    src
Committed By:   maxv
Date:           Sat Feb  8 07:07:07 UTC 2020

Modified Files:
        src/share/man/man4: options.4
        src/share/mk: bsd.sys.mk
        src/sys/arch/amd64/conf: ALL GENERIC
        src/sys/arch/amd64/include: param.h
        src/sys/conf: files ssp.mk
        src/sys/kern: files.kern subr_pool.c sys_syscall.c
        src/sys/sys: systm.h
        src/sys/uvm: uvm_km.c
Removed Files:
        src/sys/arch/amd64/include: kleak.h
        src/sys/kern: subr_kleak.c
        src/usr.sbin/kleak: Makefile kleak.c

Log Message:
Retire KLEAK.

KLEAK was a nice feature and served its purpose; it allowed us to detect
dozens of info leaks on the kernel->userland boundary, and thanks to it we
tackled a good part of the infoleak problem 1.5 years ago.

Nowadays however, we have kMSan, which can detect uninitialized memory in
the kernel. kMSan supersedes KLEAK: it can detect what KLEAK was able to
detect, but in addition, (1) it operates in all of the kernel and not just
the kernel->userland boundary, (2) it requires no user interaction, and (3)
it is deterministic and not statistical.

That makes kMSan the feature of choice to detect info leaks nowadays;
people interested in detecting info leaks should boot a kMSan kernel and
just wait for the magic to happen.

KLEAK was a good ride, and a fun project, but now is time for it to go.

Discussed with several people, including Thomas Barabosch.


To generate a diff of this commit:
cvs rdiff -u -r1.507 -r1.508 src/share/man/man4/options.4
cvs rdiff -u -r1.298 -r1.299 src/share/mk/bsd.sys.mk
cvs rdiff -u -r1.144 -r1.145 src/sys/arch/amd64/conf/ALL
cvs rdiff -u -r1.560 -r1.561 src/sys/arch/amd64/conf/GENERIC
cvs rdiff -u -r1.1 -r0 src/sys/arch/amd64/include/kleak.h
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/amd64/include/param.h
cvs rdiff -u -r1.1254 -r1.1255 src/sys/conf/files
cvs rdiff -u -r1.4 -r1.5 src/sys/conf/ssp.mk
cvs rdiff -u -r1.42 -r1.43 src/sys/kern/files.kern
cvs rdiff -u -r1.2 -r0 src/sys/kern/subr_kleak.c
cvs rdiff -u -r1.265 -r1.266 src/sys/kern/subr_pool.c
cvs rdiff -u -r1.12 -r1.13 src/sys/kern/sys_syscall.c
cvs rdiff -u -r1.292 -r1.293 src/sys/sys/systm.h
cvs rdiff -u -r1.153 -r1.154 src/sys/uvm/uvm_km.c
cvs rdiff -u -r1.1 -r0 src/usr.sbin/kleak/Makefile src/usr.sbin/kleak/kleak.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man4/options.4
diff -u src/share/man/man4/options.4:1.507 src/share/man/man4/options.4:1.508
--- src/share/man/man4/options.4:1.507	Tue Aug 20 14:03:55 2019
+++ src/share/man/man4/options.4	Sat Feb  8 07:07:06 2020
@@ -1,4 +1,4 @@
-.\"	$NetBSD: options.4,v 1.507 2019/08/20 14:03:55 gson Exp $
+.\"	$NetBSD: options.4,v 1.508 2020/02/08 07:07:06 maxv Exp $
 .\"
 .\" Copyright (c) 1996
 .\" 	Perry E. Metzger.  All rights reserved.
@@ -30,7 +30,7 @@
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
 .\"
-.Dd August 20, 2019
+.Dd February 8, 2020
 .Dt OPTIONS 4
 .Os
 .Sh NAME
@@ -2331,7 +2331,6 @@ The flag can be changed at runtime by
 .Xr sysctl 3 .
 .It Cd options KASAN
 Enables Kernel Address Sanitizer.
-Should not be used in conjunction with KLEAK.
 .Em NOTE :
 not available on all architectures.
 .It Cd options KASLR
@@ -2339,11 +2338,6 @@ Enables Kernel ASLR.
 This randomizes the location of the kernel image in memory.
 .Em NOTE :
 not available on all architectures.
-.It Cd options KLEAK
-Enables the KLEAK feature, that allows to detect kernel information leaks.
-Should not be used in conjunction with KASAN.
-.Em NOTE :
-not available on all architectures.
 .It Cd options SVS
 Enables Separate Virtual Space.
 On architectures that are designed to function with a shared address

Index: src/share/mk/bsd.sys.mk
diff -u src/share/mk/bsd.sys.mk:1.298 src/share/mk/bsd.sys.mk:1.299
--- src/share/mk/bsd.sys.mk:1.298	Fri Dec 20 04:04:25 2019
+++ src/share/mk/bsd.sys.mk	Sat Feb  8 07:07:06 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: bsd.sys.mk,v 1.298 2019/12/20 04:04:25 christos Exp $
+#	$NetBSD: bsd.sys.mk,v 1.299 2020/02/08 07:07:06 maxv Exp $
 #
 # Build definitions used for NetBSD source tree builds.
 
@@ -236,14 +236,6 @@ CPUFLAGS+=	-Wa,--fatal-warnings
 CFLAGS+=	${CPUFLAGS}
 AFLAGS+=	${CPUFLAGS}
 
-.if ${KLEAK:U0} > 0
-KLEAKFLAGS=	-fsanitize-coverage=trace-pc
-.for f in subr_kleak.c
-KLEAKFLAGS.${f}=	# empty
-.endfor
-CFLAGS+=	${KLEAKFLAGS.${.IMPSRC:T}:U${KLEAKFLAGS}}
-.endif
-
 .if ${KCOV:U0} > 0
 KCOVFLAGS=	-fsanitize-coverage=trace-pc
 .for f in subr_kcov.c subr_lwp_specificdata.c subr_specificdata.c subr_asan.c \

Index: src/sys/arch/amd64/conf/ALL
diff -u src/sys/arch/amd64/conf/ALL:1.144 src/sys/arch/amd64/conf/ALL:1.145
--- src/sys/arch/amd64/conf/ALL:1.144	Mon Feb  3 19:37:42 2020
+++ src/sys/arch/amd64/conf/ALL	Sat Feb  8 07:07:06 2020
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.144 2020/02/03 19:37:42 maya Exp $
+# $NetBSD: ALL,v 1.145 2020/02/08 07:07:06 maxv Exp $
 # From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
 #
 # ALL machine description file
@@ -17,7 +17,7 @@ include 	"arch/amd64/conf/std.amd64"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident		"ALL-$Revision: 1.144 $"
+#ident		"ALL-$Revision: 1.145 $"
 
 maxusers	64		# estimated number of users
 
@@ -133,10 +133,6 @@ makeoptions	KASAN=1		# Kernel Address Sa
 options		KASAN
 #no options     SVS
 
-# Kernel Info Leak Detector.
-#makeoptions	KLEAK=1
-#options		KLEAK
-
 # Kernel Code Coverage Driver.
 makeoptions	KCOV=1
 options		KCOV

Index: src/sys/arch/amd64/conf/GENERIC
diff -u src/sys/arch/amd64/conf/GENERIC:1.560 src/sys/arch/amd64/conf/GENERIC:1.561
--- src/sys/arch/amd64/conf/GENERIC:1.560	Sat Jan 25 18:38:34 2020
+++ src/sys/arch/amd64/conf/GENERIC	Sat Feb  8 07:07:06 2020
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.560 2020/01/25 18:38:34 thorpej Exp $
+# $NetBSD: GENERIC,v 1.561 2020/02/08 07:07:06 maxv Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@ include 	"arch/amd64/conf/std.amd64"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident		"GENERIC-$Revision: 1.560 $"
+#ident		"GENERIC-$Revision: 1.561 $"
 
 maxusers	64		# estimated number of users
 
@@ -147,10 +147,6 @@ options 	KDTRACE_HOOKS	# kernel DTrace h
 #options	POOL_QUARANTINE	# optional
 #options 	KMSAN_PANIC	# optional
 
-# Kernel Info Leak Detector.
-#makeoptions 	KLEAK=1
-#options 	KLEAK
-
 # Kernel Code Coverage Driver.
 #makeoptions	KCOV=1
 #options 	KCOV

Index: src/sys/arch/amd64/include/param.h
diff -u src/sys/arch/amd64/include/param.h:1.35 src/sys/arch/amd64/include/param.h:1.36
--- src/sys/arch/amd64/include/param.h:1.35	Wed Jan 22 16:52:46 2020
+++ src/sys/arch/amd64/include/param.h	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.35 2020/01/22 16:52:46 ad Exp $	*/
+/*	$NetBSD: param.h,v 1.36 2020/02/08 07:07:07 maxv Exp $	*/
 
 #ifdef __x86_64__
 
@@ -11,7 +11,6 @@
 #include <machine/cpu.h>
 #if defined(_KERNEL_OPT)
 #include "opt_kasan.h"
-#include "opt_kleak.h"
 #include "opt_kmsan.h"
 #endif
 #endif
@@ -68,7 +67,7 @@
 #define	SSIZE		1		/* initial stack size/NBPG */
 #define	SINCR		1		/* increment of stack/NBPG */
 
-#if defined(KASAN) || defined(KLEAK) || defined(KMSAN)
+#if defined(KASAN) || defined(KMSAN)
 #define	UPAGES		8
 #elif defined(DIAGNOSTIC)
 #define	UPAGES		5		/* pages of u-area (1 for redzone) */

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1254 src/sys/conf/files:1.1255
--- src/sys/conf/files:1.1254	Mon Jan 20 22:18:39 2020
+++ src/sys/conf/files	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.1254 2020/01/20 22:18:39 pgoyette Exp $
+#	$NetBSD: files,v 1.1255 2020/02/08 07:07:07 maxv Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20171118
@@ -35,7 +35,6 @@ defflag				KCSAN
 defflag opt_kcsan.h		KCSAN_PANIC
 defflag				KMSAN
 defflag opt_kmsan.h		KMSAN_PANIC
-defflag				KLEAK
 defflag				KCOV
 defflag opt_pool.h		POOL_QUARANTINE
 

Index: src/sys/conf/ssp.mk
diff -u src/sys/conf/ssp.mk:1.4 src/sys/conf/ssp.mk:1.5
--- src/sys/conf/ssp.mk:1.4	Sat Feb 23 03:10:06 2019
+++ src/sys/conf/ssp.mk	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-# $NetBSD: ssp.mk,v 1.4 2019/02/23 03:10:06 kamil Exp $
+# $NetBSD: ssp.mk,v 1.5 2020/02/08 07:07:07 maxv Exp $
 
 .if ${USE_SSP:Uno} == "yes"
 COPTS.kern_ssp.c+=	-fno-stack-protector -D__SSP__
@@ -10,7 +10,6 @@ COPTS.kern_ssp.c+=	-fno-stack-protector 
 COPTS.cpu.c+=		-fno-stack-protector
 .endif
 
-COPTS.subr_kleak.c+=	-fno-stack-protector
 COPTS.subr_kcov.c+=		-fno-stack-protector
 
 # The following files use alloca(3) or variable array allocations.

Index: src/sys/kern/files.kern
diff -u src/sys/kern/files.kern:1.42 src/sys/kern/files.kern:1.43
--- src/sys/kern/files.kern:1.42	Sat Jan  4 03:46:19 2020
+++ src/sys/kern/files.kern	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.kern,v 1.42 2020/01/04 03:46:19 kamil Exp $
+#	$NetBSD: files.kern,v 1.43 2020/02/08 07:07:07 maxv Exp $
 
 #
 # kernel sources
@@ -124,7 +124,6 @@ file	kern/subr_interrupt.c		kern
 file	kern/subr_iostat.c		kern
 file	kern/subr_ipi.c			kern
 file	kern/subr_kcpuset.c		kern
-file	kern/subr_kleak.c		kleak
 file	kern/subr_kcov.c		kcov
 defflag	opt_kmem.h			KMEM_SIZE
 file	kern/subr_kmem.c		kern

Index: src/sys/kern/subr_pool.c
diff -u src/sys/kern/subr_pool.c:1.265 src/sys/kern/subr_pool.c:1.266
--- src/sys/kern/subr_pool.c:1.265	Sun Jan 19 23:49:32 2020
+++ src/sys/kern/subr_pool.c	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_pool.c,v 1.265 2020/01/19 23:49:32 chs Exp $	*/
+/*	$NetBSD: subr_pool.c,v 1.266 2020/02/08 07:07:07 maxv Exp $	*/
 
 /*
  * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014, 2015, 2018
@@ -33,13 +33,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.265 2020/01/19 23:49:32 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.266 2020/02/08 07:07:07 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
 #include "opt_lockdebug.h"
 #include "opt_pool.h"
-#include "opt_kleak.h"
 #endif
 
 #include <sys/param.h>
@@ -117,14 +116,6 @@ static inline void pool_cache_put_kmsan(
 #define pool_cache_put_kmsan(pc, ptr)	__nothing
 #endif
 
-#ifdef KLEAK
-static void pool_kleak_fill(struct pool *, void *);
-static void pool_cache_kleak_fill(pool_cache_t, void *);
-#else
-#define pool_kleak_fill(pp, ptr)	__nothing
-#define pool_cache_kleak_fill(pc, ptr)	__nothing
-#endif
-
 #ifdef POOL_QUARANTINE
 static void pool_quarantine_init(struct pool *);
 static void pool_quarantine_flush(struct pool *);
@@ -1208,8 +1199,6 @@ pool_get(struct pool *pp, int flags)
 	pool_get_kmsan(pp, v);
 	if (flags & PR_ZERO)
 		memset(v, 0, pp->pr_reqsize);
-	else
-		pool_kleak_fill(pp, v);
 	return v;
 }
 
@@ -2530,7 +2519,6 @@ pool_cache_get_slow(pool_cache_cpu_t *cc
 	}
 
 	FREECHECK_OUT(&pc->pc_freecheck, object);
-	pool_cache_kleak_fill(pc, object);
 	return false;
 }
 
@@ -2579,7 +2567,6 @@ pool_cache_get_paddr(pool_cache_t pc, in
 			FREECHECK_OUT(&pc->pc_freecheck, object);
 			pool_redzone_fill(&pc->pc_pool, object);
 			pool_cache_get_kmsan(pc, object);
-			pool_cache_kleak_fill(pc, object);
 			return object;
 		}
 
@@ -2946,26 +2933,6 @@ pool_cache_put_kmsan(pool_cache_t pc, vo
 }
 #endif
 
-#ifdef KLEAK
-static void
-pool_kleak_fill(struct pool *pp, void *p)
-{
-	if (__predict_false(pp->pr_roflags & PR_NOTOUCH)) {
-		return;
-	}
-	kleak_fill_area(p, pp->pr_size);
-}
-
-static void
-pool_cache_kleak_fill(pool_cache_t pc, void *p)
-{
-	if (__predict_false(pc_has_ctor(pc) || pc_has_dtor(pc))) {
-		return;
-	}
-	pool_kleak_fill(&pc->pc_pool, p);
-}
-#endif
-
 #ifdef POOL_QUARANTINE
 static void
 pool_quarantine_init(struct pool *pp)

Index: src/sys/kern/sys_syscall.c
diff -u src/sys/kern/sys_syscall.c:1.12 src/sys/kern/sys_syscall.c:1.13
--- src/sys/kern/sys_syscall.c:1.12	Sun Dec  2 21:00:13 2018
+++ src/sys/kern/sys_syscall.c	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_syscall.c,v 1.12 2018/12/02 21:00:13 maxv Exp $	*/
+/*	$NetBSD: sys_syscall.c,v 1.13 2020/02/08 07:07:07 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_syscall.c,v 1.12 2018/12/02 21:00:13 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_syscall.c,v 1.13 2020/02/08 07:07:07 maxv Exp $");
 
 #include <sys/syscall_stats.h>
 #include <sys/syscallvar.h>
@@ -85,7 +85,6 @@ SYS_SYSCALL(struct lwp *l, const struct 
 	error = trace_enter(code, callp, TRACE_ARGS);
 	if (__predict_false(error != 0))
 		return error;
-	kleak_fill_stack();
 	error = sy_call(callp, l, &uap->args, rval);
 	trace_exit(code, callp, &uap->args, rval, error);
 	return error;

Index: src/sys/sys/systm.h
diff -u src/sys/sys/systm.h:1.292 src/sys/sys/systm.h:1.293
--- src/sys/sys/systm.h:1.292	Wed Jan  1 09:33:19 2020
+++ src/sys/sys/systm.h	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: systm.h,v 1.292 2020/01/01 09:33:19 skrll Exp $	*/
+/*	$NetBSD: systm.h,v 1.293 2020/02/08 07:07:07 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1988, 1991, 1993
@@ -45,7 +45,6 @@
 #include "opt_gprof.h"
 #include "opt_kasan.h"
 #include "opt_kcsan.h"
-#include "opt_kleak.h"
 #include "opt_kmsan.h"
 #include "opt_wsdisplay_compat.h"
 #endif
@@ -325,18 +324,6 @@ int	copyin(const void *, void *, size_t)
 int	copyout(const void *, void *, size_t);
 #endif
 
-#ifdef KLEAK
-#define copyout		kleak_copyout
-#define copyoutstr	kleak_copyoutstr
-int	kleak_copyout(const void *, void *, size_t);
-int	kleak_copyoutstr(const void *, void *, size_t, size_t *);
-void	kleak_fill_area(void *, size_t);
-void	kleak_fill_stack(void);
-#else
-#define kleak_fill_area(a, b)	__nothing
-#define kleak_fill_stack()	__nothing
-#endif
-
 #ifdef _KERNEL
 typedef	int	(*copyin_t)(const void *, void *, size_t);
 typedef int	(*copyout_t)(const void *, void *, size_t);

Index: src/sys/uvm/uvm_km.c
diff -u src/sys/uvm/uvm_km.c:1.153 src/sys/uvm/uvm_km.c:1.154
--- src/sys/uvm/uvm_km.c:1.153	Mon Jan 20 10:43:48 2020
+++ src/sys/uvm/uvm_km.c	Sat Feb  8 07:07:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_km.c,v 1.153 2020/01/20 10:43:48 skrll Exp $	*/
+/*	$NetBSD: uvm_km.c,v 1.154 2020/02/08 07:07:07 maxv Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -152,7 +152,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.153 2020/01/20 10:43:48 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.154 2020/02/08 07:07:07 maxv Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -715,7 +715,6 @@ uvm_km_alloc(struct vm_map *map, vsize_t
 	pmap_update(pmap_kernel());
 
 	if ((flags & UVM_KMF_ZERO) == 0) {
-		kleak_fill_area((void *)kva, size);
 		kmsan_orig((void *)kva, size, KMSAN_TYPE_UVM, __RET_ADDR);
 		kmsan_mark((void *)kva, size, KMSAN_STATE_UNINIT);
 	}

Reply via email to