kernel/x86_64: compatibility syscalls for image.cpp.

* define compat_image_info, compat_extended_image_info
to be used for respective 32-bit types of syscalls in compatibility mode.
* handle 32-bit types in _user_register_image, _user_get_image_info,
_user_get_next_image_info, other syscalls are compatible as is.

Change-Id: Ibbd33e6796208dfa70d869e36bf745bc3e18d330
This commit is contained in:
Jérôme Duval
2018-06-12 15:55:55 +00:00
parent 2ffbe7aaca
commit c70cba914a
3 changed files with 169 additions and 15 deletions
@@ -23,6 +23,18 @@ copy_ref_var_from_user(T *user, T &kernel)
return user_memcpy(&kernel, user, sizeof(T));
}
template<typename T>
inline
status_t
copy_ref_var_from_user(T *user, T &kernel, size_t size)
{
if (size != sizeof(T))
return B_BAD_VALUE;
return copy_ref_var_from_user(user, kernel);
}
// copy_ref_var_to_user
template<typename T>
inline
@@ -35,4 +47,17 @@ copy_ref_var_to_user(T &kernel, T *user)
}
template<typename T>
inline
status_t
copy_ref_var_to_user(T &kernel, T *user, size_t size)
{
if (size > sizeof(T))
return B_BAD_VALUE;
if (!IS_USER_ADDRESS(user))
return B_BAD_ADDRESS;
return user_memcpy(user, &kernel, size);
}
#endif // _SYSCALL_ARGS_H