freebsd-src/sys/cddl
Domagoj Stolfa 8527bb2aee dtrace: Fix a kernel panic in printm()
When using printm(), one should always pass a scratch pointer to it.
This is achieved by calling printm with memref

  BEGIN { printm(fixed_len, memref(ptr, var_len)); }

which will return a pointer to the DTrace scratch space of size
sizeof(uintptr_t) * 2. However, one can easily call printm() as follows

  BEGIN { printm(10, (void *)NULL); }

and panic the kernel as a result. This commit does two things:

  (1) adds a new macro DTRACE_INSCRATCHPTR(mstate, ptr, howmany) which
      checks if a certain pointer is in the DTrace scratch space;
  (2) uses DTRACE_INSCRATCHPTR() to implement a check on printm()'s DIFO
      return value in order to avoid the panic and sets CPU_DTRACE_BADADDR
      if the address is not in the scratch space.

Reviewed by:	markj
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D41722
2023-09-06 10:00:59 -04:00
..
boot/zfs sys: Remove $FreeBSD$: one-line bare tag 2023-08-16 11:55:17 -06:00
compat/opensolaris sys: Remove $FreeBSD$: one-line catalog 2023-08-16 11:55:22 -06:00
contrib/opensolaris dtrace: Fix a kernel panic in printm() 2023-09-06 10:00:59 -04:00
dev sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00