From: Greg Kroah-Hartman Date: Thu, 13 Oct 2022 17:01:40 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v5.4.218~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2281a7c5ca0b26312309c1aebbe1b6961f8d2b8b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: random-restore-o_nonblock-support.patch --- diff --git a/queue-4.9/random-restore-o_nonblock-support.patch b/queue-4.9/random-restore-o_nonblock-support.patch new file mode 100644 index 00000000000..ff22d047bb2 --- /dev/null +++ b/queue-4.9/random-restore-o_nonblock-support.patch @@ -0,0 +1,50 @@ +From cd4f24ae9404fd31fc461066e57889be3b68641b Mon Sep 17 00:00:00 2001 +From: "Jason A. Donenfeld" +Date: Thu, 8 Sep 2022 16:14:00 +0200 +Subject: random: restore O_NONBLOCK support + +From: Jason A. Donenfeld + +commit cd4f24ae9404fd31fc461066e57889be3b68641b upstream. + +Prior to 5.6, when /dev/random was opened with O_NONBLOCK, it would +return -EAGAIN if there was no entropy. When the pools were unified in +5.6, this was lost. The post 5.6 behavior of blocking until the pool is +initialized, and ignoring O_NONBLOCK in the process, went unnoticed, +with no reports about the regression received for two and a half years. +However, eventually this indeed did break somebody's userspace. + +So we restore the old behavior, by returning -EAGAIN if the pool is not +initialized. Unlike the old /dev/random, this can only occur during +early boot, after which it never blocks again. + +In order to make this O_NONBLOCK behavior consistent with other +expectations, also respect users reading with preadv2(RWF_NOWAIT) and +similar. + +Fixes: 30c08efec888 ("random: make /dev/random be almost like /dev/urandom") +Reported-by: Guozihua +Reported-by: Zhongguohua +Cc: Al Viro +Cc: Theodore Ts'o +Cc: Andrew Lutomirski +Cc: stable@vger.kernel.org +Signed-off-by: Jason A. Donenfeld +Signed-off-by: Greg Kroah-Hartman +--- + drivers/char/random.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -1295,6 +1295,10 @@ static ssize_t random_read_iter(struct k + { + int ret; + ++ if (!crng_ready() && ++ (kiocb->ki_filp->f_flags & O_NONBLOCK)) ++ return -EAGAIN; ++ + ret = wait_for_random_bytes(); + if (ret != 0) + return ret; diff --git a/queue-4.9/series b/queue-4.9/series index b16142b6120..d0032980da7 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -34,3 +34,4 @@ scsi-stex-properly-zero-out-the-passthrough-command-structure.patch usb-serial-qcserial-add-new-usb-id-for-dell-branded-em7455.patch random-avoid-reading-two-cache-lines-on-irq-randomness.patch wifi-mac80211_hwsim-avoid-mac80211-warning-on-bad-rate.patch +random-restore-o_nonblock-support.patch