adapt binder for kernel 6.6.0

This commit is contained in:
heppen 2024-03-05 17:00:27 +08:00
parent 00f9bedc6e
commit d0581125c1
4 changed files with 46 additions and 48 deletions

View File

@ -1,22 +1,22 @@
From 94b7c10aba2a0c79b88a2b37598adefd206f3e5b Mon Sep 17 00:00:00 2001 From 9a2376b00d8ea7cf635241f8ab9cc78101019776 Mon Sep 17 00:00:00 2001
From: heppen <hepeng68@huawei.com> From: heppen <heppen@qq.com>
Date: Mon, 26 Jun 2023 17:11:55 +0800 Date: Tue, 5 Mar 2024 16:50:29 +0800
Subject: [PATCH] Adapt binder as a kernel module Subject: [PATCH] Adapt binder as a kernel module on kernel 6.6.0-10
--- ---
Makefile | 21 ++++++++--- Makefile | 18 ++++++--
binder.c | 26 +++++++++++-- binder.c | 22 +++++++++-
binder_alloc.c | 2 +- binder_alloc.c | 2 +-
external_symbols.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++ external_symbols.c | 102 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 131 insertions(+), 9 deletions(-) 4 files changed, 138 insertions(+), 6 deletions(-)
create mode 100644 external_symbols.c create mode 100644 external_symbols.c
diff --git a/Makefile b/Makefile diff --git a/Makefile b/Makefile
index c9d3d0c..5d07f84 100644 index c9d3d0c..385bcaf 100644
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -1,6 +1,17 @@ @@ -1,6 +1,16 @@
-# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
-ccflags-y += -I$(src) # needed for trace events -ccflags-y += -I$(src) # needed for trace events
+CONFIG_MODULE_SIG=n +CONFIG_MODULE_SIG=n
+ccflags-y += -I$(src) -Wno-int-conversion -Wno-implicit-function-declaration -DCONFIG_ANDROID_BINDER_DEVICES=\"binder\" +ccflags-y += -I$(src) -Wno-int-conversion -Wno-implicit-function-declaration -DCONFIG_ANDROID_BINDER_DEVICES=\"binder\"
@ -24,14 +24,12 @@ index c9d3d0c..5d07f84 100644
-obj-$(CONFIG_ANDROID_BINDERFS) += binderfs.o -obj-$(CONFIG_ANDROID_BINDERFS) += binderfs.o
-obj-$(CONFIG_ANDROID_BINDER_IPC) += binder.o binder_alloc.o -obj-$(CONFIG_ANDROID_BINDER_IPC) += binder.o binder_alloc.o
-obj-$(CONFIG_ANDROID_BINDER_IPC_SELFTEST) += binder_alloc_selftest.o -obj-$(CONFIG_ANDROID_BINDER_IPC_SELFTEST) += binder_alloc_selftest.o
+# only support openEuler-22.03-LTS-SP2 kernel.
+ifneq ($(KERNELRELEASE),) +ifneq ($(KERNELRELEASE),)
+obj-m := binder_linux.o +obj-m := binder_linux.o
+binder_linux-y := external_symbols.o binder.o binder_alloc.o +binder_linux-y := external_symbols.o binder.o binder_alloc.o
+else +else
+KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build +KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build
+ +
+
+all: +all:
+ $(MAKE) -C $(KERNEL_SRC) V=0 M=$$PWD + $(MAKE) -C $(KERNEL_SRC) V=0 M=$$PWD
+ +
@ -39,21 +37,10 @@ index c9d3d0c..5d07f84 100644
+ $(MAKE) -C $(KERNEL_SRC) M=$$PWD clean + $(MAKE) -C $(KERNEL_SRC) M=$$PWD clean
+endif +endif
diff --git a/binder.c b/binder.c diff --git a/binder.c b/binder.c
index b403c7f..35384d8 100644 index 92128aa..25f1a30 100644
--- a/binder.c --- a/binder.c
+++ b/binder.c +++ b/binder.c
@@ -2039,8 +2039,8 @@ static size_t binder_get_object(struct binder_proc *proc, @@ -6622,7 +6622,27 @@ err_alloc_device_names_failed:
return 0;
} else {
if (binder_alloc_copy_from_buffer(&proc->alloc, object, buffer,
- offset, read_size))
- return 0;
+ offset, read_size))
+ return 0;
}
/* Ok, now see if we read a complete object. */
@@ -6531,7 +6531,27 @@ err_alloc_device_names_failed:
return ret; return ret;
} }
@ -83,7 +70,7 @@ index b403c7f..35384d8 100644
#define CREATE_TRACE_POINTS #define CREATE_TRACE_POINTS
#include "binder_trace.h" #include "binder_trace.h"
diff --git a/binder_alloc.c b/binder_alloc.c diff --git a/binder_alloc.c b/binder_alloc.c
index a77ed66..1f5446c 100644 index e3db829..eef695e 100644
--- a/binder_alloc.c --- a/binder_alloc.c
+++ b/binder_alloc.c +++ b/binder_alloc.c
@@ -38,7 +38,7 @@ enum { @@ -38,7 +38,7 @@ enum {
@ -97,10 +84,10 @@ index a77ed66..1f5446c 100644
#define binder_alloc_debug(mask, x...) \ #define binder_alloc_debug(mask, x...) \
diff --git a/external_symbols.c b/external_symbols.c diff --git a/external_symbols.c b/external_symbols.c
new file mode 100644 new file mode 100644
index 0000000..4ee95e7 index 0000000..3e7bf7c
--- /dev/null --- /dev/null
+++ b/external_symbols.c +++ b/external_symbols.c
@@ -0,0 +1,91 @@ @@ -0,0 +1,102 @@
+#include <linux/sched.h> +#include <linux/sched.h>
+#include <linux/file.h> +#include <linux/file.h>
+#include <linux/fdtable.h> +#include <linux/fdtable.h>
@ -110,6 +97,13 @@ index 0000000..4ee95e7
+#include <linux/spinlock.h> +#include <linux/spinlock.h>
+#include <linux/kprobes.h> +#include <linux/kprobes.h>
+ +
+enum task_work_notify_mode {
+ TWA_NONE,
+ TWA_RESUME,
+ TWA_SIGNAL,
+ TWA_SIGNAL_NO_IPI,
+};
+
+static struct kprobe kp = { +static struct kprobe kp = {
+ .symbol_name = "kallsyms_lookup_name" + .symbol_name = "kallsyms_lookup_name"
+}; +};
@ -126,7 +120,7 @@ index 0000000..4ee95e7
+ return kallsyms_lookup_name_ptr; + return kallsyms_lookup_name_ptr;
+} +}
+ +
+static void (*zap_page_range_ptr)(struct vm_area_struct *, unsigned long, unsigned long) = NULL; +// static void (*zap_page_range_ptr)(struct vm_area_struct *, unsigned long, unsigned long) = NULL;
+static int (*can_nice_ptr)(const struct task_struct *, const int) = NULL; +static int (*can_nice_ptr)(const struct task_struct *, const int) = NULL;
+static int (*security_binder_set_context_mgr_ptr)(struct task_struct *mgr) = NULL; +static int (*security_binder_set_context_mgr_ptr)(struct task_struct *mgr) = NULL;
+static int (*security_binder_transaction_ptr)(struct task_struct *from, struct task_struct *to) = NULL; +static int (*security_binder_transaction_ptr)(struct task_struct *from, struct task_struct *to) = NULL;
@ -136,62 +130,66 @@ index 0000000..4ee95e7
+ enum task_work_notify_mode mode) = NULL; + enum task_work_notify_mode mode) = NULL;
+static void (*__wake_up_pollfree_ptr)(wait_queue_head_t *wq_head) = NULL; +static void (*__wake_up_pollfree_ptr)(wait_queue_head_t *wq_head) = NULL;
+ +
+static int (*close_fd_get_file_ptr)(unsigned int fd, struct file **res) = NULL; +static struct file* (*close_fd_get_file_ptr)(unsigned int fd) = NULL;
+ +
+void zap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size) +static void (*zap_page_range_single_ptr)(struct vm_area_struct *vma, unsigned long address,
+ unsigned long size, struct zap_details *details) = NULL;
+
+void zap_page_range_single(struct vm_area_struct *vma, unsigned long address, // yes
+ unsigned long size, struct zap_details *details)
+{ +{
+ zap_page_range_ptr = get_lookup()("zap_page_range"); + zap_page_range_single_ptr = get_lookup()("zap_page_range_single");
+ zap_page_range_ptr(vma, address, size); + zap_page_range_single_ptr(vma, address, size, details);
+} +}
+ +
+int can_nice(const struct task_struct *p, const int nice) +int can_nice(const struct task_struct *p, const int nice) // yes
+{ +{
+ can_nice_ptr = get_lookup()("can_nice"); + can_nice_ptr = get_lookup()("can_nice");
+ return can_nice_ptr(p, nice); + return can_nice_ptr(p, nice);
+} +}
+ +
+int security_binder_set_context_mgr(struct task_struct *mgr) +int security_binder_set_context_mgr(struct task_struct *mgr) // yes
+{ +{
+ security_binder_set_context_mgr_ptr = get_lookup()("security_binder_set_context_mgr"); + security_binder_set_context_mgr_ptr = get_lookup()("security_binder_set_context_mgr");
+ return security_binder_set_context_mgr_ptr(mgr); + return security_binder_set_context_mgr_ptr(mgr);
+} +}
+ +
+int security_binder_transaction(struct task_struct *from, struct task_struct *to) +int security_binder_transaction(struct task_struct *from, struct task_struct *to) // yes
+{ +{
+ security_binder_transaction_ptr = get_lookup()("security_binder_transaction"); + security_binder_transaction_ptr = get_lookup()("security_binder_transaction");
+ return security_binder_transaction_ptr(from, to); + return security_binder_transaction_ptr(from, to);
+} +}
+ +
+int security_binder_transfer_binder(struct task_struct *from, struct task_struct *to) +int security_binder_transfer_binder(struct task_struct *from, struct task_struct *to) // yes
+{ +{
+ security_binder_transfer_binder_ptr = get_lookup()("security_binder_transfer_binder"); + security_binder_transfer_binder_ptr = get_lookup()("security_binder_transfer_binder");
+ return security_binder_transfer_binder_ptr(from, to); + return security_binder_transfer_binder_ptr(from, to);
+} +}
+ +
+int security_binder_transfer_file(struct task_struct *from, struct task_struct *to, struct file *file) +int security_binder_transfer_file(struct task_struct *from, struct task_struct *to, struct file *file) // yes
+{ +{
+ security_binder_transfer_file_ptr = get_lookup()("security_binder_transfer_file"); + security_binder_transfer_file_ptr = get_lookup()("security_binder_transfer_file");
+ return security_binder_transfer_file_ptr(from, to, file); + return security_binder_transfer_file_ptr(from, to, file);
+} +}
+ +
+int task_work_add(struct task_struct *task, struct callback_head *twork, +int task_work_add(struct task_struct *task, struct callback_head *twork, // yes
+ enum task_work_notify_mode mode) + enum task_work_notify_mode mode)
+{ +{
+ task_work_add_ptr = get_lookup()("task_work_add"); + task_work_add_ptr = get_lookup()("task_work_add");
+ return task_work_add_ptr(task, twork, mode); + return task_work_add_ptr(task, twork, mode);
+} +}
+ +
+int close_fd_get_file(unsigned int fd, struct file **res) +struct file *close_fd_get_file(unsigned int fd)
+{ +{
+ close_fd_get_file_ptr = get_lookup()("close_fd_get_file"); + close_fd_get_file_ptr = get_lookup()("close_fd_get_file");
+ return close_fd_get_file_ptr(fd, res); + return close_fd_get_file_ptr(fd);
+} +}
+ +
+void __wake_up_pollfree(wait_queue_head_t *wq_head) +void __wake_up_pollfree(wait_queue_head_t *wq_head) // yes
+{ +{
+ __wake_up_pollfree_ptr = get_lookup()("__wake_up_pollfree"); + __wake_up_pollfree_ptr = get_lookup()("__wake_up_pollfree");
+ return __wake_up_pollfree_ptr(wq_head); + return __wake_up_pollfree_ptr(wq_head);
+} +}
-- --
2.33.0 2.43.0

BIN
binder-6.6.0.tar.gz Normal file

Binary file not shown.

View File

@ -7,7 +7,7 @@
%global binder_dest_path /usr/lib/modules/%(uname -r)/binder %global binder_dest_path /usr/lib/modules/%(uname -r)/binder
%global ashmem_dest_path /usr/lib/modules/%(uname -r)/ashmem %global ashmem_dest_path /usr/lib/modules/%(uname -r)/ashmem
%define with_ashmem 1 %define with_ashmem 0
%define with_install_ko 0 %define with_install_ko 0
Name: communication_ipc Name: communication_ipc
@ -21,7 +21,7 @@ Source2: https://gitee.com/openharmony/communication_dsoftbus/repository/
Source3: https://gitee.com/openharmony/third_party_sqlite/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_sqlite-OpenHarmony-v3.2-Release.tar.gz Source3: https://gitee.com/openharmony/third_party_sqlite/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_sqlite-OpenHarmony-v3.2-Release.tar.gz
Source4: https://gitee.com/openharmony/third_party_libcoap/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_libcoap-OpenHarmony-v3.2-Release.tar.gz Source4: https://gitee.com/openharmony/third_party_libcoap/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_libcoap-OpenHarmony-v3.2-Release.tar.gz
Source5: https://gitee.com/openharmony/third_party_mbedtls/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_mbedtls-OpenHarmony-v3.2-Release.tar.gz Source5: https://gitee.com/openharmony/third_party_mbedtls/repository/archive/OpenHarmony-v3.2-Release.tar.gz #/third_party_mbedtls-OpenHarmony-v3.2-Release.tar.gz
Source6: https://gitee.com/openeuler/kernel/binder-%{oe_version}.tar.gz Source6: https://gitee.com/openeuler/kernel/binder-6.6.0.tar.gz
Source7: ipc.bundle.json Source7: ipc.bundle.json
Source8: ipc.BUILD.gn Source8: ipc.BUILD.gn
Source9: ipc_core.BUILD.gn Source9: ipc_core.BUILD.gn
@ -36,7 +36,7 @@ Source17: binder.pp
Patch1: 0001-remove-dependence-on-access-token-and-hitrace.patch Patch1: 0001-remove-dependence-on-access-token-and-hitrace.patch
Patch2: 0002-fix-build-error-from-header-include.patch Patch2: 0002-fix-build-error-from-header-include.patch
Patch3: 0003-adapt-binder-as-a-kernel-module.patch Patch3: 0003-Adapt-binder-as-a-kernel-module-on-kernel-6.6.0-10.patch
Patch4: 0004-adapt-compilation-for-softbus_client.patch Patch4: 0004-adapt-compilation-for-softbus_client.patch
BuildRequires: gcc, make, hilog, kernel-devel, uname-build-checks BuildRequires: gcc, make, hilog, kernel-devel, uname-build-checks