linux: Fix code style in linux_execve() function

This commit is contained in:
EnderIce2 2024-10-19 01:52:25 +03:00
parent d9517a5cab
commit 53360c10e2
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -1538,11 +1538,11 @@ __no_sanitize("undefined") static int linux_execve(SysFrm *sf, const char *pathn
break; break;
} }
char **safe_argv = (char **)pcb->vma->RequestPages(TO_PAGES(argvLen * sizeof(char *))); char **safeArgv = (char **)pcb->vma->RequestPages(TO_PAGES(argvLen * sizeof(char *)));
char **safe_envp = (char **)pcb->vma->RequestPages(TO_PAGES(envpLen * sizeof(char *))); char **safeEnvp = (char **)pcb->vma->RequestPages(TO_PAGES(envpLen * sizeof(char *)));
const char *arg; const char *arg;
char *n_arg; char *nArg;
for (int i = 0; i < argvLen; i++) for (int i = 0; i < argvLen; i++)
{ {
arg = pcb->PageTable->Get(pArgv[i]); arg = pcb->PageTable->Get(pArgv[i]);
@ -1550,14 +1550,14 @@ __no_sanitize("undefined") static int linux_execve(SysFrm *sf, const char *pathn
size_t len = strlen(arg); size_t len = strlen(arg);
debug("arg[%d]: %s", i, arg); debug("arg[%d]: %s", i, arg);
n_arg = (char *)pcb->vma->RequestPages(TO_PAGES(len)); nArg = (char *)pcb->vma->RequestPages(TO_PAGES(len));
memcpy((void *)n_arg, arg, len); memcpy((void *)nArg, arg, len);
n_arg[len] = '\0'; nArg[len] = '\0';
safe_argv[i] = n_arg; safeArgv[i] = nArg;
if (likely(i < MAX_ARG - 1)) if (likely(i < MAX_ARG - 1))
safe_argv[i + 1] = nullptr; safeArgv[i + 1] = nullptr;
} }
for (int i = 0; i < envpLen; i++) for (int i = 0; i < envpLen; i++)
@ -1567,62 +1567,62 @@ __no_sanitize("undefined") static int linux_execve(SysFrm *sf, const char *pathn
size_t len = strlen(arg); size_t len = strlen(arg);
debug("env[%d]: %s", i, arg); debug("env[%d]: %s", i, arg);
n_arg = (char *)pcb->vma->RequestPages(TO_PAGES(len)); nArg = (char *)pcb->vma->RequestPages(TO_PAGES(len));
memcpy((void *)n_arg, arg, len); memcpy((void *)nArg, arg, len);
n_arg[len] = '\0'; nArg[len] = '\0';
safe_envp[i] = n_arg; safeEnvp[i] = nArg;
if (likely(i < MAX_ARG - 1)) if (likely(i < MAX_ARG - 1))
safe_envp[i + 1] = nullptr; safeEnvp[i + 1] = nullptr;
} }
FileNode *File = fs->GetByPath(pPathname, pcb->CWD); FileNode *file = fs->GetByPath(pPathname, pcb->CWD);
if (!File) if (!file)
{ {
error("File not found"); error("File not found");
return -linux_ENOENT; return -linux_ENOENT;
} }
char shebang_magic[2]; char shebangMagic[2]{};
File->Read((uint8_t *)shebang_magic, 2, 0); file->Read((uint8_t *)shebangMagic, 2, 0);
if (shebang_magic[0] == '#' && shebang_magic[1] == '!') if (shebangMagic[0] == '#' && shebangMagic[1] == '!')
{ {
char *orig_path = (char *)pcb->vma->RequestPages(TO_PAGES(strlen(pPathname) + 1)); char *origPath = (char *)pcb->vma->RequestPages(TO_PAGES(strlen(pPathname) + 1));
memcpy(orig_path, pPathname, strlen(pPathname) + 1); memcpy(origPath, pPathname, strlen(pPathname) + 1);
char *shebang = (char *)pPathname; char *shebang = (char *)pPathname;
size_t shebang_len = 0; size_t shebangLength = 0;
constexpr int shebang_len_max = 255; constexpr int shebangLengthMax = 255;
off_t shebang_off = 2; off_t shebangOffset = 2;
while (true) while (true)
{ {
char c; char c;
if (File->Read((uint8_t *)&c, 1, shebang_off) == 0) if (file->Read((uint8_t *)&c, 1, shebangOffset) == 0)
break; break;
if (c == '\n' || shebang_len == shebang_len_max) if (c == '\n' || shebangLength == shebangLengthMax)
break; break;
shebang[shebang_len++] = c; shebang[shebangLength++] = c;
shebang_off++; shebangOffset++;
} }
shebang[shebang_len] = '\0'; shebang[shebangLength] = '\0';
debug("Shebang: %s", shebang); debug("Shebang: %s", shebang);
char **c_safe_argv = (char **)pcb->vma->RequestPages(TO_PAGES(MAX_ARG)); char **cSafeArgv = (char **)pcb->vma->RequestPages(TO_PAGES(MAX_ARG));
int i = 0; int i = 0;
for (; safe_argv[i] != nullptr; i++) for (; safeArgv[i] != nullptr; i++)
{ {
size_t arg_len = strlen(safe_argv[i]); size_t argLength = strlen(safeArgv[i]);
char *c_arg = (char *)pcb->vma->RequestPages(TO_PAGES(arg_len)); char *cArg = (char *)pcb->vma->RequestPages(TO_PAGES(argLength));
memcpy((void *)c_arg, safe_argv[i], arg_len); memcpy((void *)cArg, safeArgv[i], argLength);
c_arg[arg_len] = '\0'; cArg[argLength] = '\0';
c_safe_argv[i] = c_arg; cSafeArgv[i] = cArg;
debug("c_safe_argv[%d]: %s", i, c_safe_argv[i]); debug("cSafeArgv[%d]: %s", i, cSafeArgv[i]);
} }
c_safe_argv[i] = nullptr; cSafeArgv[i] = nullptr;
char *token = strtok(shebang, " "); char *token = strtok(shebang, " ");
i = 0; i = 0;
@ -1633,27 +1633,27 @@ __no_sanitize("undefined") static int linux_execve(SysFrm *sf, const char *pathn
memcpy((void *)t_arg, token, len); memcpy((void *)t_arg, token, len);
t_arg[len] = '\0'; t_arg[len] = '\0';
safe_argv[i++] = t_arg; safeArgv[i++] = t_arg;
token = strtok(nullptr, " "); token = strtok(nullptr, " ");
} }
safe_argv[i++] = orig_path; safeArgv[i++] = origPath;
for (int j = 1; c_safe_argv[j] != nullptr; j++) for (int j = 1; cSafeArgv[j] != nullptr; j++)
{ {
safe_argv[i++] = c_safe_argv[j]; safeArgv[i++] = cSafeArgv[j];
debug("clone: safe_argv[%d]: %s", debug("clone: safeArgv[%d]: %s",
i, safe_argv[i - 1]); i, safeArgv[i - 1]);
} }
safe_argv[i] = nullptr; safeArgv[i] = nullptr;
return ConvertErrnoToLinux(linux_execve(sf, safe_argv[0], return ConvertErrnoToLinux(linux_execve(sf, safeArgv[0],
(char *const *)safe_argv, (char *const *)safeArgv,
(char *const *)safe_envp)); (char *const *)safeEnvp));
} }
int ret = Execute::Spawn((char *)pPathname, int ret = Execute::Spawn((char *)pPathname,
(const char **)safe_argv, (const char **)safeArgv,
(const char **)safe_envp, (const char **)safeEnvp,
pcb, true, pcb, true,
pcb->Info.Compatibility); pcb->Info.Compatibility);
@ -1667,7 +1667,7 @@ __no_sanitize("undefined") static int linux_execve(SysFrm *sf, const char *pathn
cwk_path_get_basename(pPathname, &baseName, nullptr); cwk_path_get_basename(pPathname, &baseName, nullptr);
pcb->Rename(baseName); pcb->Rename(baseName);
pcb->SetWorkingDirectory(File->Parent); pcb->SetWorkingDirectory(file->Parent);
pcb->SetExe(pPathname); pcb->SetExe(pPathname);
Tasking::Task *ctx = pcb->GetContext(); Tasking::Task *ctx = pcb->GetContext();