VirtualBox

Changeset 83663 in vbox


Ignore:
Timestamp:
Apr 9, 2020 6:54:45 PM (4 years ago)
Author:
vboxsync
Message:

IPRT/log-vbox.cpp: Use RTProcExecutablePath and avoid big stack buffers, making the log file header code reasonably safe even IN_GUEST context. bugref:9670

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/VBox/log-vbox.cpp

    r83660 r83663  
    502502    RTTIMESPEC TimeSpec;
    503503    RTTIME Time;
     504    RTPROCESS pid = RTProcSelf();
    504505    RTTimeExplode(&Time, RTTimeNow(&TimeSpec));
    505506    rc = RTLogCreate(&pLogger, 0, NULL, "VBOX_LOG", RT_ELEMENTS(g_apszGroups), &g_apszGroups[0],
     
    512513# endif
    513514                     Time.i32Year, Time.u8Month, Time.u8MonthDay, Time.u8Hour, Time.u8Minute, Time.u8Second,
    514                      Time.u32Nanosecond / 10000000, pszExeName, RTProcSelf());
     515                     Time.u32Nanosecond / 10000000, pszExeName, pid);
    515516    if (RT_SUCCESS(rc))
    516517    {
    517 # ifndef IN_GUEST
    518518        /*
    519519         * Write a log header.
    520520         */
    521         char szBuf[RTPATH_MAX];
    522         RTTimeSpecToString(&TimeSpec, szBuf, sizeof(szBuf));
    523         RTLogLoggerEx(pLogger, 0, ~0U, "Log created: %s\n", szBuf);
    524         RTLogLoggerEx(pLogger, 0, ~0U, "Executable: %s\n", RTProcGetExecutablePath(szBuf, sizeof(szBuf)));
     521        char      szBuf[80];
     522        RTPROCESS pidParent = NIL_RTPROCESS;
     523        RTProcQueryParent(pid, &pidParent);
     524        RTLogLoggerEx(pLogger, 0, ~0U,
     525                      "Log created: %s\n"
     526                      "Process ID:  %d (%#x)\n"
     527                      "Parent PID:  %d (%#x)\n"
     528                      "Executable:  %s\n",
     529                      RTTimeSpecToString(&TimeSpec, szBuf, sizeof(szBuf)),
     530                      pid, pid,
     531                      pidParent, pidParent,
     532                      RTProcExecutablePath());
    525533
    526534        /* executable and arguments - tricky and all platform specific. */
    527 #  if defined(RT_OS_WINDOWS)
     535# if defined(RT_OS_WINDOWS)
    528536        RTLogLoggerEx(pLogger, 0, ~0U, "Commandline: %ls\n", GetCommandLineW());
    529537
    530 #  elif defined(RT_OS_SOLARIS)
     538# elif defined(RT_OS_SOLARIS)
    531539        psinfo_t psi;
    532         char szArgFileBuf[80];
    533         RTStrPrintf(szArgFileBuf, sizeof(szArgFileBuf), "/proc/%ld/psinfo", (long)getpid());
    534         FILE *pFile = fopen(szArgFileBuf, "rb");
     540        RTStrPrintf(szBuf, sizeof(szBuf), "/proc/%ld/psinfo", (long)getpid());
     541        FILE *pFile = fopen(szBuf, "rb");
    535542        if (pFile)
    536543        {
    537544            if (fread(&psi, sizeof(psi), 1, pFile) == 1)
    538545            {
    539  if 0     /* 100% safe:*/
     546if 0     /* 100% safe:*/
    540547                RTLogLoggerEx(pLogger, 0, ~0U, "Args: %s\n", psi.pr_psargs);
    541  else     /* probably safe: */
     548else     /* probably safe: */
    542549                const char * const *argv = (const char * const *)psi.pr_argv;
    543550                for (int iArg = 0; iArg < psi.pr_argc; iArg++)
    544551                    RTLogLoggerEx(pLogger, 0, ~0U, "Arg[%d]: %s\n", iArg, argv[iArg]);
    545  endif
     552endif
    546553
    547554            }
     
    549556        }
    550557
    551 #  elif defined(RT_OS_LINUX)
     558# elif defined(RT_OS_LINUX)
    552559        FILE *pFile = fopen("/proc/self/cmdline", "r");
    553560        if (pFile)
     
    577584        }
    578585
    579 #  elif defined(RT_OS_HAIKU)
     586# elif defined(RT_OS_HAIKU)
    580587        team_info info;
    581588        if (get_team_info(0, &info) == B_OK)
     
    585592        }
    586593
    587 #  elif defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD)
     594# elif defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD)
    588595        /* Retrieve the required length first */
    589596        int aiName[4];
    590  if defined(RT_OS_FREEBSD)
     597if defined(RT_OS_FREEBSD)
    591598        aiName[0] = CTL_KERN;
    592599        aiName[1] = KERN_PROC;
    593600        aiName[2] = KERN_PROC_ARGS;     /* Introduced in FreeBSD 4.0 */
    594601        aiName[3] = getpid();
    595  elif defined(RT_OS_NETBSD)
     602elif defined(RT_OS_NETBSD)
    596603        aiName[0] = CTL_KERN;
    597604        aiName[1] = KERN_PROC_ARGS;
    598605        aiName[2] = getpid();
    599606        aiName[3] = KERN_PROC_ARGV;
    600  endif
     607endif
    601608        size_t cchArgs = 0;
    602609        int rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), NULL, &cchArgs, NULL, 0);
     
    626633        }
    627634
    628 #  elif defined(RT_OS_OS2) || defined(RT_OS_DARWIN)
     635# elif defined(RT_OS_OS2) || defined(RT_OS_DARWIN)
    629636        /* commandline? */
    630 #  else
    631 #   error needs porting.
    632 #  endif
    633 # endif /* IN_GUEST */
     637# else
     638#  error needs porting.
     639# endif
    634640    }
    635641
Note: See TracChangeset for help on using the changeset viewer.

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