On Tue, Oct 11, 2022 at 12:53:17PM +1100, Michael Ellerman wrote: > "Jason A. Donenfeld" <ja...@zx2c4.com> writes: > > On Mon, Oct 10, 2022 at 01:25:25PM -0600, Jason A. Donenfeld wrote: > >> Hi Michael, > >> > >> On Sun, Oct 09, 2022 at 10:01:39PM +1100, Michael Ellerman wrote: > >> > powerpc updates for 6.1 > >> > > >> > - Remove our now never-true definitions for pgd_huge() and p4d_leaf(). > >> > > >> > - Add pte_needs_flush() and huge_pmd_needs_flush() for 64-bit. > >> > > >> > - Add support for syscall wrappers. > >> > > >> > - Add support for KFENCE on 64-bit. > >> > > >> > - Update 64-bit HV KVM to use the new guest state entry/exit accounting > >> > API. > >> > > >> > - Support execute-only memory when using the Radix MMU (P9 or later). > >> > > >> > - Implement CONFIG_PARAVIRT_TIME_ACCOUNTING for pseries guests. > >> > > >> > - Updates to our linker script to move more data into read-only > >> > sections. > >> > > >> > - Allow the VDSO to be randomised on 32-bit. > >> > > >> > - Many other small features and fixes. > >> > >> FYI, something in here broke the wireguard test suite, which runs the > >> iperf3 networking utility. The full log is here [1], but the relevant part > >> is: > >> > >> [+] NS1: iperf3 -Z -t 3 -c 192.168.241.2 > >> Connecting to host 192.168.241.2, port 5201 > >> iperf3: error - failed to read /dev/urandom: Bad address > >> > >> I'll see if I can narrow it down a bit more and bisect. But just FYI, in > >> case you have an intuition. > > > > Huh. From iov_iter.c: > > > > static int copyout(void __user *to, const void *from, size_t n) > > { > > size_t before = n; > > if (should_fail_usercopy()) > > return n; > > if (access_ok(to, n)) { > > instrument_copy_to_user(to, from, n); > > n = raw_copy_to_user(to, from, n); > > if (n == before) > > pr_err("SARU n still %zu pointer is %lx\n", n, > > (unsigned long)to); > > } > > return n; > > } > > > > I added the pr_err() there to catch the failure: > > [ 3.443506] SARU n still 64 pointer is b78db000 > > > > Also I managed to extract the failing portion of iperf3 into something > > smaller: > > > > int temp; > > char *x; > > ssize_t l; > > FILE *f; > > char template[] = "/blah-XXXXXX"; > > > > temp = mkstemp(template); > > if (temp < 0) > > panic("mkstemp"); > > if (unlink(template) < 0) > > panic("unlink"); > > if (ftruncate(temp, 0x20000) < 0) > > panic("ftruncate"); > > x = mmap(NULL, 0x20000, PROT_READ|PROT_WRITE, MAP_PRIVATE, temp, 0); > > if (x == MAP_FAILED) > > panic("mmap"); > > f = fopen("/dev/urandom", "rb"); > > if (!f) > > panic("fopen"); > > setbuf(f, NULL); > > if (fread(x, 1, 0x20000, f) != 0x20000) > > panic("fread"); > > Does that fail for you reliably? > > It succeeds for me running under qemu ppce500, though I'm not using your > kernel config yet.
Yes, every time without fail, across two systems and two qemu builds. Jason