Thread (37 messages) 37 messages, 6 authors, 2016-08-04

Re: [PATCH v3 1/7] random: Simplify API for random address requests

From: Yann Droneaud <hidden>
Date: 2016-08-04 12:47:43
Also in: lkml

Hi,

Le mercredi 03 aoA>>t 2016 A  23:39 +0000, Jason Cooper a A(C)critA :
quoted hunk ↗ jump to hunk
A 
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 0158d3bff7e5..61cb434e3bea 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1840,6 +1840,39 @@ randomize_range(unsigned long start, unsigned
long end, unsigned long len)
A 	return PAGE_ALIGN(get_random_int() % range + start);
A }
A 
+/**
+ * randomize_page - Generate a random, page aligned address
+ * @start:	The smallest acceptable address the caller will
take.
+ * @range:	The size of the area, starting at @start, within
which the
+ *		random address must fall.
+ *
+ * If @start + @range would overflow, @range is capped.
+ *
+ * NOTE: Historical use of randomize_range, which this replaces,
presumed that
+ * @start was already page aligned.A A We now align it regardless.
+ *
+ * Return: A page aligned address within [start, start + range).A A On
error,
+ * @start is returned.
+ */
+unsigned long
+randomize_page(unsigned long start, unsigned long range)
+{
To prevent an underflow if start is not page aligned (but will one
would ever use a non aligned start address *and* range ? ...)

A A A A A A A A if (range < PAGE_SIZE)
A A A A A A A A A A A A A A A A return start;

+	if (!PAGE_ALIGNED(start)) {
+		range -= PAGE_ALIGN(start) - start;
+		start = PAGE_ALIGN(start);
+	}
+
+	if (start > ULONG_MAX - range)
+		range = ULONG_MAX - start;
+
+	range >>= PAGE_SHIFT;
+
+	if (range == 0)
+		return start;
+
+	return start + (get_random_long() % range << PAGE_SHIFT);
+}
+
A /* Interface for in-kernel drivers of true hardware RNGs.
A  * Those devices may produce endless random bits and will be
throttled
A  * when our pool is full.
A 
Regards.

--A 
Yann Droneaud
OPTEYA

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help