From: Serban Constantinescu Date: Wed, 4 Dec 2013 18:09:39 +0000 (+0000) Subject: staging: android: binder: Add copy_flat_binder_object() X-Git-Tag: firefly_0821_release~3680^2~4^2~33^2~3 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=46bd93ed20f4b4f1ae743f46a458b6d8eb10f2b0;p=firefly-linux-kernel-4.4.55.git staging: android: binder: Add copy_flat_binder_object() This patch adds copy_flat_binder_object macro() that will help dereference struct flat_binder_object on 64bit systems where the structure differs between 32bit and 64bit userspace. This patch is a temporary patch that will be extended with 32bit compat handling. Signed-off-by: Serban Constantinescu Signed-off-by: John Stultz --- diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 6dd58a228361..16ce8f4e5ed2 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -145,6 +145,11 @@ module_param_call(stop_on_user_error, binder_set_stop_on_user_error, #define deref_helper(ptr) (*(typeof(size_t *))ptr) #define size_helper(x) sizeof(x) +static inline struct flat_binder_object *copy_flat_binder_object(void __user *ptr) +{ + return (struct flat_binder_object *)ptr; +} + enum binder_stat_types { BINDER_STAT_PROC, BINDER_STAT_THREAD, @@ -1258,7 +1263,7 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, debug_id, deref_helper(offp), buffer->data_size); continue; } - fp = (struct flat_binder_object *)(buffer->data + deref_helper(offp)); + fp = copy_flat_binder_object(buffer->data + deref_helper(offp)); switch (fp->type) { case BINDER_TYPE_BINDER: case BINDER_TYPE_WEAK_BINDER: { @@ -1512,7 +1517,7 @@ static void binder_transaction(struct binder_proc *proc, return_error = BR_FAILED_REPLY; goto err_bad_offset; } - fp = (struct flat_binder_object *)(t->buffer->data + deref_helper(offp)); + fp = copy_flat_binder_object(t->buffer->data + deref_helper(offp)); switch (fp->type) { case BINDER_TYPE_BINDER: case BINDER_TYPE_WEAK_BINDER: {