mirror of https://github.com/xemu-project/xemu.git
Merge remote-tracking branch 'remotes/riku/linux-user-for-upstream' into staging
* remotes/riku/linux-user-for-upstream: User mode support for Linux ELF files with no section header linux-user: Return correct errno for unsupported netlink socket linux-user: Don't overrun guest buffer in sched_getaffinity linux-user/uname: Return correct uname string for x86_64 linux-user: fix gcc-4.9 compiler error on __{get,put]}_user signal/ppc/do_setcontext remove __get_user return check signal/sparc64_set_context: remove __get_user checks signal/ppc/{save,restore}_user_regs remove __put/get error checks signal/all/setup_frame remove __put_user checks signal/all/do_sigreturn - remove __get_user checks signal/all/do_sigaltstack remove __get_user value check signal/sparc/restore_fpu_state: remove signal/all: remove return value from restore_sigcontext signal/all: remove return value from setup_sigcontext signal/all: remove return value from copy_siginfo_to_user signal/x86/setup_frame: __put_user cleanup signal/all: remove __get/__put_user return value reading Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0360fbd076
|
@ -1292,7 +1292,6 @@ static bool elf_check_ehdr(struct elfhdr *ehdr)
|
|||
return (elf_check_arch(ehdr->e_machine)
|
||||
&& ehdr->e_ehsize == sizeof(struct elfhdr)
|
||||
&& ehdr->e_phentsize == sizeof(struct elf_phdr)
|
||||
&& ehdr->e_shentsize == sizeof(struct elf_shdr)
|
||||
&& (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN));
|
||||
}
|
||||
|
||||
|
|
|
@ -299,7 +299,7 @@ static inline int access_ok(int type, abi_ulong addr, abi_ulong size)
|
|||
__builtin_choose_expr(sizeof(*(hptr)) == 2, stw_##e##_p, \
|
||||
__builtin_choose_expr(sizeof(*(hptr)) == 4, stl_##e##_p, \
|
||||
__builtin_choose_expr(sizeof(*(hptr)) == 8, stq_##e##_p, abort)))) \
|
||||
((hptr), (x)), 0)
|
||||
((hptr), (x)), (void)0)
|
||||
|
||||
#define __get_user_e(x, hptr, e) \
|
||||
((x) = (typeof(*hptr))( \
|
||||
|
@ -307,7 +307,7 @@ static inline int access_ok(int type, abi_ulong addr, abi_ulong size)
|
|||
__builtin_choose_expr(sizeof(*(hptr)) == 2, lduw_##e##_p, \
|
||||
__builtin_choose_expr(sizeof(*(hptr)) == 4, ldl_##e##_p, \
|
||||
__builtin_choose_expr(sizeof(*(hptr)) == 8, ldq_##e##_p, abort)))) \
|
||||
(hptr)), 0)
|
||||
(hptr)), (void)0)
|
||||
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
# define __put_user(x, hptr) __put_user_e(x, hptr, be)
|
||||
|
@ -326,9 +326,9 @@ static inline int access_ok(int type, abi_ulong addr, abi_ulong size)
|
|||
({ \
|
||||
abi_ulong __gaddr = (gaddr); \
|
||||
target_type *__hptr; \
|
||||
abi_long __ret; \
|
||||
abi_long __ret = 0; \
|
||||
if ((__hptr = lock_user(VERIFY_WRITE, __gaddr, sizeof(target_type), 0))) { \
|
||||
__ret = __put_user((x), __hptr); \
|
||||
__put_user((x), __hptr); \
|
||||
unlock_user(__hptr, __gaddr, sizeof(target_type)); \
|
||||
} else \
|
||||
__ret = -TARGET_EFAULT; \
|
||||
|
@ -339,9 +339,9 @@ static inline int access_ok(int type, abi_ulong addr, abi_ulong size)
|
|||
({ \
|
||||
abi_ulong __gaddr = (gaddr); \
|
||||
target_type *__hptr; \
|
||||
abi_long __ret; \
|
||||
abi_long __ret = 0; \
|
||||
if ((__hptr = lock_user(VERIFY_READ, __gaddr, sizeof(target_type), 1))) { \
|
||||
__ret = __get_user((x), __hptr); \
|
||||
__get_user((x), __hptr); \
|
||||
unlock_user(__hptr, __gaddr, 0); \
|
||||
} else { \
|
||||
/* avoid warning */ \
|
||||
|
|
1223
linux-user/signal.c
1223
linux-user/signal.c
File diff suppressed because it is too large
Load Diff
|
@ -1856,7 +1856,7 @@ static abi_long do_socket(int domain, int type, int protocol)
|
|||
}
|
||||
|
||||
if (domain == PF_NETLINK)
|
||||
return -EAFNOSUPPORT; /* do not NETLINK socket connections possible */
|
||||
return -TARGET_EAFNOSUPPORT;
|
||||
ret = get_errno(socket(domain, type, protocol));
|
||||
if (ret >= 0) {
|
||||
ret = sock_flags_fixup(ret, target_type);
|
||||
|
@ -7438,6 +7438,22 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
ret = get_errno(sys_sched_getaffinity(arg1, mask_size, mask));
|
||||
|
||||
if (!is_error(ret)) {
|
||||
if (ret > arg2) {
|
||||
/* More data returned than the caller's buffer will fit.
|
||||
* This only happens if sizeof(abi_long) < sizeof(long)
|
||||
* and the caller passed us a buffer holding an odd number
|
||||
* of abi_longs. If the host kernel is actually using the
|
||||
* extra 4 bytes then fail EINVAL; otherwise we can just
|
||||
* ignore them and only copy the interesting part.
|
||||
*/
|
||||
int numcpus = sysconf(_SC_NPROCESSORS_CONF);
|
||||
if (numcpus > arg2 * 8) {
|
||||
ret = -TARGET_EINVAL;
|
||||
break;
|
||||
}
|
||||
ret = arg2;
|
||||
}
|
||||
|
||||
if (copy_to_user(arg3, mask, ret)) {
|
||||
goto efault;
|
||||
}
|
||||
|
|
|
@ -52,9 +52,7 @@ const char *cpu_to_uname_machine(void *cpu_env)
|
|||
/* earliest emulated CPU is ARMv5TE; qemu can emulate the 1026, but not its
|
||||
* Jazelle support */
|
||||
return "armv5te" utsname_suffix;
|
||||
#elif defined(TARGET_X86_64)
|
||||
return "x86-64";
|
||||
#elif defined(TARGET_I386)
|
||||
#elif defined(TARGET_I386) && !defined(TARGET_X86_64)
|
||||
/* see arch/x86/kernel/cpu/bugs.c: check_bugs(), 386, 486, 586, 686 */
|
||||
CPUState *cpu = ENV_GET_CPU((CPUX86State *)cpu_env);
|
||||
int family = object_property_get_int(OBJECT(cpu), "family", NULL);
|
||||
|
|
Loading…
Reference in New Issue