diff options
| author | Catalin Marinas <[email protected]> | 2015-02-23 15:13:40 +0000 | 
|---|---|---|
| committer | Catalin Marinas <[email protected]> | 2015-02-27 18:05:56 +0000 | 
| commit | 9d42d48a342aee208c1154696196497fdc556bbf (patch) | |
| tree | 6984daeb050a874f4e4e96eb1093c2ed2e3de69f /scripts/gdb/linux/__init__.py | |
| parent | a1e50a82256ed2f1312e70c52a84323e2e378f49 (diff) | |
arm64: compat Fix siginfo_t -> compat_siginfo_t conversion on big endian
The native (64-bit) sigval_t union contains sival_int (32-bit) and
sival_ptr (64-bit). When a compat application invokes a syscall that
takes a sigval_t value (as part of a larger structure, e.g.
compat_sys_mq_notify, compat_sys_timer_create), the compat_sigval_t
union is converted to the native sigval_t with sival_int overlapping
with either the least or the most significant half of sival_ptr,
depending on endianness. When the corresponding signal is delivered to a
compat application, on big endian the current (compat_uptr_t)sival_ptr
cast always returns 0 since sival_int corresponds to the top part of
sival_ptr. This patch fixes copy_siginfo_to_user32() so that sival_int
is copied to the compat_siginfo_t structure.
Cc: <[email protected]>
Reported-by: Bamvor Jian Zhang <[email protected]>
Tested-by: Bamvor Jian Zhang <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
Diffstat (limited to 'scripts/gdb/linux/__init__.py')
0 files changed, 0 insertions, 0 deletions