random.c (a126f7c41d80322b42ae0383ed3dcb17ee0296fc) random.c (16c7fa05829e8b91db48e3539c5d6ff3c2b18a23)
1/*
2 * random.c -- A strong random number generator
3 *
4 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
5 *
6 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All
7 * rights reserved.
8 *

--- 1471 unchanged lines hidden (view full) ---

1480
1481 hash[0] += current->pid + jiffies + get_cycles();
1482 md5_transform(hash, random_int_secret);
1483 ret = hash[0];
1484 put_cpu_var(get_random_int_hash);
1485
1486 return ret;
1487}
1/*
2 * random.c -- A strong random number generator
3 *
4 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
5 *
6 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All
7 * rights reserved.
8 *

--- 1471 unchanged lines hidden (view full) ---

1480
1481 hash[0] += current->pid + jiffies + get_cycles();
1482 md5_transform(hash, random_int_secret);
1483 ret = hash[0];
1484 put_cpu_var(get_random_int_hash);
1485
1486 return ret;
1487}
1488EXPORT_SYMBOL(get_random_int);
1488
1489/*
1490 * randomize_range() returns a start address such that
1491 *
1492 * [...... <range> .....]
1493 * start end
1494 *
1495 * a <range> with size "len" starting at the return value is inside in the
1496 * area defined by [start, end], but is otherwise randomized.
1497 */
1498unsigned long
1499randomize_range(unsigned long start, unsigned long end, unsigned long len)
1500{
1501 unsigned long range = end - len - start;
1502
1503 if (end <= start + len)
1504 return 0;
1505 return PAGE_ALIGN(get_random_int() % range + start);
1506}
1489
1490/*
1491 * randomize_range() returns a start address such that
1492 *
1493 * [...... <range> .....]
1494 * start end
1495 *
1496 * a <range> with size "len" starting at the return value is inside in the
1497 * area defined by [start, end], but is otherwise randomized.
1498 */
1499unsigned long
1500randomize_range(unsigned long start, unsigned long end, unsigned long len)
1501{
1502 unsigned long range = end - len - start;
1503
1504 if (end <= start + len)
1505 return 0;
1506 return PAGE_ALIGN(get_random_int() % range + start);
1507}