Message ID | 20250210133556.66431-1-theil.markus@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | prandom: remove next_pseudo_random32 | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
Hey Markus, Thanks for this. I hadn't realized that next_pseudo_random32() only had two users left. Excellent. I'll queue this up in the random tree (unless there are objections from the maintainers of that test code). Jason
Hi, On Mon, Feb 10, 2025 at 02:39:43PM +0100, Jason A. Donenfeld wrote: > Hey Markus, > > Thanks for this. I hadn't realized that next_pseudo_random32() only > had two users left. Excellent. > > I'll queue this up in the random tree (unless there are objections > from the maintainers of that test code). actually would be better if we apply the i915 part in drm-tip rather than waiting for kernel releases to receive this change in our branch. It has been source of conflicts and headaches. May I ask Markus to split the patch in two parts and we handle the i915 side? Thanks, Andi
Hi, On 11.02.25 00:07, Andi Shyti wrote: > actually would be better if we apply the i915 part in drm-tip > rather than waiting for kernel releases to receive this change in > our branch. It has been source of conflicts and headaches. > > May I ask Markus to split the patch in two parts and we handle > the i915 side? > Sure, will do in a v2. Markus
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c index 0727492576be..14efa6edd9e6 100644 --- a/drivers/gpu/drm/i915/selftests/i915_gem.c +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c @@ -45,13 +45,15 @@ static void trash_stolen(struct drm_i915_private *i915) struct i915_ggtt *ggtt = to_gt(i915)->ggtt; const u64 slot = ggtt->error_capture.start; const resource_size_t size = resource_size(&i915->dsm.stolen); + struct rnd_state prng; unsigned long page; - u32 prng = 0x12345678; /* XXX: fsck. needs some more thought... */ if (!i915_ggtt_has_aperture(ggtt)) return; + prandom_seed_state(&prng, 0x12345678); + for (page = 0; page < size; page += PAGE_SIZE) { const dma_addr_t dma = i915->dsm.stolen.start + page; u32 __iomem *s; @@ -64,8 +66,7 @@ static void trash_stolen(struct drm_i915_private *i915) s = io_mapping_map_atomic_wc(&ggtt->iomap, slot); for (x = 0; x < PAGE_SIZE / sizeof(u32); x++) { - prng = next_pseudo_random32(prng); - iowrite32(prng, &s[x]); + iowrite32(prandom_u32_state(&prng), &s[x]); } io_mapping_unmap_atomic(s); } diff --git a/drivers/media/test-drivers/vivid/vivid-vid-cap.c b/drivers/media/test-drivers/vivid/vivid-vid-cap.c index b166d90177c6..166372d5f927 100644 --- a/drivers/media/test-drivers/vivid/vivid-vid-cap.c +++ b/drivers/media/test-drivers/vivid/vivid-vid-cap.c @@ -300,8 +300,10 @@ void vivid_update_quality(struct vivid_dev *dev) */ freq_modulus = (dev->tv_freq - 676 /* (43.25-1) * 16 */) % (6 * 16); if (freq_modulus > 2 * 16) { + struct rnd_state prng; + prandom_seed_state(&prng, dev->tv_freq ^ 0x55); tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, - next_pseudo_random32(dev->tv_freq ^ 0x55) & 0x3f); + prandom_u32_state(&prng) & 0x3f); return; } if (freq_modulus < 12 /*0.75 * 16*/ || freq_modulus > 20 /*1.25 * 16*/) diff --git a/include/linux/prandom.h b/include/linux/prandom.h index f2ed5b72b3d6..ff7dcc3fa105 100644 --- a/include/linux/prandom.h +++ b/include/linux/prandom.h @@ -47,10 +47,4 @@ static inline void prandom_seed_state(struct rnd_state *state, u64 seed) state->s4 = __seed(i, 128U); } -/* Pseudo random number generator from numerical recipes. */ -static inline u32 next_pseudo_random32(u32 seed) -{ - return seed * 1664525 + 1013904223; -} - #endif
next_pseudo_random32 implements a LCG with known bad statistical properties and is only used in two pieces of testing code. Remove and convert users to the remaining single PRNG interface in prandom/random32. This removes another option of using an insecure PRNG. This is a preliminary patch for further prandom cleanup: - In another upcoming patch, I'd like to add more warnings, that prandom must not be used for cryptographic purposes. - Replace the LFSR113 generator with Xoshiro256++, which is known to have better statistical properties and does not need warmup, when seeded properly. Signed-off-by: Markus Theil <theil.markus@gmail.com> --- drivers/gpu/drm/i915/selftests/i915_gem.c | 7 ++++--- drivers/media/test-drivers/vivid/vivid-vid-cap.c | 4 +++- include/linux/prandom.h | 6 ------ 3 files changed, 7 insertions(+), 10 deletions(-)