#include <stdbool.h>
#include <bundle.h>
+int _debug_change_mount_namespace(void);
int _debug_create_extra_argv(int *arg, char ***argv);
int _debug_create_argv(int *argc, char ***argv, bool *attach);
void _debug_destroy_argv(int argc, char **argv);
if (ret < 0)
return PAD_ERR_FAILED;
+ if (bundle_get_type(kb, AUL_K_SDK) != BUNDLE_TYPE_NONE)
+ _debug_change_mount_namespace();
+
/* SET PRIVILEGES*/
_W("security_manager_prepare_app ++");
ret = security_manager_prepare_app(appid);
#include <sys/stat.h>
#include <fcntl.h>
#include <bundle_internal.h>
+#include <ctype.h>
#include "debugger_info.h"
#include "key.h"
static GList *__debug_argv_list;
static GList *__extra_argv_list;
+int _debug_change_mount_namespace(void)
+{
+ const char *pid_str;
+ char buf[PATH_MAX];
+ int ret;
+ int fd;
+
+ pid_str = getenv("TARGET_PID");
+ if (pid_str == NULL)
+ return 0;
+
+ snprintf(buf, sizeof(buf), "/proc/%s/ns/mnt", pid_str);
+ fd = open(buf, O_RDONLY);
+ if (fd < 0) {
+ _E("open() is failed. path(%s), errno(%d)", buf, errno);
+ return -1;
+ }
+
+ ret = setns(fd, CLONE_NEWNS);
+ close(fd);
+ if (ret != 0)
+ _E("setns() is failed. errno(%d)", errno);
+
+ return ret;
+}
+
int _debug_create_extra_argv(int *argc, char ***argv)
{
int new_argc;
__debug_argv_list = g_list_append(__debug_argv_list,
strdup(str_arr[i]));
+ if (!strcmp(key, "__DLP_ATTACH_ARG__")) {
+ if (isdigit(str_arr[i][0])) {
+ _D("Target PID: %s", str_arr[i]);
+ setenv("TARGET_PID", str_arr[i], 1);
+ }
+ }
}
if (str_arr)