adapt binder for kernel 6.6.0
This commit is contained in:
parent
00f9bedc6e
commit
d0581125c1
@ -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
BIN
binder-6.6.0.tar.gz
Normal file
Binary file not shown.
Binary file not shown.
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user