lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <1464020451-16520-5-git-send-email-yendapally.reddy@broadcom.com> Date: Mon, 23 May 2016 12:20:51 -0400 From: Yendapally Reddy Dhananjaya Reddy <yendapally.reddy@...adcom.com> To: Rob Herring <robh+dt@...nel.org>, Pawel Moll <pawel.moll@....com>, Mark Rutland <mark.rutland@....com>, Ian Campbell <ijc+devicetree@...lion.org.uk>, Kumar Gala <galak@...eaurora.org>, Stephen Warren <swarren@...dotorg.org>, Lee Jones <lee@...nel.org>, Eric Anholt <eric@...olt.net>, Russell King <linux@....linux.org.uk>, Ray Jui <rjui@...adcom.com>, Scott Branden <sbranden@...adcom.com>, Jon Mason <jonmason@...adcom.com>, Matt Mackall <mpm@...enic.com>, Herbert Xu <herbert@...dor.apana.org.au>, Daniel Thompson <daniel.thompson@...aro.org>, Kieran Bingham <kieranbingham@...il.com>, Pankaj Dev <pankaj.dev@...com>, Richard Weinberger <richard@....at>, noltari@...il.com, Joshua Henderson <joshua.henderson@...rochip.com> Cc: devicetree@...r.kernel.org, linux-rpi-kernel@...ts.infradead.org, linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, bcm-kernel-feedback-list@...adcom.com, linux-crypto@...r.kernel.org, Yendapally Reddy Dhananjaya Reddy <yendapally.reddy@...adcom.com> Subject: [PATCH 4/4] hwrng: bcm2835: Read as much data as available Read the requested number of data from the fifo Signed-off-by: Yendapally Reddy Dhananjaya Reddy <yendapally.reddy@...adcom.com> --- drivers/char/hw_random/bcm2835-rng.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index b1e8b78..9bbdc07 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -43,6 +43,8 @@ static int bcm2835_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) { void __iomem *rng_base = (void __iomem *)rng->priv; + u32 max_words = max/sizeof(u32); + u32 num_words, count; while ((__raw_readl(rng_base + RNG_STATUS) >> 24) == 0) { if (!wait) @@ -50,8 +52,14 @@ static int bcm2835_rng_read(struct hwrng *rng, void *buf, size_t max, cpu_relax(); } - *(u32 *)buf = __raw_readl(rng_base + RNG_DATA); - return sizeof(u32); + num_words = (readl(rng_base + RNG_STATUS) >> 24); + if (num_words > max_words) + num_words = max_words; + + for (count = 0; count < num_words; count++) + ((u32 *)buf)[count] = readl(rng_base + RNG_DATA); + + return (num_words * sizeof(u32)); } static struct hwrng bcm2835_rng_ops = { -- 2.1.0
Powered by blists - more mailing lists