|
@@ -9989,18 +9989,13 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|
/* Short circuit this for the magic exe check. */
|
|
/* Short circuit this for the magic exe check. */
|
|
ret = -TARGET_EINVAL;
|
|
ret = -TARGET_EINVAL;
|
|
} else if (is_proc_myself((const char *)p, "exe")) {
|
|
} else if (is_proc_myself((const char *)p, "exe")) {
|
|
- char real[PATH_MAX], *temp;
|
|
|
|
- temp = realpath(exec_path, real);
|
|
|
|
- /* Return value is # of bytes that we wrote to the buffer. */
|
|
|
|
- if (temp == NULL) {
|
|
|
|
- ret = get_errno(-1);
|
|
|
|
- } else {
|
|
|
|
- /* Don't worry about sign mismatch as earlier mapping
|
|
|
|
- * logic would have thrown a bad address error. */
|
|
|
|
- ret = MIN(strlen(real), arg3);
|
|
|
|
- /* We cannot NUL terminate the string. */
|
|
|
|
- memcpy(p2, real, ret);
|
|
|
|
- }
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Don't worry about sign mismatch as earlier mapping
|
|
|
|
+ * logic would have thrown a bad address error.
|
|
|
|
+ */
|
|
|
|
+ ret = MIN(strlen(exec_path), arg3);
|
|
|
|
+ /* We cannot NUL terminate the string. */
|
|
|
|
+ memcpy(p2, exec_path, ret);
|
|
} else {
|
|
} else {
|
|
ret = get_errno(readlink(path(p), p2, arg3));
|
|
ret = get_errno(readlink(path(p), p2, arg3));
|
|
}
|
|
}
|
|
@@ -10021,18 +10016,13 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|
/* Short circuit this for the magic exe check. */
|
|
/* Short circuit this for the magic exe check. */
|
|
ret = -TARGET_EINVAL;
|
|
ret = -TARGET_EINVAL;
|
|
} else if (is_proc_myself((const char *)p, "exe")) {
|
|
} else if (is_proc_myself((const char *)p, "exe")) {
|
|
- char real[PATH_MAX], *temp;
|
|
|
|
- temp = realpath(exec_path, real);
|
|
|
|
- /* Return value is # of bytes that we wrote to the buffer. */
|
|
|
|
- if (temp == NULL) {
|
|
|
|
- ret = get_errno(-1);
|
|
|
|
- } else {
|
|
|
|
- /* Don't worry about sign mismatch as earlier mapping
|
|
|
|
- * logic would have thrown a bad address error. */
|
|
|
|
- ret = MIN(strlen(real), arg4);
|
|
|
|
- /* We cannot NUL terminate the string. */
|
|
|
|
- memcpy(p2, real, ret);
|
|
|
|
- }
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Don't worry about sign mismatch as earlier mapping
|
|
|
|
+ * logic would have thrown a bad address error.
|
|
|
|
+ */
|
|
|
|
+ ret = MIN(strlen(exec_path), arg4);
|
|
|
|
+ /* We cannot NUL terminate the string. */
|
|
|
|
+ memcpy(p2, exec_path, ret);
|
|
} else {
|
|
} else {
|
|
ret = get_errno(readlinkat(arg1, path(p), p2, arg4));
|
|
ret = get_errno(readlinkat(arg1, path(p), p2, arg4));
|
|
}
|
|
}
|