Message ID | 20221023195711.52515-1-Jason@zx2c4.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | soc: ux500: do not directly dereference __iomem | expand |
Hi Linus, On Sun, Oct 23, 2022 at 9:57 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote: > > Sparse reports that calling add_device_randomness() on `uid` is a > violation of address spaces. And indeed the next usage uses readl() > properly, but that was left out when passing it toadd_device_ > randomness(). So instead copy the whole thing to the stack first. > > Fixes: 4040d10a3d44 ("ARM: ux500: add DB serial number to entropy pool") > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: stable@vger.kernel.org > Link: https://lore.kernel.org/all/202210230819.loF90KDh-lkp@intel.com/ > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Just thought I'd follow up on this. Jason
CC+ Arnd On Sun, Oct 30, 2022 at 11:30:46PM +0100, Jason A. Donenfeld wrote: > Hi Linus, > > On Sun, Oct 23, 2022 at 9:57 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote: > > > > Sparse reports that calling add_device_randomness() on `uid` is a > > violation of address spaces. And indeed the next usage uses readl() > > properly, but that was left out when passing it toadd_device_ > > randomness(). So instead copy the whole thing to the stack first. > > > > Fixes: 4040d10a3d44 ("ARM: ux500: add DB serial number to entropy pool") > > Cc: Linus Walleij <linus.walleij@linaro.org> > > Cc: stable@vger.kernel.org > > Link: https://lore.kernel.org/all/202210230819.loF90KDh-lkp@intel.com/ > > Reported-by: kernel test robot <lkp@intel.com> > > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> > > Just thought I'd follow up on this.
diff --git a/drivers/soc/ux500/ux500-soc-id.c b/drivers/soc/ux500/ux500-soc-id.c index a9472e0e5d61..27d6e25a0115 100644 --- a/drivers/soc/ux500/ux500-soc-id.c +++ b/drivers/soc/ux500/ux500-soc-id.c @@ -167,20 +167,18 @@ ATTRIBUTE_GROUPS(ux500_soc); static const char *db8500_read_soc_id(struct device_node *backupram) { void __iomem *base; - void __iomem *uid; const char *retstr; + u32 uid[5]; base = of_iomap(backupram, 0); if (!base) return NULL; - uid = base + 0x1fc0; + memcpy_fromio(uid, base + 0x1fc0, sizeof(uid)); /* Throw these device-specific numbers into the entropy pool */ - add_device_randomness(uid, 0x14); + add_device_randomness(uid, sizeof(uid)); retstr = kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x", - readl((u32 *)uid+0), - readl((u32 *)uid+1), readl((u32 *)uid+2), - readl((u32 *)uid+3), readl((u32 *)uid+4)); + uid[0], uid[1], uid[2], uid[3], uid[4]); iounmap(base); return retstr; }
Sparse reports that calling add_device_randomness() on `uid` is a violation of address spaces. And indeed the next usage uses readl() properly, but that was left out when passing it toadd_device_ randomness(). So instead copy the whole thing to the stack first. Fixes: 4040d10a3d44 ("ARM: ux500: add DB serial number to entropy pool") Cc: Linus Walleij <linus.walleij@linaro.org> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/all/202210230819.loF90KDh-lkp@intel.com/ Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> --- Untested, but hopefully correct. drivers/soc/ux500/ux500-soc-id.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)