Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add umount feature for 5.9+ kernel, fix exclude and allow profile transfer #85

Closed
wants to merge 19 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 10 additions & 24 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,19 @@ jobs:
- name: Build kpimg
run: |
export TARGET_COMPILE=`pwd`/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-

cd kernel
make
mv kpimg kpimg-linux
mv kpimg.elf kpimg.elf-linux
make clean

export ANDROID=1
make
mv kpimg kpimg-android
mv kpimg.elf kpimg.elf-android
make clean

unset ANDROID
make
mv kpimg kpimg-linux
mv kpimg.elf kpimg.elf-linux
make clean

cd ..
cd kpms
Expand Down Expand Up @@ -125,7 +128,7 @@ jobs:
replacesArtifacts: true
omitBodyDuringUpdate: true

Build-android-kpatch-kptools:
Build-android-kptools:
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -149,7 +152,7 @@ jobs:
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r25b
ndk-version: r26b
add-to-path: true

- name: Make hdr
Expand All @@ -158,21 +161,6 @@ jobs:
cd kernel
make hdr

- name: Build kpatch-android
run: |
cd user
export ANDROID=1
mkdir -p build/android && cd build/android
echo ${{ steps.setup-ndk.outputs.ndk-path }}
cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_PLATFORM=android-33 \
-DANDROID_ABI=arm64-v8a ../..
cmake --build .
unset ANDROID
mv kpatch kpatch-android

- name: Build kptools-android
run: |
cd tools
Expand All @@ -192,8 +180,6 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}
artifacts: |
user/build/android/kpatch-android
user/build/android/libapjni.so
tools/build/android/kptools-android
allowUpdates: true
replacesArtifacts: true
Expand Down
42 changes: 12 additions & 30 deletions .github/workflows/build_dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ on:
push:
branches: ["dev"]
paths:
- ".github/workflows/build.yml"
- ".github/workflows/build_dev.yml"
- "kernel/**"
- "user/**"
- "tools/**"
- "version"
pull_request:
branches: ["dev"]
paths:
- ".github/workflows/build.yml"
- ".github/workflows/build_dev.yml"
- "kernel/**"
- "user/**"
- "tools/**"
Expand Down Expand Up @@ -48,14 +48,18 @@ jobs:
run: |
export TARGET_COMPILE=`pwd`/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
cd kernel
make
mv kpimg kpimg-linux
mv kpimg.elf kpimg.elf-linux
make clean

export ANDROID=1
make
mv kpimg kpimg-android
mv kpimg.elf kpimg.elf-android
make clean

unset ANDROID
make
mv kpimg kpimg-linux
mv kpimg.elf kpimg.elf-linux
make clean

cd ..
cd kpms
Expand Down Expand Up @@ -85,7 +89,6 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}-dev
commit: dev
artifacts: |
kernel/kpimg-linux
kernel/kpimg-android
Expand Down Expand Up @@ -127,14 +130,13 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}-dev
commit: dev
artifacts: |
kpuser.zip
allowUpdates: true
replacesArtifacts: true
prerelease: true

Build-android-kpatch-kptools:
Build-android-kptools:
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -158,7 +160,7 @@ jobs:
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r25b
ndk-version: r26b
add-to-path: true

- name: Make hdr
Expand All @@ -167,21 +169,6 @@ jobs:
cd kernel
make hdr

- name: Build kpatch-android
run: |
cd user
export ANDROID=1
mkdir -p build/android && cd build/android
echo ${{ steps.setup-ndk.outputs.ndk-path }}
cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_PLATFORM=android-33 \
-DANDROID_ABI=arm64-v8a ../..
cmake --build .
unset ANDROID
mv kpatch kpatch-android

- name: Build kptools-android
run: |
cd tools
Expand All @@ -200,10 +187,7 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}-dev
commit: dev
artifacts: |
user/build/android/kpatch-android
user/build/android/libapjni.so
tools/build/android/kptools-android
allowUpdates: true
replacesArtifacts: true
Expand Down Expand Up @@ -246,7 +230,6 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}-dev
commit: dev
artifacts: |
tools/build/kptools-linux
allowUpdates: true
Expand Down Expand Up @@ -289,7 +272,6 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.parse_version.outputs.VERSION }}-dev
commit: dev
artifacts: |
tools/build/kptools-mac
allowUpdates: true
Expand Down
1 change: 1 addition & 0 deletions doc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
api
18 changes: 18 additions & 0 deletions doxyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
PROJECT_NAME = "KernelPatch Document"
OUTPUT_DIRECTORY = ./doc/api

INPUT = \
./user/supercall.h \
./kernel/include/hook.h \
./kernel/patch/include/accctl.h \
./kernel/patch/include/taskext.h \
./kernel/patch/include/uapi/scdefs.h \

FILE_PATTERNS = *.h *.md

RECURSIVE = YES
GENERATE_LATEX = NO
SOURCE_BROWSER = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
5 changes: 3 additions & 2 deletions kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,9 @@ ${TARGET}.elf: ${OBJS}

.PHONY: hdr
hdr:
cp -Rf patch/include/uapi ../user
cp -f include/preset.h ../tools
cp -Rf patch/include/uapi ../user/
cp -f ../version ../user/
cp -f include/preset.h ../tools/

.PHONY: clean
clean:
Expand Down
11 changes: 9 additions & 2 deletions kernel/base/fphook.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ uint64_t __attribute__((section(".fp.transit0.text"))) __attribute__((__noinline
uint32_t *vptr = (uint32_t *)this_va;
while (*--vptr != ARM64_NOP) {
};
vptr--;
fp_hook_chain_t *hook_chain = local_container_of((uint64_t)vptr, fp_hook_chain_t, transit);
hook_fargs0_t fargs;
fargs.skip_origin = 0;
Expand Down Expand Up @@ -52,6 +53,7 @@ _fp_transit4(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3)
uint32_t *vptr = (uint32_t *)this_va;
while (*--vptr != ARM64_NOP) {
};
vptr--;
fp_hook_chain_t *hook_chain = local_container_of((uint64_t)vptr, fp_hook_chain_t, transit);
hook_fargs4_t fargs;
fargs.skip_origin = 0;
Expand Down Expand Up @@ -91,6 +93,7 @@ _fp_transit8(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_
uint32_t *vptr = (uint32_t *)this_va;
while (*--vptr != ARM64_NOP) {
};
vptr--;
fp_hook_chain_t *hook_chain = local_container_of((uint64_t)vptr, fp_hook_chain_t, transit);
hook_fargs8_t fargs;
fargs.skip_origin = 0;
Expand Down Expand Up @@ -136,6 +139,7 @@ _fp_transit12(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64
uint32_t *vptr = (uint32_t *)this_va;
while (*--vptr != ARM64_NOP) {
};
vptr--;
fp_hook_chain_t *hook_chain = local_container_of((uint64_t)vptr, fp_hook_chain_t, transit);
hook_fargs12_t fargs;
fargs.skip_origin = 0;
Expand Down Expand Up @@ -205,9 +209,10 @@ static hook_err_t hook_chain_prepare(uint32_t *transit, int32_t argno)
// todo: assert
if (transit_num >= TRANSIT_INST_NUM) return -HOOK_TRANSIT_NO_MEM;

transit[0] = ARM64_NOP;
transit[0] = ARM64_BTI_JC;
transit[1] = ARM64_NOP;
for (int i = 0; i < transit_num; i++) {
transit[i + 1] = ((uint32_t *)transit_start)[i];
transit[i + 2] = ((uint32_t *)transit_start)[i];
}
return HOOK_NO_ERR;
}
Expand Down Expand Up @@ -258,6 +263,8 @@ hook_err_t fp_hook_wrap(uintptr_t fp_addr, int32_t argno, void *before, void *af
}

for (int i = 0; i < FP_HOOK_CHAIN_NUM; i++) {
if ((before && chain->befores[i] == before) || (after && chain->afters[i] == after)) return -HOOK_DUPLICATED;

// todo: atomic or lock
if (chain->states[i] == CHAIN_ITEM_STATE_EMPTY) {
chain->states[i] = CHAIN_ITEM_STATE_BUSY;
Expand Down
Loading