Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 26 13:46:03 UTC 2024

Modified Files:
        src/sys/kern: kern_entropy.c
        src/sys/sys: entropy.h

Log Message:
entropy(9): New function entropy_consolidate_sig.

This is the same as entropy_consolidate, but it returns EINTR if
interrupted by a signal and 0 otherwise.  (entropy_consolidate can
already be interrupted by a signal -- it just doesn't tell you if it
was.)

Eventually these will be merged into a single entropy_consolidate
that returns the error code, but adding a new symbol first makes it
safe for pullup-10.

PR kern/58646: /dev/random, kern.entropy.*: signal bugs


To generate a diff of this commit:
cvs rdiff -u -r1.66 -r1.67 src/sys/kern/kern_entropy.c
cvs rdiff -u -r1.4 -r1.5 src/sys/sys/entropy.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/kern_entropy.c
diff -u src/sys/kern/kern_entropy.c:1.66 src/sys/kern/kern_entropy.c:1.67
--- src/sys/kern/kern_entropy.c:1.66	Wed Oct  4 20:28:06 2023
+++ src/sys/kern/kern_entropy.c	Mon Aug 26 13:46:03 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_entropy.c,v 1.66 2023/10/04 20:28:06 ad Exp $	*/
+/*	$NetBSD: kern_entropy.c,v 1.67 2024/08/26 13:46:03 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_entropy.c,v 1.66 2023/10/04 20:28:06 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_entropy.c,v 1.67 2024/08/26 13:46:03 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -1354,7 +1354,21 @@ entropy_notify(void)
 /*
  * entropy_consolidate()
  *
- *	Trigger entropy consolidation and wait for it to complete.
+ *	Trigger entropy consolidation and wait for it to complete, or
+ *	return early if interrupted by a signal.
+ */
+void
+entropy_consolidate(void)
+{
+
+	(void)entropy_consolidate_sig();
+}
+
+/*
+ * entropy_consolidate_sig()
+ *
+ *	Trigger entropy consolidation and wait for it to complete, or
+ *	return EINTR if interrupted by a signal.
  *
  *	This should be used sparingly, not periodically -- requiring
  *	conscious intervention by the operator or a clear policy
@@ -1362,8 +1376,8 @@ entropy_notify(void)
  *	when enough entropy has been gathered into per-CPU pools to
  *	transition to full entropy.
  */
-void
-entropy_consolidate(void)
+int
+entropy_consolidate_sig(void)
 {
 	uint64_t ticket;
 	int error;
@@ -1381,6 +1395,8 @@ entropy_consolidate(void)
 			break;
 	}
 	mutex_exit(&E->lock);
+
+	return error;
 }
 
 /*

Index: src/sys/sys/entropy.h
diff -u src/sys/sys/entropy.h:1.4 src/sys/sys/entropy.h:1.5
--- src/sys/sys/entropy.h:1.4	Fri Aug 14 00:53:16 2020
+++ src/sys/sys/entropy.h	Mon Aug 26 13:46:03 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: entropy.h,v 1.4 2020/08/14 00:53:16 riastradh Exp $	*/
+/*	$NetBSD: entropy.h,v 1.5 2024/08/26 13:46:03 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -50,6 +50,7 @@ struct knote;
 
 void	entropy_bootrequest(void);
 void	entropy_consolidate(void);
+int	entropy_consolidate_sig(void);
 unsigned entropy_epoch(void);
 bool	entropy_ready(void);
 int	entropy_extract(void *, size_t, int);

Reply via email to