UPSTREAM: ANDROID: binder: remove 32-bit binder interface.
authorMartijn Coenen <maco@google.com>
Fri, 11 May 2018 08:45:24 +0000 (01:45 -0700)
committerMartijn Coenen <maco@android.com>
Tue, 17 Jul 2018 11:02:12 +0000 (13:02 +0200)
New devices launching with Android P need to use the 64-bit
binder interface, even on 32-bit SoCs [0].

This change removes the Kconfig option to select the 32-bit
binder interface. We don't think this will affect existing
userspace for the following reasons:
1) The latest Android common tree is 4.14, so we don't
   believe any Android devices are on kernels >4.14.
2) Android devices launch on an LTS release and stick with
   it, so we wouldn't expect devices running on <= 4.14 now
   to upgrade to 4.17 or later. But even if they did, they'd
   rebuild the world (kernel + userspace) anyway.
3) Other userspaces like 'anbox' are already using the
   64-bit interface.

Note that this change doesn't remove the 32-bit UAPI
itself; the reason for that is that Android userspace
always uses the latest UAPI headers from upstream, and
userspace retains 32-bit support for devices that are
upgrading. This will be removed as well in 2-3 years,
at which point we can remove the code from the UAPI
as well.

Finally, this change introduces build errors on archs where
64-bit get_user/put_user is not supported, so make binder
unavailable on m68k (which wouldn't want it anyway).

[0]: https://android-review.googlesource.com/c/platform/build/+/595193

Signed-off-by: Martijn Coenen <maco@android.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1190b4e38f97023154e6b3bef61b251aa5f970d0)

Change-Id: I73dadf1d7b45a42bb18be5d5d3f5c090e61866de

drivers/android/Kconfig
drivers/android/binder.c

index 7dce3795b8874ba83d29215e5c70daf7e4a3cee9..ee4880bfdcdc98d21f139bdce51bb5776f3f17ab 100644 (file)
@@ -10,7 +10,7 @@ if ANDROID
 
 config ANDROID_BINDER_IPC
        bool "Android Binder IPC Driver"
-       depends on MMU
+       depends on MMU && !M68K
        default n
        ---help---
          Binder is used in Android for both communication between processes,
@@ -32,19 +32,6 @@ config ANDROID_BINDER_DEVICES
          created. Each binder device has its own context manager, and is
          therefore logically separated from the other devices.
 
-config ANDROID_BINDER_IPC_32BIT
-       bool "Use old (Android 4.4 and earlier) 32-bit binder API"
-       depends on !64BIT && ANDROID_BINDER_IPC
-       default y
-       ---help---
-         The Binder API has been changed to support both 32 and 64bit
-         applications in a mixed environment.
-
-         Enable this to support an old 32-bit Android user-space (v4.4 and
-         earlier).
-
-         Note that enabling this will break newer Android user-space.
-
 config ANDROID_BINDER_IPC_SELFTEST
        bool "Android Binder IPC Driver Selftest"
        depends on ANDROID_BINDER_IPC
index ef3ea79045c1b7bd692036734380f57e95f1d932..20aaf366559b43d0c1e1119cc907408f78e1888c 100644 (file)
 #include <linux/security.h>
 #include <linux/spinlock.h>
 
-#ifdef CONFIG_ANDROID_BINDER_IPC_32BIT
-#define BINDER_IPC_32BIT 1
-#endif
-
 #include <uapi/linux/android/binder.h>
 #include <uapi/linux/sched/types.h>
 #include "binder_alloc.h"
@@ -2212,8 +2208,8 @@ static size_t binder_validate_object(struct binder_buffer *buffer, u64 offset)
        struct binder_object_header *hdr;
        size_t object_size = 0;
 
-       if (offset > buffer->data_size - sizeof(*hdr) ||
-           buffer->data_size < sizeof(*hdr) ||
+       if (buffer->data_size < sizeof(*hdr) ||
+           offset > buffer->data_size - sizeof(*hdr) ||
            !IS_ALIGNED(offset, sizeof(u32)))
                return 0;