Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

staging: binder: Fix ABI for 64bit Android

BC_REQUEST_DEATH_NOTIFICATION and BC_CLEAR_DEATH_NOTIFICATION were
defined with the wrong structure that did not match the code. Since a
binder pointer and handle are the same size on 32 bit systems, this
change does not affect them. The two commands claimed they were using
struct binder_ptr_cookie but they are using a 32bit handle and a pointer.

The main purpose of this patch is to add the binder_handle_cookie
struct so the service manager does not have to define its own version
(libbinder writes one field at a time so it does not use the struct).

On 32bit systems the payload size is the same as the size of struct
binder_ptr_cookie. On 64bit systems, the size does differ, and the
ioctl number does change. However, there are no known 64bit users of
this interface, and any 64bit systems will need the following patch to
run 32 bit processes anyway, so it is not expected that anyone will
ship a 64bit system without this change, so this change should not
affect any existing systems.

Cc: Colin Cross <ccross@android.com>
Cc: Arve Hjønnevåg <arve@android.com>
Cc: Serban Constantinescu <serban.constantinescu@arm.com>
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
[jstultz: Few 80+ col fixes for checkpatch, improved commit message
with help from Serban, and included rational from Arve's email]
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Serban Constantinescu and committed by
Greg Kroah-Hartman
df24a2ea 58e75731

+11 -4
+11 -4
drivers/staging/android/uapi/binder.h
··· 152 152 void *cookie; 153 153 }; 154 154 155 + struct binder_handle_cookie { 156 + __u32 handle; 157 + void *cookie; 158 + } __attribute__((packed)); 159 + 155 160 struct binder_pri_desc { 156 161 __s32 priority; 157 162 __u32 desc; ··· 313 308 * of looping threads it has available. 314 309 */ 315 310 316 - BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_ptr_cookie), 311 + BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, 312 + struct binder_handle_cookie), 317 313 /* 318 - * void *: ptr to binder 314 + * int: handle 319 315 * void *: cookie 320 316 */ 321 317 322 - BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_ptr_cookie), 318 + BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, 319 + struct binder_handle_cookie), 323 320 /* 324 - * void *: ptr to binder 321 + * int: handle 325 322 * void *: cookie 326 323 */ 327 324