void cleanUp() { if (shutdownFilesystem() == -1) { logg->logMessage("Error shutting down gator filesystem"); } delete sock; delete util; delete logg; }
static bool setupFilesystem(char* module) { if (module) { // unmount and rmmod if the module was specified on the commandline, i.e. ensure that the specified module is indeed running shutdownFilesystem(); // if still mounted if (access("/dev/gator/buffer", F_OK) == 0) { logg.logError("Unable to remove the running gator.ko. Manually remove the module or use the running module by not specifying one on the commandline"); handleException(); } } const int retval = mountGatorFS(); if (retval == 1) { logg.logMessage("Driver already running at startup"); driverRunningAtStart = true; } else if (retval == 0) { logg.logMessage("Driver already mounted at startup"); driverRunningAtStart = driverMountedAtStart = true; } else { char location[256]; // arbitrarily large amount if (module) { strncpy(location, module, sizeof(location)); } else { // Is the driver co-located in the same directory? if (getApplicationFullPath(location, sizeof(location)) != 0) { // allow some buffer space logg.logMessage("Unable to determine the full path of gatord, the cwd will be used"); } strncat(location, "gator.ko", sizeof(location) - strlen(location) - 1); } if (access(location, F_OK) == -1) { if (module == NULL) { // The gator kernel is not already loaded and unable to locate gator.ko in the default location return false; } else { // gator location specified on the command line but it was not found logg.logError("gator module not found at %s", location); handleException(); } } // Load driver if (!init_module(location)) { logg.logMessage("Unable to load gator.ko driver from location %s", location); logg.logError("Unable to load (insmod) gator.ko driver:\n >>> gator.ko must be built against the current kernel version & configuration\n >>> See dmesg for more details"); handleException(); } if (mountGatorFS() == -1) { logg.logError("Unable to mount the gator filesystem needed for profiling."); handleException(); } } return true; }
int setupFilesystem(char* module) { int retval; // Verify root permissions uid_t euid = geteuid(); if (euid) { logg->logError(__FILE__, __LINE__, "gatord must be launched with root privileges"); handleException(); } if (module) { // unmount and rmmod if the module was specified on the commandline, i.e. ensure that the specified module is indeed running shutdownFilesystem(); // if still mounted if (access("/dev/gator/buffer", F_OK) == 0) { logg->logError(__FILE__, __LINE__, "Unable to remove the running gator.ko. Manually remove the module or use the running module by not specifying one on the commandline"); handleException(); } } retval = mountGatorFS(); if (retval == 1) { logg->logMessage("Driver already running at startup"); driverRunningAtStart = true; } else if (retval == 0) { logg->logMessage("Driver already mounted at startup"); driverRunningAtStart = driverMountedAtStart = true; } else { char command[256]; // arbitrarily large amount char location[256]; // arbitrarily large amount if (module) { strncpy(location, module, sizeof(location)); } else { // Is the driver co-located in the same directory? if (util->getApplicationFullPath(location, sizeof(location)) != 0) { // allow some buffer space logg->logMessage("Unable to determine the full path of gatord, the cwd will be used"); } strncat(location, "gator.ko", sizeof(location) - strlen(location) - 1); } if (access(location, F_OK) == -1) { logg->logError(__FILE__, __LINE__, "Unable to locate gator.ko driver:\n >>> gator.ko should be co-located with gatord in the same directory\n >>> OR insmod gator.ko prior to launching gatord\n >>> OR specify the location of gator.ko on the command line"); handleException(); } // Load driver snprintf(command, sizeof(command), "insmod %s >/dev/null 2>&1", location); if (system(command) != 0) { logg->logMessage("Unable to load gator.ko driver with command: %s", command); logg->logError(__FILE__, __LINE__, "Unable to load (insmod) gator.ko driver:\n >>> gator.ko must be built against the current kernel version & configuration\n >>> See dmesg for more details"); handleException(); } if (mountGatorFS() == -1) { logg->logError(__FILE__, __LINE__, "Unable to mount the gator filesystem needed for profiling."); handleException(); } } return 0; }