Re: Crash loading dtraceall

From: Mark Johnston <markj_at_freebsd.org>
Date: Thu, 9 May 2019 00:31:17 -0400
On Wed, May 08, 2019 at 11:01:58PM -0500, Larry Rosenman wrote:
> On 05/08/2019 10:32 pm, Mark Johnston wrote:
> > On Wed, May 08, 2019 at 05:57:18PM -0500, Larry Rosenman wrote:
> >> On 05/08/2019 5:55 pm, Mark Johnston wrote:
> >> > On Wed, May 08, 2019 at 05:47:08PM -0500, Larry Rosenman wrote:
> >> >> On 05/08/2019 5:29 pm, Mark Johnston wrote:
> >> >> > On Wed, May 08, 2019 at 03:52:45PM -0500, Larry Rosenman wrote:
> >> >> >> Greetings,
> >> >> >>
> >> >> >>     Somewhere between r346483 and r347241 loading dtraceall causes a
> >> >> >>     crash.  I have the cores and kernels.
> >> >> >>
> >> >> >>     It's hard for me to bisect more than this, as the box is remote.
> >> >> >>
> >> >> >>     What more do you need?  (this dump is fropm r347355).
> >> >> >
> > The problem is with the kernel linker's handling of ifuncs.  When
> > enumerating symbols, it replaces ifunc symbol values with the return
> > value of the resolver but preserves the original symbol size, which is
> > that of the resolver.  I believe this patch will address the panic
> > you're seeing:
> > 
> It does *NOT*.

I see, my theory above is not the real problem here.  The resolver for
x86_rng_store() may return NULL, which we do not expect.  Can you show
the CPU info and features lines from the dmesg to confirm?

Also see if this patch helps:

diff --git a/sys/dev/random/ivy.c b/sys/dev/random/ivy.c
index 57f3d0a1d80b..71065d788cf9 100644
--- a/sys/dev/random/ivy.c
+++ b/sys/dev/random/ivy.c
_at__at_ -97,6 +97,13 _at__at_ x86_rdseed_store(u_long *buf)
 	return (retry);
 }
 
+static int
+x86_dead_store(u_long *buf __unused)
+{
+
+	panic("missing hardware PRNG support");
+}
+
 DEFINE_IFUNC(static, int, x86_rng_store, (u_long *buf), static)
 {
 	has_rdrand = (cpu_feature2 & CPUID2_RDRAND);
_at__at_ -107,7 +114,7 _at__at_ DEFINE_IFUNC(static, int, x86_rng_store, (u_long *buf), static)
 	else if (has_rdrand)
 		return (x86_rdrand_store);
 	else
-		return (NULL);
+		return (x86_dead_store);
 }
 
 /* It is required that buf length is a multiple of sizeof(u_long). */
Received on Thu May 09 2019 - 02:31:22 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:20 UTC