diff --git a/.github/workflows/kernel-tracker.yml b/.github/workflows/kernel-tracker.yml index 31357ff..fe05c70 100644 --- a/.github/workflows/kernel-tracker.yml +++ b/.github/workflows/kernel-tracker.yml @@ -17,46 +17,39 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + path: kunai - # Define the variable (e.g., from a file or a specific command) - - name: Define Cache Key Variable + - name: Define Variable run: | LATEST_LINUX_VERSION=$(git ls-remote --tags https://github.com/torvalds/linux.git | grep -P 'refs/tags/v\d+\.\d+$' | awk '{print$NF}' | awk -F'/' '{print$NF}' | sort -V | tail -1) - echo "cache-key=cache-linux-$LATEST_LINUX_VERSION" >> $GITHUB_ENV + echo "latest-linux-version=$LATEST_LINUX_VERSION" >> $GITHUB_ENV - name: Cache + id: cache-linux uses: actions/cache@v4.0.2 with: # A list of files, directories, and wildcard patterns to cache and restore - path: ~/linux/ + path: ./linux/ # An explicit key for restoring and saving the cache - key: ${{ env.cache-key }} + key: cache-linux-${{ env.latest-linux-version }} - name: Clone Kernel - run: | - set -euxo pipefail - if [ ! -d ~/linux ] - then - git clone https://github.com/torvalds/linux.git ~/linux - fi + # run the stuff only if we failed at retrieve from cache + if: steps.cache-linux.outputs.cache-hit != 'true' + uses: actions/checkout@v3 + with: + repository: torvalds/linux + ref: ${{ env.latest-linux-version }} + path: ./linux - - name: Checkout Latest Kernel - run: | - set -euxo pipefail - cd ~/linux - git checkout master - git pull - # checkout to latest stable version - LATEST_VERSION=$(git tag | grep -P 'v\d+\.\d+$' | sort -V | tail -n 1) - git checkout $LATEST_VERSION - - name: Test Kunai Hooks run: | set -euxo pipefail # we get kernel functions prototypes - grep -oPR --include='*.h' --include='*.c' '^(\w+\s+)+\w+\(' ~/linux | awk '{print$NF}' | tr -d '(' | sort -u > linux.sym + grep -oPR --include='*.h' --include='*.c' '^(\w+\s+)+\w+\(' ./linux | awk '{print$NF}' | tr -d '(' | sort -u > linux.sym # we get kunai hook points (only kprobes for the moment) - grep -iPR '#\[k(ret)?probe.*\]' kunai-ebpf | grep -oP 'function\s+=\s+"\w+?"' | cut -d '"' -f 2 | sort -u > probes.sym + grep -iPR '#\[k(ret)?probe.*\]' ./kunai/kunai-ebpf | grep -oP 'function\s+=\s+"\w+?"' | cut -d '"' -f 2 | sort -u > probes.sym # we check that every function hooked in Kunai still exists in the kernel for p in $(cat probes.sym);do grep -P "^$p$" linux.sym ;done