Commit 3b270fac authored by Linus Walleij's avatar Linus Walleij Committed by Miquel Raynal
Browse files

mtd: otp: Put factory OTP/NVRAM into the entropy pool



The factory OTP, if supported, contains factory-programmed
information such as typically the serial number or production
week for the chip.

As this is device-unique information, submit it into the
system entropy pool.

This does not count as improvement of the entropy as such
but in practice it makes it a bit more random to mix in these
numbers.

Cc: Michael Walle <michael@walle.cc>
Acked-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20230606142931.3721374-1-linus.walleij@linaro.org
parent 6db02fdf
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <linux/idr.h>
#include <linux/backing-dev.h>
#include <linux/gfp.h>
#include <linux/random.h>
#include <linux/slab.h>
#include <linux/reboot.h>
#include <linux/leds.h>
@@ -966,6 +967,24 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
		}

		if (size > 0) {
			/*
			 * The factory OTP contains thing such as a unique serial
			 * number and is small, so let's read it out and put it
			 * into the entropy pool.
			 */
			void *otp;

			otp = kmalloc(size, GFP_KERNEL);
			if (!otp)
				return -ENOMEM;
			err = mtd_nvmem_fact_otp_reg_read(mtd, 0, otp, size);
			if (err < 0) {
				kfree(otp);
				return err;
			}
			add_device_randomness(otp, err);
			kfree(otp);

			nvmem = mtd_otp_nvmem_register(mtd, "factory-otp", size,
						       mtd_nvmem_fact_otp_reg_read);
			if (IS_ERR(nvmem)) {