VirtualBox

Changeset 53711 in vbox


Ignore:
Timestamp:
Jan 2, 2015 12:45:13 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
97488
Message:

VBoxDTrace: Use RTR0MemKernelCopyFrom to safely read kernel memory. (r88)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/dtrace/dtrace.c

    r53703 r53711  
    461461        (mstate)->dtms_scratch_ptr >= (alloc_sz))
    462462
     463#ifndef VBOX
    463464#define DTRACE_LOADFUNC(bits)                                           \
    464465/*CSTYLED*/                                                             \
     
    498499        return (!(*flags & CPU_DTRACE_FAULT) ? rval : 0);               \
    499500}
     501#else  /* VBOX */
     502# define DTRACE_LOADFUNC(bits)                                          \
     503VBDTSTATIC uint##bits##_t                                               \
     504dtrace_load##bits(uintptr_t addr)                                       \
     505{                                                                       \
     506        size_t const size = bits / NBBY;                                \
     507        uint##bits##_t rval;                                            \
     508        processorid_t me;                                               \
     509        int i, rc;                                                      \
     510                                                                        \
     511        /*DTRACE_ALIGNCHECK(addr, size, flags);*/                       \
     512                                                                        \
     513        for (i = 0; i < dtrace_toxranges; i++) {                        \
     514                if (addr >= dtrace_toxrange[i].dtt_limit)               \
     515                        continue;                                       \
     516                                                                        \
     517                if (addr + size <= dtrace_toxrange[i].dtt_base)         \
     518                        continue;                                       \
     519                                                                        \
     520                /*                                                      \
     521                 * This address falls within a toxic region; return 0.  \
     522                 */                                                     \
     523                me = VBDT_GET_CPUID();                                  \
     524                cpu_core[me].cpuc_dtrace_flags |= CPU_DTRACE_BADADDR;   \
     525                cpu_core[me].cpuc_dtrace_illval = addr;                 \
     526                return (0);                                             \
     527        }                                                               \
     528                                                                        \
     529        rc = RTR0MemKernelCopyFrom(&rval, (void const *)addr, size);    \
     530        if (RT_SUCCESS(rc))                                             \
     531                return rval;                                            \
     532                                                                        \
     533        /*                                                              \
     534         * If not supported, pray it won't fault...                     \
     535         */                                                             \
     536        if (rc == VERR_NOT_SUPPORTED)                                   \
     537                return *(uint##bits##_t const *)addr;                   \
     538                                                                        \
     539        me = VBDT_GET_CPUID();                                          \
     540        cpu_core[me].cpuc_dtrace_flags |= CPU_DTRACE_BADADDR;           \
     541        cpu_core[me].cpuc_dtrace_illval = addr;                         \
     542        return (0);                                                     \
     543}
     544
     545#endif /* VBOX */
    500546
    501547#ifdef _LP64
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette