From f7108b96a07ee3955c850b84f681fc210e86b1a5 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Jul 2025 10:05:58 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=EF=BC=9A=20=20=201.=E7=A6=81=E7=94=A8seccomp=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=9C=BA=E5=88=B6=EF=BC=8C=E7=A6=81=E7=94=A8?= =?UTF-8?q?SELinux,=E6=8F=90=E9=AB=98=E5=85=BC=E5=AE=B9=E6=80=A7=20=20=202?= =?UTF-8?q?.=E6=B7=BB=E5=8A=A0MESA=E6=A8=A1=E5=9D=97=E7=BC=96=E8=AF=91?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E9=80=82=E9=85=8Dandroid=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=EF=BC=9B=E5=A2=9E=E5=8A=A0Kbox=E6=8A=93=E5=9B=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=92=8C=E5=AF=B9?= =?UTF-8?q?VMI=E7=9A=84=E7=9B=B8=E5=85=B3=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external-libdrm.patch | 15 + external-libva.patch | 46 +++ external-mesa3d.patch | 726 ++++++++++++++++++++++++++++++++++++++++ external-minigbm.patch | 23 ++ external-minijail.patch | 21 ++ external-selinux.patch | 147 ++++++++ 6 files changed, 978 insertions(+) create mode 100644 external-libdrm.patch create mode 100644 external-libva.patch create mode 100644 external-mesa3d.patch create mode 100644 external-minigbm.patch create mode 100644 external-minijail.patch create mode 100644 external-selinux.patch diff --git a/external-libdrm.patch b/external-libdrm.patch new file mode 100644 index 0000000..43412c4 --- /dev/null +++ b/external-libdrm.patch @@ -0,0 +1,15 @@ +diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c +--- a/amdgpu/amdgpu_bo.c ++++ b/amdgpu/amdgpu_bo.c +@@ -78,6 +78,10 @@ drm_public int amdgpu_bo_alloc(amdgpu_device_handle dev, + args.in.bo_size = alloc_buffer->alloc_size; + args.in.alignment = alloc_buffer->phys_alignment; + ++ if (alloc_buffer->preferred_heap & AMDGPU_GEM_DOMAIN_VRAM) { ++ alloc_buffer->flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED; ++ } ++ + /* Set the placement. */ + args.in.domains = alloc_buffer->preferred_heap; + args.in.domain_flags = alloc_buffer->flags; + diff --git a/external-libva.patch b/external-libva.patch new file mode 100644 index 0000000..b22aa50 --- /dev/null +++ b/external-libva.patch @@ -0,0 +1,46 @@ +diff --git a/configure.ac b/configure.ac + +--- a/configure.ac ++++ b/configure.ac +@@ -26,7 +26,7 @@ + # - increment micro for any other change (new flag, new codec definition, etc.) + # - reset micro version to zero when minor version is incremented + # - reset minor version to zero when major version is incremented +-m4_define([va_api_major_version], [1]) ++m4_define([va_api_major_version], [2]) + m4_define([va_api_minor_version], [21]) + m4_define([va_api_micro_version], [0]) + +diff --git a/va/Android.mk.disabled b/va/Android.mk.disabled + +--- a/va/Android.mk.disabled ++++ b/va/Android.mk.disabled +@@ -53,13 +53,14 @@ LOCAL_CFLAGS := \ + $(IGNORED_WARNNING) \ + -DLOG_TAG=\"libva\" + ++LOCAL_CFLAGS += -DSYSCONFDIR=\"/etc\" + LOCAL_C_INCLUDES := $(LOCAL_PATH)/.. + ++LOCAL_VENDOR_MODULE := true + LOCAL_MODULE_TAGS := optional + LOCAL_MODULE := libva + LOCAL_MODULE_CLASS := SHARED_LIBRARIES +-LOCAL_PROPRIETARY_MODULE := true +- ++#LOCAL_PROPRIETARY_MODULE := true + LOCAL_SHARED_LIBRARIES := libdl libdrm libcutils liblog + + intermediates := $(call local-generated-sources-dir) +@@ -95,8 +96,9 @@ LOCAL_C_INCLUDES += \ + + LOCAL_MODULE_TAGS := optional + LOCAL_MODULE := libva-android +-LOCAL_PROPRIETARY_MODULE := true ++#LOCAL_PROPRIETARY_MODULE := true + ++LOCAL_VENDOR_MODULE := true + LOCAL_SHARED_LIBRARIES := libva libdrm liblog + + include $(BUILD_SHARED_LIBRARY) + diff --git a/external-mesa3d.patch b/external-mesa3d.patch new file mode 100644 index 0000000..e35e7ee --- /dev/null +++ b/external-mesa3d.patch @@ -0,0 +1,726 @@ +diff --git a/android/Android.mk b/android/Android.mk +new file mode 100644 + +--- /dev/null ++++ b/android/Android.mk +@@ -0,0 +1,193 @@ ++# Mesa 3-D graphics library ++# ++# Copyright (C) 2021 GlobalLogic Ukraine ++# Copyright (C) 2021 Roman Stratiienko (r.stratiienko@gmail.com) ++# ++# Permission is hereby granted, free of charge, to any person obtaining a ++# copy of this software and associated documentation files (the "Software"), ++# to deal in the Software without restriction, including without limitation ++# the rights to use, copy, modify, merge, publish, distribute, sublicense, ++# and/or sell copies of the Software, and to permit persons to whom the ++# Software is furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice shall be included ++# in all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++# DEALINGS IN THE SOFTWARE. ++ ++ifneq ($(filter true, $(BOARD_MESA3D_USES_MESON_BUILD)),) ++ ++LOCAL_PATH := $(call my-dir) ++MESA3D_TOP := $(dir $(LOCAL_PATH)) ++ ++LIBDRM_VERSION = $(shell cat external/libdrm/meson.build | grep -o "\\s*:\s*'\w*\.\w*\.\w*'" | grep -o "\w*\.\w*\.\w*" | head -1) ++LIBVA_VERSION = $(shell cat external/libva/meson.build | grep -o "\\s*:\s*'\w*\.\w*\.\w*'" | grep -o "\w*\.\w*\.\w*" | head -1) ++LLVM_VERSION_MAJOR = $(shell \ ++ if [ -f external/llvm-project/cmake/Modules/LLVMVersion.cmake ]; then \ ++ grep 'set.LLVM_VERSION_MAJOR ' external/llvm-project/cmake/Modules/LLVMVersion.cmake | grep -o '[0-9]\+'; \ ++ else \ ++ grep 'set.LLVM_VERSION_MAJOR ' external/llvm-project/llvm/CMakeLists.txt | grep -o '[0-9]\+'; \ ++ fi) ++ ++MESA_VK_LIB_SUFFIX_amd := radeon ++MESA_VK_LIB_SUFFIX_intel := intel ++MESA_VK_LIB_SUFFIX_intel_hasvk := intel_hasvk ++MESA_VK_LIB_SUFFIX_freedreno := freedreno ++MESA_VK_LIB_SUFFIX_broadcom := broadcom ++MESA_VK_LIB_SUFFIX_panfrost := panfrost ++MESA_VK_LIB_SUFFIX_virtio := virtio ++MESA_VK_LIB_SUFFIX_swrast := lvp ++ ++include $(CLEAR_VARS) ++ ++LOCAL_SHARED_LIBRARIES := libc libdl libdrm libm liblog libcutils libz libc++ libnativewindow libsync libhardware libva ++LOCAL_STATIC_LIBRARIES := libexpat libarect libelf libzstd ++LOCAL_HEADER_LIBRARIES := libnativebase_headers hwvulkan_headers ++MESON_GEN_PKGCONFIGS := log cutils expat hardware libdrm:$(LIBDRM_VERSION) nativewindow sync zlib:1.2.11 libelf libva:$(LIBVA_VERSION) ++LOCAL_CFLAGS += $(BOARD_MESA3D_CFLAGS) ++ ++ifneq ($(filter swrast,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) ++ifeq ($(BOARD_MESA3D_FORCE_SOFTPIPE),) ++MESON_GEN_LLVM_STUB := true ++endif ++endif ++ ++ifneq ($(filter zink,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++LOCAL_SHARED_LIBRARIES += libvulkan ++MESON_GEN_PKGCONFIGS += vulkan ++endif ++ ++ifneq ($(filter iris,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++LOCAL_SHARED_LIBRARIES += libdrm_intel ++MESON_GEN_PKGCONFIGS += libdrm_intel:$(LIBDRM_VERSION) ++endif ++ ++ifneq ($(filter radeonsi,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++ifneq ($(MESON_GEN_LLVM_STUB),) ++LOCAL_CFLAGS += -DFORCE_BUILD_AMDGPU # instructs LLVM to declare LLVMInitializeAMDGPU* functions ++# The flag is required for the Android-x86 LLVM port that follows the AOSP LLVM porting rules ++# https://osdn.net/projects/android-x86/scm/git/external-llvm-project ++endif ++endif ++ ++ifneq ($(filter radeonsi amd,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) ++LOCAL_SHARED_LIBRARIES += libdrm_amdgpu ++MESON_GEN_PKGCONFIGS += libdrm_amdgpu:$(LIBDRM_VERSION) ++endif ++ ++ifneq ($(filter radeonsi r300 r600,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++LOCAL_SHARED_LIBRARIES += libdrm_radeon ++MESON_GEN_PKGCONFIGS += libdrm_radeon:$(LIBDRM_VERSION) ++endif ++ ++ifneq ($(filter d3d12,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++LOCAL_HEADER_LIBRARIES += DirectX-Headers ++LOCAL_STATIC_LIBRARIES += DirectX-Guids ++MESON_GEN_PKGCONFIGS += DirectX-Headers ++endif ++ ++ifneq ($(MESON_GEN_LLVM_STUB),) ++MESON_LLVM_VERSION := 13.0.1 ++LOCAL_SHARED_LIBRARIES += libLLVM70 ++endif ++ ++ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0) ++LOCAL_SHARED_LIBRARIES += \ ++ android.hardware.graphics.mapper@4.0 \ ++ libgralloctypes \ ++ libhidlbase \ ++ libutils ++ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 35; echo $$?), 0) ++LOCAL_SHARED_LIBRARIES += libui ++MESON_GEN_PKGCONFIGS += ui ++endif ++MESON_GEN_PKGCONFIGS += android.hardware.graphics.mapper:4.0 ++endif ++ ++__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) ++ ++MESA_LIBGBM_NAME := libgbm ++ ++ifeq ($(TARGET_IS_64_BIT),true) ++LOCAL_MULTILIB := 64 ++else ++LOCAL_MULTILIB := 32 ++endif ++include $(LOCAL_PATH)/mesa3d_cross.mk ++ ++ ++ifdef TARGET_2ND_ARCH ++LOCAL_MULTILIB := 32 ++include $(LOCAL_PATH)/mesa3d_cross.mk ++endif ++ ++#------------------------------------------------------------------------------- ++ ++# $1: name ++# $2: subdir ++# $3: source prebuilt ++# $4: export headers ++define mesa3d-lib ++include $(CLEAR_VARS) ++LOCAL_MODULE_CLASS := SHARED_LIBRARIES ++LOCAL_MODULE := $1 ++LOCAL_VENDOR_MODULE := true ++LOCAL_MODULE_RELATIVE_PATH := $2 ++LOCAL_PREBUILT_MODULE_FILE := $($3) ++LOCAL_MULTILIB := first ++LOCAL_CHECK_ELF_FILES := false ++LOCAL_MODULE_SUFFIX := .so ++LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) ++LOCAL_EXPORT_C_INCLUDE_DIRS := $4 ++include $(BUILD_PREBUILT) ++ ++ifdef TARGET_2ND_ARCH ++include $(CLEAR_VARS) ++LOCAL_MODULE_CLASS := SHARED_LIBRARIES ++LOCAL_MODULE := $1 ++LOCAL_VENDOR_MODULE := true ++LOCAL_MODULE_RELATIVE_PATH := $2 ++LOCAL_PREBUILT_MODULE_FILE := $(2ND_$3) ++LOCAL_MULTILIB := 32 ++LOCAL_CHECK_ELF_FILES := false ++LOCAL_MODULE_SUFFIX := .so ++LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) ++LOCAL_EXPORT_C_INCLUDE_DIRS := $4 ++include $(BUILD_PREBUILT) ++endif ++endef ++ ++ifneq ($(strip $(BOARD_MESA3D_GALLIUM_DRIVERS)),) ++# Module 'libgallium_dri', produces '/vendor/lib{64}/libgallium_dri.so' ++# This module also trigger DRI symlinks creation process ++$(eval $(call mesa3d-lib,libgallium_dri,,MESA3D_GALLIUM_BIN)) ++# Module 'libglapi', produces '/vendor/lib{64}/libglapi.so' ++$(eval $(call mesa3d-lib,libglapi,,MESA3D_LIBGLAPI_BIN)) ++$(eval $(call mesa3d-lib,dri_gbm,dri,MESA3D_DRI_GBM_BIN)) ++ ++# Module 'libEGL_mesa', produces '/vendor/lib{64}/egl/libEGL_mesa.so' ++$(eval $(call mesa3d-lib,libEGL_mesa,egl,MESA3D_LIBEGL_BIN)) ++# Module 'libGLESv1_CM_mesa', produces '/vendor/lib{64}/egl/libGLESv1_CM_mesa.so' ++$(eval $(call mesa3d-lib,libGLESv1_CM_mesa,egl,MESA3D_LIBGLESV1_BIN)) ++# Module 'libGLESv2_mesa', produces '/vendor/lib{64}/egl/libGLESv2_mesa.so' ++$(eval $(call mesa3d-lib,libGLESv2_mesa,egl,MESA3D_LIBGLESV2_BIN)) ++endif ++ ++# Modules 'vulkan.{driver_name}', produces '/vendor/lib{64}/hw/vulkan.{driver_name}.so' HAL ++$(foreach driver,$(BOARD_MESA3D_VULKAN_DRIVERS), \ ++ $(eval $(call mesa3d-lib,vulkan.$(MESA_VK_LIB_SUFFIX_$(driver)),hw,MESA3D_VULKAN_$(driver)_BIN))) ++ ++#ifneq ($(filter true, $(BOARD_MESA3D_BUILD_LIBGBM)),) ++# Modules 'libgbm', produces '/vendor/lib{64}/libgbm.so' ++$(eval $(call mesa3d-lib,$(MESA_LIBGBM_NAME),,MESA3D_LIBGBM_BIN,$(MESA3D_TOP)/src/gbm/main)) ++#endif ++ ++#------------------------------------------------------------------------------- ++ ++endif +diff --git a/android/mesa3d_cross.mk b/android/mesa3d_cross.mk +new file mode 100644 + +--- /dev/null ++++ b/android/mesa3d_cross.mk +@@ -0,0 +1,325 @@ ++# Mesa 3-D graphics library ++# ++# Copyright (C) 2021 GlobalLogic Ukraine ++# Copyright (C) 2021 Roman Stratiienko (r.stratiienko@gmail.com) ++# ++# Permission is hereby granted, free of charge, to any person obtaining a ++# copy of this software and associated documentation files (the "Software"), ++# to deal in the Software without restriction, including without limitation ++# the rights to use, copy, modify, merge, publish, distribute, sublicense, ++# and/or sell copies of the Software, and to permit persons to whom the ++# Software is furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice shall be included ++# in all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++# DEALINGS IN THE SOFTWARE. ++ ++MY_PATH := $(call my-dir) ++ ++AOSP_ABSOLUTE_PATH := $(realpath .) ++define relative-to-absolute ++$(if $(patsubst /%,,$1),$(AOSP_ABSOLUTE_PATH)/$1,$1) ++endef ++ ++LOCAL_MODULE_CLASS := SHARED_LIBRARIES ++LOCAL_MODULE := meson.dummy.$(LOCAL_MULTILIB) ++ ++m_dummy := $(local-generated-sources-dir)/dummy.c ++$(m_dummy): ++ mkdir -p $(dir $@) ++ touch $@ ++ ++LOCAL_GENERATED_SOURCES := $(m_dummy) ++LOCAL_VENDOR_MODULE := true ++ ++# Prepare intermediate variables by AOSP make/core internals ++include $(BUILD_SHARED_LIBRARY) ++ ++LOCAL_PATH := $(MY_PATH) ++ ++link_deps := \ ++ $(built_static_libraries) \ ++ $(built_shared_libraries) \ ++ $(built_whole_libraries) \ ++ $(strip $(all_objects)) \ ++ $(my_target_libatomic) \ ++ $(my_target_libcrt_builtins) \ ++ $(my_target_crtbegin_so_o) \ ++ $(my_target_crtend_so_o) ++ ++# Build mesa3d using intermediate variables provided by AOSP make/core internals ++M_TARGET_PREFIX := $(my_2nd_arch_prefix) ++ ++MESA3D_LIB_DIR := lib$(subst 32,,$(LOCAL_MULTILIB)) ++ ++MESON_OUT_DIR := $($(M_TARGET_PREFIX)TARGET_OUT_INTERMEDIATES)/MESON_MESA3D ++MESON_GEN_DIR := $(MESON_OUT_DIR)_GEN ++MESON_GEN_FILES_TARGET := $(MESON_GEN_DIR)/.timestamp ++ ++MESA3D_GALLIUM_DIR := $(MESON_OUT_DIR)/install/usr/local/lib ++$(M_TARGET_PREFIX)MESA3D_GALLIUM_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libgallium_dri.so ++$(M_TARGET_PREFIX)MESA3D_LIBEGL_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libEGL.so ++$(M_TARGET_PREFIX)MESA3D_LIBGLESV1_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libGLESv1_CM.so ++$(M_TARGET_PREFIX)MESA3D_LIBGLESV2_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libGLESv2.so ++$(M_TARGET_PREFIX)MESA3D_LIBGLAPI_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libglapi.so ++$(M_TARGET_PREFIX)MESA3D_LIBGBM_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/$(MESA_LIBGBM_NAME).so ++$(M_TARGET_PREFIX)MESA3D_DRI_GBM_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/gbm/dri_gbm.so ++ ++ ++MESA3D_GBM_BINS := \ ++ $($(M_TARGET_PREFIX)MESA3D_LIBGBM_BIN) \ ++ $($(M_TARGET_PREFIX)MESA3D_DRI_GBM_BIN) \ ++ ++MESA3D_GLES_BINS := \ ++ $($(M_TARGET_PREFIX)MESA3D_GALLIUM_BIN) \ ++ $($(M_TARGET_PREFIX)MESA3D_LIBEGL_BIN) \ ++ $($(M_TARGET_PREFIX)MESA3D_LIBGLESV1_BIN) \ ++ $($(M_TARGET_PREFIX)MESA3D_LIBGLESV2_BIN) \ ++ $($(M_TARGET_PREFIX)MESA3D_LIBGLAPI_BIN) \ ++ ++MESON_GEN_NINJA := \ ++ cd $(MESON_OUT_DIR) && PATH=/usr/bin:/usr/local/bin:$$PATH meson.py ./build \ ++ --cross-file $(call relative-to-absolute,$(MESON_GEN_DIR))/aosp_cross \ ++ --buildtype=release \ ++ -Dgbm-backends-path=/vendor/$(MESA3D_LIB_DIR)/dri \ ++ -Dplatforms=android \ ++ -Dplatform-sdk-version=$(PLATFORM_SDK_VERSION) \ ++ -Dgallium-drivers=radeonsi \ ++ -Dvulkan-drivers=$(subst $(space),$(comma),$(subst radeon,amd,$(BOARD_MESA3D_VULKAN_DRIVERS))) \ ++ -Dgbm=enabled \ ++ -Degl=enabled \ ++ -Dllvm=disabled \ ++ -Dcpp_rtti=false \ ++ -Dlmsensors=disabled \ ++ -Dandroid-libbacktrace=enabled \ ++ $(BOARD_MESA3D_MESON_ARGS) \ ++ -Dgallium-va=enabled \ ++ -Dandroid-stub=true \ ++ -Degl-native-platform=android \ ++ ++MESON_BUILD := PATH=/usr/bin:/bin:/sbin:$$PATH ninja -C $(MESON_OUT_DIR)/build ++ ++$(MESON_GEN_FILES_TARGET): MESON_CPU_FAMILY := $(subst arm64,aarch64,$(TARGET_$(M_TARGET_PREFIX)ARCH)) ++ ++define create-pkgconfig ++echo -e "Name: $2" \ ++ "\nDescription: $2" \ ++ "\nVersion: $3" > $1/$2.pc ++ ++endef ++ ++# Taken from build/make/core/binary.mk. We need this ++# to use definitions from build/make/core/definitions.mk ++$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_INCLUDES := $(my_target_global_c_includes) ++$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_SYSTEM_INCLUDES := $(my_target_global_c_system_includes) ++ ++$(MESON_GEN_FILES_TARGET): PRIVATE_2ND_ARCH_VAR_PREFIX := $(M_TARGET_PREFIX) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CC := $(my_cc) ++$(MESON_GEN_FILES_TARGET): PRIVATE_LINKER := $(my_linker) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CXX := $(my_cxx) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CXX_LINK := $(my_cxx_link) ++$(MESON_GEN_FILES_TARGET): PRIVATE_YACCFLAGS := $(LOCAL_YACCFLAGS) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ASFLAGS := $(my_asflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CONLYFLAGS := $(my_conlyflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS := $(my_cflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS := $(my_cppflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS_NO_OVERRIDE := $(my_cflags_no_override) ++$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS_NO_OVERRIDE := $(my_cppflags_no_override) ++$(MESON_GEN_FILES_TARGET): PRIVATE_RTTI_FLAG := $(LOCAL_RTTI_FLAG) ++$(MESON_GEN_FILES_TARGET): PRIVATE_DEBUG_CFLAGS := $(debug_cflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_C_INCLUDES := $(my_c_includes) ++$(MESON_GEN_FILES_TARGET): PRIVATE_IMPORTED_INCLUDES := $(imported_includes) ++$(MESON_GEN_FILES_TARGET): PRIVATE_LDFLAGS := $(my_ldflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_LDLIBS := $(my_ldlibs) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_CHECKS := $(my_tidy_checks) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_FLAGS := $(my_tidy_flags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ARFLAGS := $(my_arflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_SHARED_LIBRARIES := $(built_shared_libraries) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_STATIC_LIBRARIES := $(built_static_libraries) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(built_whole_libraries) ++$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_OBJECTS := $(strip $(all_objects)) ++ ++$(MESON_GEN_FILES_TARGET): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) ++ ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CONLYFLAGS := $(my_target_global_conlyflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags) ++ ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBCRT_BUILTINS := $(my_target_libcrt_builtins) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTBEGIN_SO_O := $(my_target_crtbegin_so_o) ++$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTEND_SO_O := $(my_target_crtend_so_o) ++## ++ ++define m-lld-flags ++ -Wl,-e,main \ ++ -nostdlib -Wl,--gc-sections \ ++ $(PRIVATE_TARGET_CRTBEGIN_SO_O) \ ++ $(PRIVATE_ALL_OBJECTS) \ ++ -Wl,--whole-archive \ ++ $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ ++ -Wl,--no-whole-archive \ ++ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ ++ $(PRIVATE_ALL_STATIC_LIBRARIES) \ ++ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ ++ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \ ++ $(PRIVATE_TARGET_LIBCRT_BUILTINS) \ ++ $(PRIVATE_TARGET_LIBATOMIC) \ ++ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ ++ $(PRIVATE_LDFLAGS) \ ++ $(PRIVATE_ALL_SHARED_LIBRARIES) \ ++ $(PRIVATE_TARGET_CRTEND_SO_O) \ ++ $(PRIVATE_LDLIBS) ++endef ++ ++define m-lld-flags-cleaned ++ $(patsubst -Wl$(comma)--build-id=%,, \ ++ $(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/, \ ++ $(subst $(OUT_DIR)/,$(call relative-to-absolute,$(OUT_DIR))/, \ ++ $(subst -Wl$(comma)--fatal-warnings,, \ ++ $(subst -Wl$(comma)--no-undefined-version,, \ ++ $(subst -Wl$(comma)--gc-sections,, \ ++ $(patsubst %dummy.o,, \ ++ $(m-lld-flags)))))))) ++endef ++ ++define m-cpp-flags ++ $(PRIVATE_TARGET_GLOBAL_CFLAGS) \ ++ $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \ ++ $(PRIVATE_ARM_CFLAGS) \ ++ $(PRIVATE_RTTI_FLAG) \ ++ $(PRIVATE_CFLAGS) \ ++ $(PRIVATE_CPPFLAGS) \ ++ $(PRIVATE_DEBUG_CFLAGS) \ ++ $(PRIVATE_CFLAGS_NO_OVERRIDE) \ ++ $(PRIVATE_CPPFLAGS_NO_OVERRIDE) ++endef ++ ++define m-c-flags ++ $(PRIVATE_TARGET_GLOBAL_CFLAGS) \ ++ $(PRIVATE_TARGET_GLOBAL_CONLYFLAGS) \ ++ $(PRIVATE_ARM_CFLAGS) \ ++ $(PRIVATE_CFLAGS) \ ++ $(PRIVATE_CONLYFLAGS) \ ++ $(PRIVATE_DEBUG_CFLAGS) \ ++ $(PRIVATE_CFLAGS_NO_OVERRIDE) ++endef ++ ++define filter-c-flags ++ $(filter-out -std=gnu++17 -std=gnu++14 -std=gnu99 -fno-rtti \ ++ -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang \ ++ -ftrivial-auto-var-init=zero, ++ $(patsubst -W%,, $1)) ++endef ++ ++define nospace-includes ++ $(subst $(space)-isystem$(space),$(space)-isystem, \ ++ $(subst $(space)-I$(space),$(space)-I, \ ++ $(strip $(c-includes)))) ++endef ++ ++# Ensure include paths are always absolute ++# When OUT_DIR_COMMON_BASE env variable is set the AOSP/KATI will use absolute paths ++# for headers in intermediate output directories, but relative for all others. ++define abs-include ++$(strip \ ++ $(if $(patsubst -I%,,$1),\ ++ $(if $(patsubst -isystem/%,,$1),\ ++ $(subst -isystem,-isystem$(AOSP_ABSOLUTE_PATH)/,$1),\ ++ $1\ ++ ),\ ++ $(if $(patsubst -I/%,,$1),\ ++ $(subst -I,-I$(AOSP_ABSOLUTE_PATH)/,$1),\ ++ $1\ ++ )\ ++ ) ++) ++endef ++ ++$(MESON_GEN_FILES_TARGET): PREPROCESS_MESON_CONFIGS:=$(PREPROCESS_MESON_CONFIGS) ++$(MESON_GEN_FILES_TARGET): MESON_GEN_DIR:=$(MESON_GEN_DIR) ++$(MESON_GEN_FILES_TARGET): $(sort $(shell find -L $(MESA3D_TOP) -not -path '*/\.*')) ++ mkdir -p $(dir $@) ++ echo -e "[properties]\n" \ ++ "c_args = [$(foreach flag,$(call filter-c-flags,$(m-c-flags)),'$(flag)', ) \ ++ $(foreach inc,$(nospace-includes),'$(call abs-include,$(inc))', )'']\n" \ ++ "cpp_args = [$(foreach flag,$(call filter-c-flags,$(m-cpp-flags)),'$(flag)', ) \ ++ $(foreach inc,$(nospace-includes),'$(call abs-include,$(inc))', )'']\n" \ ++ "c_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n" \ ++ "cpp_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n" \ ++ "needs_exe_wrapper = true\n" \ ++ "[binaries]\n" \ ++ "ar = '$(AOSP_ABSOLUTE_PATH)/$($($(M_TARGET_PREFIX))TARGET_AR)'\n" \ ++ "c = [$(foreach arg,$(PRIVATE_CC),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\n" \ ++ "cpp = [$(foreach arg,$(PRIVATE_CXX),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\n" \ ++ "c_ld = 'lld'\n" \ ++ "cpp_ld = 'lld'\n\n" \ ++ "pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=' + '$(call relative-to-absolute,$(MESON_GEN_DIR))', '/usr/bin/pkg-config']\n\n" \ ++ "llvm-config = '/dev/null'\n" \ ++ "[host_machine]\n" \ ++ "system = 'android'\n" \ ++ "cpu_family = '$(MESON_CPU_FAMILY)'\n" \ ++ "cpu = '$(MESON_CPU_FAMILY)'\n" \ ++ "endian = 'little'" > $(dir $@)/aosp_cross ++ ++ # ++ $(foreach pkg, $(MESON_GEN_PKGCONFIGS), $(call create-pkgconfig,$(dir $@),$(word 1, $(subst :, ,$(pkg))),$(word 2, $(subst :, ,$(pkg))))) ++ touch $@ ++ ++$(MESON_OUT_DIR)/.build.timestamp: MESON_GEN_NINJA:=$(MESON_GEN_NINJA) ++$(MESON_OUT_DIR)/.build.timestamp: MESON_BUILD:=$(MESON_BUILD) ++$(MESON_OUT_DIR)/.build.timestamp: $(MESON_GEN_FILES_TARGET) $(link_deps) ++ rm -rf $(dir $@) ++ mkdir -p $(dir $@) ++ mkdir -p $(dir $@)/build ++ # Meson will update timestamps in sources directory, continuously retriggering the build ++ # even if nothing changed. Copy sources into intermediate dir to avoid this effect. ++ cp -r $(MESA3D_TOP)/* $(dir $@) ++ifneq ($(MESON_GEN_LLVM_STUB),) ++ mkdir -p $(dir $@)/subprojects/llvm/ ++ echo -e "project('llvm', 'cpp', version : '$(MESON_LLVM_VERSION)')\n" \ ++ "dep_llvm = declare_dependency()\n" \ ++ "has_rtti = false\n" > $(dir $@)/subprojects/llvm/meson.build ++endif ++ $(MESON_GEN_NINJA) ++ $(MESON_BUILD) ++ touch $@ ++ ++MESON_COPY_LIBGALLIUM := \ ++ cp $($(M_TARGET_PREFIX)MESA3D_DRI_GBM_BIN) $(MESA3D_GALLIUM_DIR) ++ ++$(MESON_OUT_DIR)/install/.install.timestamp: MESON_COPY_LIBGALLIUM:=$(MESON_COPY_LIBGALLIUM) ++$(MESON_OUT_DIR)/install/.install.timestamp: MESON_BUILD:=$(MESON_BUILD) ++$(MESON_OUT_DIR)/install/.install.timestamp: $(MESON_OUT_DIR)/.build.timestamp ++ rm -rf $(dir $@) ++ mkdir -p $(dir $@) ++ DESTDIR=$(call relative-to-absolute,$(dir $@)) $(MESON_BUILD) install ++ $(MESON_COPY_LIBGALLIUM) ++ touch $@ ++ ++$(MESA3D_GBM_BINS) $(MESA3D_GLES_BINS): $(MESON_OUT_DIR)/install/.install.timestamp ++ echo "Build $@" ++ touch $@ ++ ++define vulkan_target ++$(M_TARGET_PREFIX)MESA3D_VULKAN_$1_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libvulkan_$(MESA_VK_LIB_SUFFIX_$1).so ++$(MESON_OUT_DIR)/install/usr/local/lib/libvulkan_$(MESA_VK_LIB_SUFFIX_$1).so: $(MESON_OUT_DIR)/install/.install.timestamp ++ touch $(MESON_OUT_DIR)/install/usr/local/lib/libvulkan_$(MESA_VK_LIB_SUFFIX_$1).so ++ ++endef ++ ++$(foreach driver,$(BOARD_MESA3D_VULKAN_DRIVERS), $(eval $(call vulkan_target,$(driver)))) ++ ++$($(M_TARGET_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES)/dri/.symlinks.timestamp: $(MESON_OUT_DIR)/install/.install.timestamp ++ # Create Symlinks ++ mkdir -p $(dir $@) ++ ln -s -f libgallium_dri.so $(dir $@)/radeonsi_dri.so ++ touch $@ +diff --git a/meson.build b/meson.build + +--- a/meson.build ++++ b/meson.build +@@ -570,8 +570,8 @@ if with_vulkan_icd_dir == '' + with_vulkan_icd_dir = join_paths(get_option('datadir'), 'vulkan/icd.d') + endif + +-with_dri2 = (with_dri or with_any_vk) and (with_dri_platform == 'drm' or with_dri_platform == 'apple') +- ++with_dri2 = (with_dri or with_any_vk) and (with_dri_platform == 'drm' or ++ host_machine.system() == 'gnu') + with_x11_dri2 = with_dri2 and get_option('legacy-x11').contains('dri2') + + if with_dri +diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c + +--- a/src/gallium/frontends/dri/dri2.c ++++ b/src/gallium/frontends/dri/dri2.c +@@ -1834,6 +1834,18 @@ dri2_blit_image(__DRIcontext *context, __DRIimage *dst, __DRIimage *src, + } + } + ++void * ++dri2_map_image_native(__DRIcontext *context, __DRIimage *image, ++ int x0, int y0, int width, int height, ++ unsigned int flags, int *stride, void **data) ++{ ++ struct dri_context *ctx = dri_context(context); ++ dri_image_fence_sync(ctx, image); ++ struct pipe_resource *resource = image->texture; ++ pipe_reference_described(NULL, &resource->reference, (debug_reference_descriptor)debug_describe_resource); ++ return resource; ++} ++ + void * + dri2_map_image(__DRIcontext *context, __DRIimage *image, + int x0, int y0, int width, int height, +diff --git a/src/gallium/frontends/dri/dri_util.h b/src/gallium/frontends/dri/dri_util.h + +--- a/src/gallium/frontends/dri/dri_util.h ++++ b/src/gallium/frontends/dri/dri_util.h +@@ -270,6 +270,10 @@ PUBLIC void * + dri2_map_image(__DRIcontext *context, __DRIimage *image, + int x0, int y0, int width, int height, + unsigned int flags, int *stride, void **data); ++PUBLIC void * ++dri2_map_image_native(__DRIcontext *context, __DRIimage *image, ++ int x0, int y0, int width, int height, ++ unsigned int flags, int *stride, void **data); + PUBLIC void + dri2_unmap_image(__DRIcontext *context, __DRIimage *image, void *data); + PUBLIC bool +diff --git a/src/gallium/targets/dri/dri.sym.in b/src/gallium/targets/dri/dri.sym.in + +--- a/src/gallium/targets/dri/dri.sym.in ++++ b/src/gallium/targets/dri/dri.sym.in +@@ -44,6 +44,7 @@ + dri2_blit_image; + dri2_get_capabilities; + dri2_map_image; ++ dri2_map_image_native; + dri2_unmap_image; + dri_query_dma_buf_formats; + dri_query_dma_buf_modifiers; +diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c + +--- a/src/gbm/backends/dri/gbm_dri.c ++++ b/src/gbm/backends/dri/gbm_dri.c +@@ -1040,6 +1040,39 @@ gbm_dri_bo_map(struct gbm_bo *_bo, + width, height, flags, (int *)stride, + map_data); + } ++static void * ++gbm_dri_bo_map_native(struct gbm_bo *_bo, ++ uint32_t x, uint32_t y, ++ uint32_t width, uint32_t height, ++ uint32_t flags, uint32_t *stride, void **map_data) ++{ ++ struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); ++ struct gbm_dri_bo *bo = gbm_dri_bo(_bo); ++ ++ /* If it's a dumb buffer, we already have a mapping */ ++ if (bo->map) { ++ *map_data = (char *)bo->map + (bo->base.v0.stride * y) + (x * 4); ++ *stride = bo->base.v0.stride; ++ return *map_data; ++ } ++ ++ mtx_lock(&dri->mutex); ++ if (!dri->context) { ++ unsigned error; ++ ++ dri->context = driCreateContextAttribs(dri->screen, ++ __DRI_API_OPENGL, ++ NULL, NULL, 0, NULL, ++ &error, NULL); ++ } ++ assert(dri->context); ++ mtx_unlock(&dri->mutex); ++ ++ /* GBM flags and DRI flags are the same, so just pass them on */ ++ return dri2_map_image_native(dri->context, bo->image, x, y, ++ width, height, flags, (int *)stride, ++ map_data); ++} + + static void + gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) +@@ -1166,6 +1199,7 @@ dri_device_create(int fd, uint32_t gbm_backend_version) + dri->base.v0.bo_create = gbm_dri_bo_create; + dri->base.v0.bo_import = gbm_dri_bo_import; + dri->base.v0.bo_map = gbm_dri_bo_map; ++ dri->base.v0.bo_map_native = gbm_dri_bo_map_native; + dri->base.v0.bo_unmap = gbm_dri_bo_unmap; + dri->base.v0.is_format_supported = gbm_dri_is_format_supported; + dri->base.v0.get_format_modifier_plane_count = +diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c + +--- a/src/gbm/main/gbm.c ++++ b/src/gbm/main/gbm.c +@@ -44,6 +44,8 @@ + #include "gbm.h" + #include "gbmint.h" + #include "backend.h" ++#include "log/log.h" ++ + + /** Returns the file description for the gbm device + * +@@ -626,6 +628,20 @@ gbm_bo_map(struct gbm_bo *bo, + flags, stride, map_data); + } + ++GBM_EXPORT void * ++gbm_bo_map_native(struct gbm_bo *bo, ++ uint32_t x, uint32_t y, ++ uint32_t width, uint32_t height, ++ uint32_t flags, uint32_t *stride, void **map_data) ++{ ++ if (!bo || width == 0 || height == 0 || !stride || !map_data) { ++ errno = EINVAL; ++ return NULL; ++ } ++ ++ return bo->gbm->v0.bo_map_native(bo, x, y, width, height, flags, stride, map_data); ++} ++ + /** + * Unmap a previously mapped region of a gbm buffer object + * +diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h + +--- a/src/gbm/main/gbm.h ++++ b/src/gbm/main/gbm.h +@@ -438,6 +438,10 @@ gbm_bo_map(struct gbm_bo *bo, + uint32_t x, uint32_t y, uint32_t width, uint32_t height, + uint32_t flags, uint32_t *stride, void **map_data); ++void * ++gbm_bo_map_native(struct gbm_bo *bo, ++ uint32_t x, uint32_t y, uint32_t width, uint32_t height, ++ uint32_t flags, uint32_t *stride, void **map_data); + + void + gbm_bo_unmap(struct gbm_bo *bo, void *map_data); + +diff --git a/src/gbm/main/gbm_backend_abi.h b/src/gbm/main/gbm_backend_abi.h + +--- a/src/gbm/main/gbm_backend_abi.h ++++ b/src/gbm/main/gbm_backend_abi.h +@@ -130,6 +130,11 @@ struct gbm_device_v0 { + uint32_t width, uint32_t height, + uint32_t flags, uint32_t *stride, + void **map_data); ++ void *(*bo_map_native)(struct gbm_bo *bo, ++ uint32_t x, uint32_t y, ++ uint32_t width, uint32_t height, ++ uint32_t flags, uint32_t *stride, ++ void **map_data); + void (*bo_unmap)(struct gbm_bo *bo, void *map_data); + int (*bo_write)(struct gbm_bo *bo, const void *buf, size_t data); + int (*bo_get_fd)(struct gbm_bo *bo); + +diff --git a/src/gbm/meson.build b/src/gbm/meson.build + +--- a/src/gbm/meson.build ++++ b/src/gbm/meson.build +@@ -26,7 +26,7 @@ if with_platform_android and get_option('platform-sdk-version') >= 30 + endif + + libgbm = shared_library( +- libgbm_name, ++ 'gbm', + files_gbm, + include_directories : incs_gbm, + c_args : [args_gbm], diff --git a/external-minigbm.patch b/external-minigbm.patch new file mode 100644 index 0000000..c92ccc0 --- /dev/null +++ b/external-minigbm.patch @@ -0,0 +1,23 @@ +diff --git a/Android.bp b/Android.bp + +--- a/Android.bp ++++ b/Android.bp +@@ -153,7 +153,7 @@ msm_cflags = [ + arcvm_cflags = ["-DVIRTIO_GPU_NEXT"] + + cc_library { +- name: "libgbm", ++ name: "libminigbm", + defaults: ["minigbm_defaults"], + host_supported: true, + +@@ -214,7 +214,7 @@ rust_bindgen { + "--allowlist-var=GBM_.*|gbm_.*$", + "--constified-enum-module=^gbm_.*$", + ], +- shared_libs: ["libgbm"], ++ shared_libs: ["libminigbm"], + host_supported: true, + vendor_available: true, + product_available: true, + diff --git a/external-minijail.patch b/external-minijail.patch new file mode 100644 index 0000000..ad9e7e7 --- /dev/null +++ b/external-minijail.patch @@ -0,0 +1,21 @@ +diff --git a/libminijail.c b/libminijail.c + +--- a/libminijail.c ++++ b/libminijail.c +@@ -2487,6 +2487,7 @@ static void set_seccomp_filter(const struct minijail *j) + /* + * Install the syscall filter. + */ ++#if 0 // kbox_hacked + if (j->flags.seccomp_filter) { + if (j->flags.seccomp_filter_tsync || + j->flags.seccomp_filter_allow_speculation) { +@@ -2508,6 +2509,7 @@ static void set_seccomp_filter(const struct minijail *j) + } + } + } ++#endif + } + + static pid_t forward_pid = -1; + diff --git a/external-selinux.patch b/external-selinux.patch new file mode 100644 index 0000000..7b4499e --- /dev/null +++ b/external-selinux.patch @@ -0,0 +1,147 @@ +diff --git a/libselinux/include/selinux/selinux.h b/libselinux/include/selinux/selinux.h + +--- a/libselinux/include/selinux/selinux.h ++++ b/libselinux/include/selinux/selinux.h +@@ -4,6 +4,13 @@ + #include + #include + ++#ifndef kbox_hack ++#define kbox_hack() if (1) return ++#endif ++#ifndef kbox_hack_p ++#define kbox_hack_p(p) if (1) return p ++#endif ++ + #ifdef __cplusplus + extern "C" { + #endif +diff --git a/libselinux/src/checkAccess.c b/libselinux/src/checkAccess.c + +--- a/libselinux/src/checkAccess.c ++++ b/libselinux/src/checkAccess.c +@@ -20,6 +20,7 @@ static void avc_init_once(void) + } + + int selinux_check_access(const char *scon, const char *tcon, const char *class, const char *perm, void *aux) { ++ kbox_hack_p(0); + int rc; + security_id_t scon_id; + security_id_t tcon_id; +diff --git a/libselinux/src/getenforce.c b/libselinux/src/getenforce.c + +--- a/libselinux/src/getenforce.c ++++ b/libselinux/src/getenforce.c +@@ -11,6 +11,7 @@ + + int security_getenforce(void) + { ++ kbox_hack_p(0); + int fd, ret, enforce = 0; + char path[PATH_MAX]; + char buf[20]; +diff --git a/libselinux/src/getfilecon.c b/libselinux/src/getfilecon.c + +--- a/libselinux/src/getfilecon.c ++++ b/libselinux/src/getfilecon.c +@@ -52,6 +52,7 @@ int getfilecon_raw(const char *path, char ** context) + + int getfilecon(const char *path, char ** context) + { ++ kbox_hack_p((*context = (char *)calloc(11, 1), memcpy(*context, "undefined", 10), 0)); + int ret; + char * rcontext = NULL; + +diff --git a/libselinux/src/getpeercon.c b/libselinux/src/getpeercon.c + +--- a/libselinux/src/getpeercon.c ++++ b/libselinux/src/getpeercon.c +@@ -46,6 +46,7 @@ int getpeercon_raw(int fd, char ** context) + + int getpeercon(int fd, char ** context) + { ++ kbox_hack_p((*context = (char *)calloc(11, 1), memcpy(*context, "undefined", 10), 0)); + int ret; + char * rcontext; + +diff --git a/libselinux/src/init.c b/libselinux/src/init.c + +--- a/libselinux/src/init.c ++++ b/libselinux/src/init.c +@@ -139,6 +139,7 @@ void fini_selinuxmnt(void) + + void set_selinuxmnt(const char *mnt) + { ++ kbox_hack(); + selinux_mnt = strdup(mnt); + } + +diff --git a/libselinux/src/label.c b/libselinux/src/label.c + +--- a/libselinux/src/label.c ++++ b/libselinux/src/label.c +@@ -303,6 +303,7 @@ bool selabel_hash_all_partial_matches(struct selabel_handle *rec, + int selabel_lookup_best_match(struct selabel_handle *rec, char **con, + const char *key, const char **aliases, int type) + { ++ kbox_hack_p((*con = (char *)calloc(11, 1), memcpy(*con, "unconfined", 10), 0)); + struct selabel_lookup_rec *lr; + + if (!rec->func_lookup_best_match) { +diff --git a/libselinux/src/lgetfilecon.c b/libselinux/src/lgetfilecon.c + +--- a/libselinux/src/lgetfilecon.c ++++ b/libselinux/src/lgetfilecon.c +@@ -52,6 +52,7 @@ int lgetfilecon_raw(const char *path, char ** context) + + int lgetfilecon(const char *path, char ** context) + { ++ kbox_hack_p((*context = (char *)calloc(11, 1), memcpy(*context, "unconfined", 10), 0)); + int ret; + char * rcontext = NULL; + +diff --git a/libselinux/src/lsetfilecon.c b/libselinux/src/lsetfilecon.c + +--- a/libselinux/src/lsetfilecon.c ++++ b/libselinux/src/lsetfilecon.c +@@ -28,6 +28,7 @@ int lsetfilecon_raw(const char *path, const char * context) + + int lsetfilecon(const char *path, const char *context) + { ++ kbox_hack_p(0); + int ret; + char * rcontext; + +diff --git a/libselinux/src/procattr.c b/libselinux/src/procattr.c + +--- a/libselinux/src/procattr.c ++++ b/libselinux/src/procattr.c +@@ -175,6 +175,7 @@ static int getprocattrcon_raw(char **context, pid_t pid, const char *attr, + static int getprocattrcon(char **context, pid_t pid, const char *attr, + const char *prev_context) + { ++ kbox_hack_p((*context = (char*)calloc(11, 1), memcpy(*context, "unconfined", 10), 0)); + int ret; + char * rcontext; + +@@ -239,6 +240,7 @@ out: + static int setprocattrcon(const char *context, const char *attr, + char **prev_context) + { ++ kbox_hack_p(0); + int ret; + char * rcontext; + +diff --git a/libselinux/src/sestatus.c b/libselinux/src/sestatus.c + +--- a/libselinux/src/sestatus.c ++++ b/libselinux/src/sestatus.c +@@ -277,6 +277,7 @@ static int fallback_cb_policyload(int policyload) + */ + int selinux_status_open(int fallback) + { ++ kbox_hack_p(0); + int fd; + char path[PATH_MAX]; + long pagesize; + -- Gitee From 089cc9dff99a474f42422114cc9f60edfd9ca057 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Jul 2025 10:25:23 +0800 Subject: [PATCH 2/4] =?UTF-8?q?Kbox=20=E8=A1=A5=E4=B8=81=20part2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks-av.patch | 97 +++++++++ frameworks-base.patch | 14 ++ frameworks-native.patch | 46 ++++ hardware-libhardware.patch | 29 +++ packages-modules-Bluetooth.patch | 41 ++++ packages-modules-Connectivity.patch | 58 +++++ system-bpf.patch | 17 ++ system-core.patch | 323 ++++++++++++++++++++++++++++ system-libbase.patch | 19 ++ system-libhwbinder.patch | 33 +++ system-libvintf.patch | 25 +++ system-netd.patch | 65 ++++++ system-vold.patch | 27 +++ 13 files changed, 794 insertions(+) create mode 100644 frameworks-av.patch create mode 100644 frameworks-base.patch create mode 100644 frameworks-native.patch create mode 100644 hardware-libhardware.patch create mode 100644 packages-modules-Bluetooth.patch create mode 100644 packages-modules-Connectivity.patch create mode 100644 system-bpf.patch create mode 100644 system-core.patch create mode 100644 system-libbase.patch create mode 100644 system-libhwbinder.patch create mode 100644 system-libvintf.patch create mode 100644 system-netd.patch create mode 100644 system-vold.patch diff --git a/frameworks-av.patch b/frameworks-av.patch new file mode 100644 index 0000000..b2886c7 --- /dev/null +++ b/frameworks-av.patch @@ -0,0 +1,97 @@ +diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp + +--- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp ++++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp +@@ -130,6 +130,7 @@ void SoftwareRenderer::resetFormatIfChanged( + // hardware has YUV12 and RGBA8888 support, so convert known formats + { + switch (mColorFormat) { ++#if 0 // kbox_hacked + case OMX_COLOR_FormatYUV420Planar: + case OMX_COLOR_FormatYUV420SemiPlanar: + case OMX_TI_COLOR_FormatYUV420PackedSemiPlanar: +@@ -139,6 +140,7 @@ void SoftwareRenderer::resetFormatIfChanged( + bufHeight = (mCropHeight + 1) & ~1; + break; + } ++#endif + case OMX_COLOR_Format24bitRGB888: + { + halFormat = HAL_PIXEL_FORMAT_RGB_888; +@@ -154,6 +156,7 @@ void SoftwareRenderer::resetFormatIfChanged( + bufHeight = (mCropHeight + 1) & ~1; + break; + } ++#if 0 // kbox_hacked + case OMX_COLOR_FormatYUV420Planar16: + { + if (((dataSpace & HAL_DATASPACE_STANDARD_MASK) == HAL_DATASPACE_STANDARD_BT2020) +@@ -170,6 +173,7 @@ void SoftwareRenderer::resetFormatIfChanged( + bufHeight = (mCropHeight + 1) & ~1; + break; + } ++#endif + default: + { + break; +diff --git a/media/libstagefright/omx/Android.bp b/media/libstagefright/omx/Android.bp + +--- a/media/libstagefright/omx/Android.bp ++++ b/media/libstagefright/omx/Android.bp +@@ -183,7 +183,6 @@ cc_defaults { + name: "libstagefright_softomx-defaults", + // TODO (b/316432618) Software OMX codecs are no longer used, disable building them till + // this code is removed completely. +- enabled: false, + vendor_available: true, + + cflags: [ +diff --git a/media/libstagefright/omx/OMXStore.cpp b/media/libstagefright/omx/OMXStore.cpp + +--- a/media/libstagefright/omx/OMXStore.cpp ++++ b/media/libstagefright/omx/OMXStore.cpp +@@ -161,7 +161,6 @@ void OMXStore::addPlugin(OMXPluginBase *plugin) { + } + } + if (skip) { +- continue; + } + } + +diff --git a/services/mediacodec/Android.bp b/services/mediacodec/Android.bp + +--- a/services/mediacodec/Android.bp ++++ b/services/mediacodec/Android.bp +@@ -95,6 +95,31 @@ cc_binary { + "android.hidl.memory@1.0", + ], + ++ runtime_libs: [ ++ "libstagefright_soft_aacdec", ++ "libstagefright_soft_aacenc", ++ "libstagefright_soft_amrdec", ++ "libstagefright_soft_amrnbenc", ++ "libstagefright_soft_amrwbenc", ++ "libstagefright_soft_avcdec", ++ "libstagefright_soft_avcenc", ++ "libstagefright_soft_flacdec", ++ "libstagefright_soft_flacenc", ++ "libstagefright_soft_g711dec", ++ "libstagefright_soft_gsmdec", ++ "libstagefright_soft_hevcdec", ++ "libstagefright_soft_mp3dec", ++ "libstagefright_soft_mpeg2dec", ++ "libstagefright_soft_mpeg4dec", ++ "libstagefright_soft_mpeg4enc", ++ "libstagefright_soft_opusdec", ++ "libstagefright_soft_rawdec", ++ "libstagefright_soft_vorbisdec", ++ "libstagefright_soft_vpxdec", ++ "libstagefright_soft_vpxenc", ++ "libstagefright_softomx_plugin", ++ ], ++ + // OMX interfaces force this to stay in 32-bit mode; + compile_multilib: "32", + + diff --git a/frameworks-base.patch b/frameworks-base.patch new file mode 100644 index 0000000..ed937d4 --- /dev/null +++ b/frameworks-base.patch @@ -0,0 +1,14 @@ +diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java + +--- a/services/core/java/com/android/server/am/ProcessList.java ++++ b/services/core/java/com/android/server/am/ProcessList.java +@@ -2588,7 +2588,7 @@ public final class ProcessList { + "Unable to create process group for " + + app.processName + " (" + startResult.pid + ")"); + } else { +- throw new AssertionError("Unable to create process group for " ++ Slog.e(ActivityManagerService.TAG, "Unable to create process group for " + + app.processName + " (" + startResult.pid + ")"); + } + } else { + diff --git a/frameworks-native.patch b/frameworks-native.patch new file mode 100644 index 0000000..d67777d --- /dev/null +++ b/frameworks-native.patch @@ -0,0 +1,46 @@ +diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp + +--- a/libs/binder/Binder.cpp ++++ b/libs/binder/Binder.cpp +@@ -522,6 +522,7 @@ void BBinder::setRequestingSid(bool requestingSid) + "setRequestingSid() should not be called after a binder object " + "is parceled/sent to another process"); + ++ requestingSid = false; // kbox_hacked + Extras* e = mExtras.load(std::memory_order_acquire); + + if (!e) { +diff --git a/libs/binder/IPCThreadState.cpp b/libs/binder/IPCThreadState.cpp + +--- a/libs/binder/IPCThreadState.cpp ++++ b/libs/binder/IPCThreadState.cpp +@@ -1441,7 +1441,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd) + clearPropagateWorkSource(); + + mCallingPid = tr.sender_pid; +- mCallingSid = reinterpret_cast(tr_secctx.secctx); ++ mCallingSid = "KBOX_HACKED"; + mCallingUid = tr.sender_euid; + mHasExplicitIdentity = false; + mLastTransactionBinderFlags = tr.flags; +diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp + +--- a/libs/binder/ProcessState.cpp ++++ b/libs/binder/ProcessState.cpp +@@ -225,12 +225,15 @@ bool ProcessState::becomeContextManager() + { + std::unique_lock _l(mLock); + ++#if 0 + flat_binder_object obj { + .flags = FLAT_BINDER_FLAG_TXN_SECURITY_CTX, + }; + + int result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR_EXT, &obj); ++#endif + ++ int result = 1; + // fallback to original method + if (result != 0) { + android_errorWriteLog(0x534e4554, "121035042"); + diff --git a/hardware-libhardware.patch b/hardware-libhardware.patch new file mode 100644 index 0000000..c1885ad --- /dev/null +++ b/hardware-libhardware.patch @@ -0,0 +1,29 @@ +diff --git a/hardware.c b/hardware.c + +--- a/hardware.c ++++ b/hardware.c +@@ -178,6 +178,24 @@ static bool __attribute__ ((unused)) path_in_path(const char *path, const char * + static int hw_module_exists(char *path, size_t path_len, const char *name, + const char *subname) + { ++if ( (strcmp(name, "audio.primary") == 0) && (strcmp(subname, "kbox") == 0)){ ++ snprintf(path, path_len, "%s/%s.%s.so", ++ HAL_LIBRARY_PATH3, name, subname); ++ if (path_in_path(path, HAL_LIBRARY_PATH3) && access(path, R_OK) == 0) ++ return 0; ++ ++ snprintf(path, path_len, "%s/%s.%s.so", ++ HAL_LIBRARY_PATH2, name, subname); ++ if (path_in_path(path, HAL_LIBRARY_PATH2) && access(path, R_OK) == 0) ++ return 0; ++ ++ #ifndef __ANDROID_VNDK__ ++ snprintf(path, path_len, "%s/%s.%s.so", ++ HAL_LIBRARY_PATH1, name, subname); ++ if (path_in_path(path, HAL_LIBRARY_PATH1) && access(path, R_OK) == 0) ++ return 0; ++ #endif ++} + #ifdef __ANDROID_APEX__ + // When used in VAPEX, it should look only into the same APEX because + // libhardware modules don't provide ABI stability. diff --git a/packages-modules-Bluetooth.patch b/packages-modules-Bluetooth.patch new file mode 100644 index 0000000..defa775 --- /dev/null +++ b/packages-modules-Bluetooth.patch @@ -0,0 +1,41 @@ +diff --git a/system/common/message_loop_thread.cc b/system/common/message_loop_thread.cc + +--- a/system/common/message_loop_thread.cc ++++ b/system/common/message_loop_thread.cc +@@ -156,7 +156,8 @@ bool MessageLoopThread::EnableRealTimeScheduling() { + log::error("thread {} is not running", *this); + return false; + } +- ++ return true; // kbox mock ++ + struct sched_param rt_params = {.sched_priority = kRealTimeFifoSchedulingPriority}; + int rc = sched_setscheduler(linux_tid_, SCHED_FIFO, &rt_params); + if (rc != 0) { +diff --git a/system/osi/src/alarm.cc b/system/osi/src/alarm.cc + +--- a/system/osi/src/alarm.cc ++++ b/system/osi/src/alarm.cc +@@ -672,7 +672,8 @@ static bool timer_create_internal(const clockid_t clock_id, timer_t* timer) { + memset(&sigevent, 0, sizeof(sigevent)); + sigevent.sigev_notify = SIGEV_THREAD; + sigevent.sigev_notify_function = (void (*)(union sigval))timer_callback; +- sigevent.sigev_notify_attributes = &thread_attr; ++ //sigevent.sigev_notify_attributes = &thread_attr; ++ sigevent.sigev_notify_attributes = nullptr; + if (timer_create(clock_id, &sigevent, timer) == -1) { + log::error("unable to create timer with clock {}: {}", clock_id, strerror(errno)); + if (clock_id == CLOCK_BOOTTIME_ALARM) { +diff --git a/system/osi/src/thread.cc b/system/osi/src/thread.cc + +--- a/system/osi/src/thread.cc ++++ b/system/osi/src/thread.cc +@@ -162,6 +162,7 @@ bool thread_set_priority(thread_t* thread, int priority) { + if (!thread) { + return false; + } ++ return true; // kbox mock + + const int rc = setpriority(PRIO_PROCESS, thread->tid, priority); + if (rc < 0) { + diff --git a/packages-modules-Connectivity.patch b/packages-modules-Connectivity.patch new file mode 100644 index 0000000..43f0270 --- /dev/null +++ b/packages-modules-Connectivity.patch @@ -0,0 +1,58 @@ +diff --git a/bpf/loader/NetBpfLoad.cpp b/bpf/loader/NetBpfLoad.cpp + +--- a/bpf/loader/NetBpfLoad.cpp ++++ b/bpf/loader/NetBpfLoad.cpp +@@ -1594,12 +1594,14 @@ static int doLoad(char** argv, char * const envp[]) { + // kernel does not have CONFIG_BPF_JIT=y) + // BPF_JIT is required by R VINTF (which means 4.14/4.19/5.4 kernels), + // but 4.14/4.19 were released with P & Q, and only 5.4 is new in R+. +- if (writeProcSysFile("/proc/sys/net/core/bpf_jit_enable", "1\n")) return 1; ++ if (writeProcSysFile("/proc/sys/net/core/bpf_jit_enable", "1\n")) ++ ALOGE("write 1 to /proc/sys/net/core/bpf_jit_enable FAILED"); + + // Enable JIT kallsyms export for privileged users only + // (Note: this (open) will fail with ENOENT 'No such file or directory' if + // kernel does not have CONFIG_HAVE_EBPF_JIT=y) +- if (writeProcSysFile("/proc/sys/net/core/bpf_jit_kallsyms", "1\n")) return 1; ++ if (writeProcSysFile("/proc/sys/net/core/bpf_jit_kallsyms", "1\n")) ++ ALOGE("write 1 to /proc/sys/net/core/bpf_jit_kallsyms FAILED"); + } + + // Create all the pin subdirectories +@@ -1624,9 +1626,11 @@ static int doLoad(char** argv, char * const envp[]) { + ALOGE("If this triggers reliably, you're probably missing kernel options or patches."); + ALOGE("If this triggers randomly, you might be hitting some memory allocation " + "problems or startup script race."); ++ #if 0 + ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---"); + sleep(20); + return 2; ++ #endif + } + } + +diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp + +--- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp ++++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp +@@ -132,6 +132,7 @@ static void verifyClatPerms() { + + #undef V2 + ++ fatal = false; + if (fatal) abort(); + } + +diff --git a/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp b/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp + +--- a/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp ++++ b/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp +@@ -141,7 +141,6 @@ static void com_android_net_module_util_BpfMap_nativeSynchronizeKernelRCU(JNIEnv + const int pfSocket = socket(AF_KEY, SOCK_RAW | SOCK_CLOEXEC, PF_KEY_V2); + + if (pfSocket < 0) { +- jniThrowErrnoException(env, "nativeSynchronizeKernelRCU:socket", errno); + return; + } + + diff --git a/system-bpf.patch b/system-bpf.patch new file mode 100644 index 0000000..1d167f9 --- /dev/null +++ b/system-bpf.patch @@ -0,0 +1,17 @@ +diff --git a/loader/Loader.cpp b/loader/Loader.cpp + +--- a/loader/Loader.cpp ++++ b/loader/Loader.cpp +@@ -1001,9 +1001,11 @@ void legacyBpfLoader() { + ALOGE("If this triggers reliably, you're probably missing kernel options or patches."); + ALOGE("If this triggers randomly, you might be hitting some memory allocation " + "problems or startup script race."); ++ #if 0 + ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---"); + sleep(20); + exit(121); ++ #endif + } + } + } + diff --git a/system-core.patch b/system-core.patch new file mode 100644 index 0000000..48b4a31 --- /dev/null +++ b/system-core.patch @@ -0,0 +1,323 @@ +diff --git a/fs_mgr/libfstab/boot_config.cpp b/fs_mgr/libfstab/boot_config.cpp + +--- a/fs_mgr/libfstab/boot_config.cpp ++++ b/fs_mgr/libfstab/boot_config.cpp +@@ -154,13 +154,15 @@ bool GetKernelCmdlineFromString(const std::string& cmdline, const std::string& k + + void ImportKernelCmdline(const std::function& fn) { + std::string cmdline; +- android::base::ReadFileToString("/proc/cmdline", &cmdline); ++ android::base::ReadFileToString("/proc/self/cmdline", &cmdline); // kbox_hacked ++ std::replace(cmdline.begin(), cmdline.end(), '\0', ' '); // kbox_hacked + ImportKernelCmdlineFromString(android::base::Trim(cmdline), fn); + } + + bool GetKernelCmdline(const std::string& key, std::string* out) { + std::string cmdline; +- android::base::ReadFileToString("/proc/cmdline", &cmdline); ++ android::base::ReadFileToString("/proc/self/cmdline", &cmdline); // kbox_hacked ++ std::replace(cmdline.begin(), cmdline.end(), '\0', ' '); // kbox_hacked + return GetKernelCmdlineFromString(android::base::Trim(cmdline), key, out); + } + +diff --git a/init/Android.bp b/init/Android.bp + +--- a/init/Android.bp ++++ b/init/Android.bp +@@ -247,6 +247,10 @@ cc_defaults { + cc_library_static { + name: "libinit", + defaults: ["libinit_defaults"], ++ cflags: [ ++ "-Wno-unused-argument", ++ "-Wno-unused-function", ++ ], + } + + cc_library_static { +diff --git a/init/devices.cpp b/init/devices.cpp + +--- a/init/devices.cpp ++++ b/init/devices.cpp +@@ -444,6 +444,15 @@ std::vector DeviceHandler::GetBlockDeviceSymlinks(const Uevent& uev + return links; + } + ++void DeviceHandler::chinit_dev(const char *path) ++{ ++ std::vector links; ++ auto[mode, uid, gid] = GetDevicePermissions(path, links); ++ // NOTICE("chinit_dev %s %d %d 0%o\n", path, uid, gid, mode); ++ chown(path, uid, gid); ++ chmod(path, mode); ++} ++ + static void RemoveDeviceMapperLinks(const std::string& devpath) { + std::vector dirs = { + "/dev/block/mapper", +@@ -473,6 +482,12 @@ static void RemoveDeviceMapperLinks(const std::string& devpath) { + + void DeviceHandler::HandleDevice(const std::string& action, const std::string& devpath, bool block, + int major, int minor, const std::vector& links) const { ++ ++ std::string temp = devpath.substr(0, 11); ++ if ((temp.compare("/dev/input/")) == 0) { ++ return; ++ } ++ + if (action == "add") { + MakeDevice(devpath, block, major, minor, links); + } +@@ -609,7 +624,14 @@ DeviceHandler::DeviceHandler(std::vector dev_permissions, + subsystems_(std::move(subsystems)), + boot_devices_(std::move(boot_devices)), + skip_restorecon_(skip_restorecon), +- sysfs_mount_point_("/sys") {} ++ sysfs_mount_point_("/sys") { ++ chinit_dev("/dev/binder"); ++ chinit_dev("/dev/hwbinder"); ++ chinit_dev("/dev/vndbinder"); ++ chinit_dev("/dev/ashmem"); ++ chinit_dev("/dev/uinput"); ++ chinit_dev("/dev/dri/renderD128"); ++} + + DeviceHandler::DeviceHandler() + : DeviceHandler(std::vector{}, std::vector{}, +diff --git a/init/devices.h b/init/devices.h + +--- a/init/devices.h ++++ b/init/devices.h +@@ -142,6 +142,7 @@ class DeviceHandler : public UeventHandler { + void MakeDevice(const std::string& path, bool block, int major, int minor, + const std::vector& links) const; + std::vector GetBlockDeviceSymlinks(const Uevent& uevent) const; ++ void chinit_dev(const char *path); + void HandleDevice(const std::string& action, const std::string& devpath, bool block, int major, + int minor, const std::vector& links) const; + void FixupSysPermissions(const std::string& upath, const std::string& subsystem) const; +diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp + +--- a/init/first_stage_init.cpp ++++ b/init/first_stage_init.cpp +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -348,10 +349,11 @@ int FirstStageMain(int argc, char** argv) { + CHECKCALL(setenv("PATH", _PATH_DEFPATH, 1)); + // Get the basic filesystem setup we need put together in the initramdisk + // on / and then we'll let the rc file figure out the rest. +- CHECKCALL(mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755")); + CHECKCALL(mkdir("/dev/pts", 0755)); + CHECKCALL(mkdir("/dev/socket", 0755)); + CHECKCALL(mkdir("/dev/dm-user", 0755)); ++ mount("/system/etc", "/etc", "none", MS_BIND, NULL); // cgroup fix ++ unshare(CLONE_NEWCGROUP); + CHECKCALL(mount("devpts", "/dev/pts", "devpts", 0, NULL)); + #define MAKE_STR(x) __STRING(x) + CHECKCALL(mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC))); +@@ -420,7 +422,6 @@ int FirstStageMain(int argc, char** argv) { + for (const auto& [error_string, error_errno] : errors) { + LOG(ERROR) << error_string << " " << strerror(error_errno); + } +- LOG(FATAL) << "Init encountered errors starting first stage, aborting"; + } + + LOG(INFO) << "init first stage started!"; +@@ -528,6 +529,7 @@ int FirstStageMain(int argc, char** argv) { + if (!fsm) { + fsm = CreateFirstStageMount(cmdline); + } ++ #if 0 + if (!fsm) { + LOG(FATAL) << "FirstStageMount not available"; + } +@@ -537,8 +539,9 @@ int FirstStageMain(int argc, char** argv) { + } + + if (!fsm->DoFirstStageMount()) { +- LOG(FATAL) << "Failed to mount required partitions early ..."; ++ LOG(ERROR) << "Failed to mount required partitions early ..."; + } ++ #endif + } + + struct stat new_root_info {}; +@@ -557,12 +560,22 @@ int FirstStageMain(int argc, char** argv) { + 1); + + const char* path = "/system/bin/init"; +- const char* args[] = {path, "selinux_setup", nullptr}; ++ std::vector args = {path, "second_stage"}; ++ std::string init_cmdline; ++ android::base::ReadFileToString("/proc/self/cmdline", &init_cmdline); ++ std::replace(init_cmdline.begin(), init_cmdline.end(), '\0', ' '); ++ auto cmd_vector = android::base::Split(android::base::Trim(init_cmdline), " "); ++ int i = 0; ++ for (const auto& entry : cmd_vector) { ++ if (i++ == 0) continue; // ignore first arg '/init' ++ args.push_back(entry.c_str()); ++ } ++ args.push_back(nullptr); + auto fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + close(fd); +- execv(path, const_cast(args)); ++ execv(path, const_cast(args.data())); + + // execv() only returns if an error happened, in which case we + // panic and never fall through this conditional. +diff --git a/init/init.cpp b/init/init.cpp + +--- a/init/init.cpp ++++ b/init/init.cpp +@@ -937,7 +937,7 @@ int SecondStageMain(int argc, char** argv) { + trigger_shutdown = [](const std::string& command) { shutdown_state.TriggerShutdown(command); }; + + SetStdioToDevNull(argv); +- InitKernelLogging(argv); ++ // InitKernelLogging(argv); + LOG(INFO) << "init second stage started!"; + + SelinuxSetupKernelLogging(); +diff --git a/init/property_service.cpp b/init/property_service.cpp + +--- a/init/property_service.cpp ++++ b/init/property_service.cpp +@@ -1351,7 +1351,7 @@ static void ExportKernelBootProps() { + { "ro.boot.mode", "ro.bootmode", "unknown", }, + { "ro.boot.baseband", "ro.baseband", "unknown", }, + { "ro.boot.bootloader", "ro.bootloader", "unknown", }, +- { "ro.boot.hardware", "ro.hardware", "unknown", }, ++ { "ro.boot.hardware", "ro.hardware", "kbox", }, + { "ro.boot.revision", "ro.revision", "0", }, + // clang-format on + }; +@@ -1393,6 +1393,8 @@ static void ProcessKernelCmdline() { + android::fs_mgr::ImportKernelCmdline([&](const std::string& key, const std::string& value) { + if (StartsWith(key, ANDROIDBOOT_PREFIX)) { + InitPropertySet("ro.boot." + key.substr(ANDROIDBOOT_PREFIX.size()), value); ++ } else if (StartsWith(key, "ro.")) { ++ InitPropertySet(key, value); + } + }); + } +diff --git a/init/selinux.cpp b/init/selinux.cpp + +--- a/init/selinux.cpp ++++ b/init/selinux.cpp +@@ -106,6 +106,7 @@ EnforcingStatus StatusFromProperty() { + } + + bool IsEnforcing() { ++ kbox_hack_p(false); + if (ALLOW_PERMISSIVE_SELINUX) { + return StatusFromProperty() == SELINUX_ENFORCING; + } +@@ -693,7 +694,7 @@ int SetupSelinux(char** argv) { + } + + boot_clock::time_point start_time = boot_clock::now(); +- ++#if 0 + SelinuxSetupKernelLogging(); + + // TODO(b/287206497): refactor into different headers to only include what we need. +@@ -721,7 +722,7 @@ int SetupSelinux(char** argv) { + if (selinux_android_restorecon("/system/bin/init", 0) == -1) { + PLOG(FATAL) << "restorecon failed of /system/bin/init failed"; + } +- ++#endif + setenv(kEnvSelinuxStartedAt, std::to_string(start_time.time_since_epoch().count()).c_str(), 1); + + const char* path = "/system/bin/init"; +diff --git a/init/service.cpp b/init/service.cpp + +--- a/init/service.cpp ++++ b/init/service.cpp +@@ -76,6 +76,7 @@ namespace android { + namespace init { + + static Result ComputeContextFromExecutable(const std::string& service_path) { ++ kbox_hack_p("KBOX_HACKED"); + std::string computed_context; + + char* raw_con = nullptr; +diff --git a/init/subcontext.cpp b/init/subcontext.cpp + +--- a/init/subcontext.cpp ++++ b/init/subcontext.cpp +@@ -346,6 +346,7 @@ Result> Subcontext::ExpandArgs(const std::vector cgroups; +diff --git a/libsysutils/src/NetlinkEvent.cpp b/libsysutils/src/NetlinkEvent.cpp + +--- a/libsysutils/src/NetlinkEvent.cpp ++++ b/libsysutils/src/NetlinkEvent.cpp +@@ -159,12 +159,14 @@ NetlinkEvent::~NetlinkEvent() { + + void NetlinkEvent::dump() { + int i; +- ++ std::string buffer ; + for (i = 0; i < NL_PARAMS_MAX; i++) { + if (!mParams[i]) + break; +- SLOGD("NL param '%s'\n", mParams[i]); ++ buffer += std::to_string(i) + ":" + mParams[i] ; + } ++ SLOGE("NL param '%s'\n",buffer.c_str()); ++ SLOGE(" 下一个 \n"); + } + + /* +diff --git a/rootdir/init.rc b/rootdir/init.rc + +--- a/rootdir/init.rc ++++ b/rootdir/init.rc +@@ -265,10 +265,10 @@ on init + mkdir /dev/binderfs + mount binder binder /dev/binderfs stats=global + chmod 0755 /dev/binderfs ++ # exec -- /vendor/bin/binder_alloc /dev/binderfs/binder-control binder hwbinder vndbinder + + # Mount fusectl +- mount fusectl none /sys/fs/fuse/connections +- ++ # mount fusectl none /sys/fs/fuse/connections + symlink /dev/binderfs/binder /dev/binder + symlink /dev/binderfs/hwbinder /dev/hwbinder + symlink /dev/binderfs/vndbinder /dev/vndbinder +@@ -588,7 +588,6 @@ on post-fs + + # Once everything is setup, no need to modify /. + # The bind+remount combination allows this to work in containers. +- mount rootfs rootfs / remount bind ro nodev + + # Mount default storage into root namespace + mount none /mnt/user/0 /storage bind rec + diff --git a/system-libbase.patch b/system-libbase.patch new file mode 100644 index 0000000..5b2a83f --- /dev/null +++ b/system-libbase.patch @@ -0,0 +1,19 @@ +diff --git a/include/android-base/macros.h b/include/android-base/macros.h + +--- a/include/android-base/macros.h ++++ b/include/android-base/macros.h +@@ -21,6 +21,13 @@ + + #include + ++#ifndef kbox_hack ++#define kbox_hack() if (true) return ++#endif ++#ifndef kbox_hack_p ++#define kbox_hack_p(p) if (true) return p ++#endif ++ + // bionic and glibc both have TEMP_FAILURE_RETRY, but eg Mac OS' libc doesn't. + #ifndef TEMP_FAILURE_RETRY + #define TEMP_FAILURE_RETRY(exp) \ + diff --git a/system-libhwbinder.patch b/system-libhwbinder.patch new file mode 100644 index 0000000..23326d3 --- /dev/null +++ b/system-libhwbinder.patch @@ -0,0 +1,33 @@ +diff --git a/Binder.cpp b/Binder.cpp + +--- a/Binder.cpp ++++ b/Binder.cpp +@@ -96,6 +96,7 @@ bool BHwBinder::isRequestingSid() { + } + + void BHwBinder::setRequestingSid(bool requestingSid) { ++ requestingSid = false; // kbox_hacked + Extras* e = mExtras.load(std::memory_order_acquire); + + if (!e) { +diff --git a/ProcessState.cpp b/ProcessState.cpp + +--- a/ProcessState.cpp ++++ b/ProcessState.cpp +@@ -127,12 +127,15 @@ void ProcessState::becomeContextManager() + { + AutoMutex _l(mLock); + ++#if 0 // kbox_hacked + flat_binder_object obj { + .flags = FLAT_BINDER_FLAG_TXN_SECURITY_CTX, + }; + + status_t result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR_EXT, &obj); ++#endif + ++ status_t result = 1; + // fallback to original method + if (result != 0) { + android_errorWriteLog(0x534e4554, "121035042"); + diff --git a/system-libvintf.patch b/system-libvintf.patch new file mode 100644 index 0000000..e2359bf --- /dev/null +++ b/system-libvintf.patch @@ -0,0 +1,25 @@ +diff --git a/KernelConfigs.cpp b/KernelConfigs.cpp + +--- a/KernelConfigs.cpp ++++ b/KernelConfigs.cpp +@@ -34,6 +34,7 @@ status_t LoadKernelConfigs(std::map* configs) { + gzFile f = gzopen("/proc/config.gz", "rb"); + if (f == NULL) { + LOG(ERROR) << "Could not open /proc/config.gz: " << errno; ++ errno = 0; // kbox_hacked + return -errno; + } + +diff --git a/VintfObject.cpp b/VintfObject.cpp + +--- a/VintfObject.cpp ++++ b/VintfObject.cpp +@@ -738,7 +738,6 @@ int32_t VintfObject::checkCompatibility(std::string* error, CheckFlags::Type fla + error->insert(0, + "Runtime info and framework compatibility matrix are incompatible: "); + } +- return INCOMPATIBLE; + } + } + + diff --git a/system-netd.patch b/system-netd.patch new file mode 100644 index 0000000..d33f1c3 --- /dev/null +++ b/system-netd.patch @@ -0,0 +1,65 @@ +diff --git a/server/BandwidthController.cpp b/server/BandwidthController.cpp + +--- a/server/BandwidthController.cpp ++++ b/server/BandwidthController.cpp +@@ -527,6 +527,7 @@ int BandwidthController::updateQuota(const std::string& quotaName, int64_t bytes + if (!isOk(file)) { + int res = errno; + ALOGE("Updating quota %s failed (%s)", quotaName.c_str(), toString(file).c_str()); ++ res = 0; // kbox_hacked + return -res; + } + // TODO: should we propagate this error? +diff --git a/server/Controllers.cpp b/server/Controllers.cpp + +--- a/server/Controllers.cpp ++++ b/server/Controllers.cpp +@@ -325,7 +325,6 @@ void Controllers::init() { + // As such simply exit netd. This may crash loop the system, but by failing + // to bootup we will trigger rollback and thus this offers us protection against + // a mainline update breaking things. +- exit(1); + } + gLog.info("Enabling bandwidth control: %" PRId64 "us", s.getTimeAndResetUs()); + +diff --git a/server/IptablesRestoreController.cpp b/server/IptablesRestoreController.cpp + +--- a/server/IptablesRestoreController.cpp ++++ b/server/IptablesRestoreController.cpp +@@ -349,6 +349,7 @@ int IptablesRestoreController::execute(const IptablesTarget target, const std::s + if (target == V6 || target == V4V6) { + res |= sendCommand(IP6TABLES_PROCESS, command, output); + } ++ res = 0; // ignore iptables error + return res; + } + +diff --git a/server/TetherController.cpp b/server/TetherController.cpp + +--- a/server/TetherController.cpp ++++ b/server/TetherController.cpp +@@ -913,9 +913,11 @@ StatusOr TetherController::getTetherStats() { + } + + if (int ret = addForwardChainStats(statsList, statsString, parsedIptablesOutput)) { ++#if 0 + return statusFromErrno(-ret, StringPrintf("failed to parse %s tether stats:\n%s", + target == V4 ? "IPv4": "IPv6", + parsedIptablesOutput.c_str())); ++#endif + } + } + +diff --git a/server/main.cpp b/server/main.cpp + +--- a/server/main.cpp ++++ b/server/main.cpp +@@ -145,7 +145,6 @@ int main() { + + if (libnetd_updatable_init(cg2_path.c_str())) { + ALOGE("libnetd_updatable_init failed"); +- exit(1); + } + gLog.info("libnetd_updatable_init success"); + + diff --git a/system-vold.patch b/system-vold.patch new file mode 100644 index 0000000..ad2a66f --- /dev/null +++ b/system-vold.patch @@ -0,0 +1,27 @@ +diff --git a/Utils.cpp b/Utils.cpp + +--- a/Utils.cpp ++++ b/Utils.cpp +@@ -246,7 +246,6 @@ int SetQuotaProjectId(const std::string& path, long projectId) { + ret = ioctl(fd, FS_IOC_FSSETXATTR, &fsx); + if (ret == -1) { + PLOG(ERROR) << "Failed to set project id on " << path; +- return ret; + } + return 0; + } +diff --git a/VolumeManager.cpp b/VolumeManager.cpp + +--- a/VolumeManager.cpp ++++ b/VolumeManager.cpp +@@ -210,7 +210,9 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) { + std::string devType(evt->findParam("DEVTYPE") ? evt->findParam("DEVTYPE") : ""); + + if (devType != "disk") return; +- ++ if(evt->findParam("MAJOR") == nullptr){ ++ return; ++ } + int major = std::stoi(evt->findParam("MAJOR")); + int minor = std::stoi(evt->findParam("MINOR")); + dev_t device = makedev(major, minor); -- Gitee From 35850c127ea7d34131d2fc36a05b12ac9ffcf768 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Jul 2025 10:46:04 +0800 Subject: [PATCH 3/4] =?UTF-8?q?part1=20=E5=88=A0=E6=8E=89part2=E7=9A=84?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks-av.patch | 97 --------- frameworks-base.patch | 14 -- frameworks-native.patch | 46 ---- hardware-libhardware.patch | 29 --- packages-modules-Bluetooth.patch | 41 ---- packages-modules-Connectivity.patch | 58 ----- system-bpf.patch | 17 -- system-core.patch | 323 ---------------------------- system-libbase.patch | 19 -- system-libhwbinder.patch | 33 --- system-libvintf.patch | 25 --- system-netd.patch | 65 ------ system-vold.patch | 27 --- 13 files changed, 794 deletions(-) delete mode 100644 frameworks-av.patch delete mode 100644 frameworks-base.patch delete mode 100644 frameworks-native.patch delete mode 100644 hardware-libhardware.patch delete mode 100644 packages-modules-Bluetooth.patch delete mode 100644 packages-modules-Connectivity.patch delete mode 100644 system-bpf.patch delete mode 100644 system-core.patch delete mode 100644 system-libbase.patch delete mode 100644 system-libhwbinder.patch delete mode 100644 system-libvintf.patch delete mode 100644 system-netd.patch delete mode 100644 system-vold.patch diff --git a/frameworks-av.patch b/frameworks-av.patch deleted file mode 100644 index b2886c7..0000000 --- a/frameworks-av.patch +++ /dev/null @@ -1,97 +0,0 @@ -diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp - ---- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp -+++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp -@@ -130,6 +130,7 @@ void SoftwareRenderer::resetFormatIfChanged( - // hardware has YUV12 and RGBA8888 support, so convert known formats - { - switch (mColorFormat) { -+#if 0 // kbox_hacked - case OMX_COLOR_FormatYUV420Planar: - case OMX_COLOR_FormatYUV420SemiPlanar: - case OMX_TI_COLOR_FormatYUV420PackedSemiPlanar: -@@ -139,6 +140,7 @@ void SoftwareRenderer::resetFormatIfChanged( - bufHeight = (mCropHeight + 1) & ~1; - break; - } -+#endif - case OMX_COLOR_Format24bitRGB888: - { - halFormat = HAL_PIXEL_FORMAT_RGB_888; -@@ -154,6 +156,7 @@ void SoftwareRenderer::resetFormatIfChanged( - bufHeight = (mCropHeight + 1) & ~1; - break; - } -+#if 0 // kbox_hacked - case OMX_COLOR_FormatYUV420Planar16: - { - if (((dataSpace & HAL_DATASPACE_STANDARD_MASK) == HAL_DATASPACE_STANDARD_BT2020) -@@ -170,6 +173,7 @@ void SoftwareRenderer::resetFormatIfChanged( - bufHeight = (mCropHeight + 1) & ~1; - break; - } -+#endif - default: - { - break; -diff --git a/media/libstagefright/omx/Android.bp b/media/libstagefright/omx/Android.bp - ---- a/media/libstagefright/omx/Android.bp -+++ b/media/libstagefright/omx/Android.bp -@@ -183,7 +183,6 @@ cc_defaults { - name: "libstagefright_softomx-defaults", - // TODO (b/316432618) Software OMX codecs are no longer used, disable building them till - // this code is removed completely. -- enabled: false, - vendor_available: true, - - cflags: [ -diff --git a/media/libstagefright/omx/OMXStore.cpp b/media/libstagefright/omx/OMXStore.cpp - ---- a/media/libstagefright/omx/OMXStore.cpp -+++ b/media/libstagefright/omx/OMXStore.cpp -@@ -161,7 +161,6 @@ void OMXStore::addPlugin(OMXPluginBase *plugin) { - } - } - if (skip) { -- continue; - } - } - -diff --git a/services/mediacodec/Android.bp b/services/mediacodec/Android.bp - ---- a/services/mediacodec/Android.bp -+++ b/services/mediacodec/Android.bp -@@ -95,6 +95,31 @@ cc_binary { - "android.hidl.memory@1.0", - ], - -+ runtime_libs: [ -+ "libstagefright_soft_aacdec", -+ "libstagefright_soft_aacenc", -+ "libstagefright_soft_amrdec", -+ "libstagefright_soft_amrnbenc", -+ "libstagefright_soft_amrwbenc", -+ "libstagefright_soft_avcdec", -+ "libstagefright_soft_avcenc", -+ "libstagefright_soft_flacdec", -+ "libstagefright_soft_flacenc", -+ "libstagefright_soft_g711dec", -+ "libstagefright_soft_gsmdec", -+ "libstagefright_soft_hevcdec", -+ "libstagefright_soft_mp3dec", -+ "libstagefright_soft_mpeg2dec", -+ "libstagefright_soft_mpeg4dec", -+ "libstagefright_soft_mpeg4enc", -+ "libstagefright_soft_opusdec", -+ "libstagefright_soft_rawdec", -+ "libstagefright_soft_vorbisdec", -+ "libstagefright_soft_vpxdec", -+ "libstagefright_soft_vpxenc", -+ "libstagefright_softomx_plugin", -+ ], -+ - // OMX interfaces force this to stay in 32-bit mode; - compile_multilib: "32", - - diff --git a/frameworks-base.patch b/frameworks-base.patch deleted file mode 100644 index ed937d4..0000000 --- a/frameworks-base.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java - ---- a/services/core/java/com/android/server/am/ProcessList.java -+++ b/services/core/java/com/android/server/am/ProcessList.java -@@ -2588,7 +2588,7 @@ public final class ProcessList { - "Unable to create process group for " - + app.processName + " (" + startResult.pid + ")"); - } else { -- throw new AssertionError("Unable to create process group for " -+ Slog.e(ActivityManagerService.TAG, "Unable to create process group for " - + app.processName + " (" + startResult.pid + ")"); - } - } else { - diff --git a/frameworks-native.patch b/frameworks-native.patch deleted file mode 100644 index d67777d..0000000 --- a/frameworks-native.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp - ---- a/libs/binder/Binder.cpp -+++ b/libs/binder/Binder.cpp -@@ -522,6 +522,7 @@ void BBinder::setRequestingSid(bool requestingSid) - "setRequestingSid() should not be called after a binder object " - "is parceled/sent to another process"); - -+ requestingSid = false; // kbox_hacked - Extras* e = mExtras.load(std::memory_order_acquire); - - if (!e) { -diff --git a/libs/binder/IPCThreadState.cpp b/libs/binder/IPCThreadState.cpp - ---- a/libs/binder/IPCThreadState.cpp -+++ b/libs/binder/IPCThreadState.cpp -@@ -1441,7 +1441,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd) - clearPropagateWorkSource(); - - mCallingPid = tr.sender_pid; -- mCallingSid = reinterpret_cast(tr_secctx.secctx); -+ mCallingSid = "KBOX_HACKED"; - mCallingUid = tr.sender_euid; - mHasExplicitIdentity = false; - mLastTransactionBinderFlags = tr.flags; -diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp - ---- a/libs/binder/ProcessState.cpp -+++ b/libs/binder/ProcessState.cpp -@@ -225,12 +225,15 @@ bool ProcessState::becomeContextManager() - { - std::unique_lock _l(mLock); - -+#if 0 - flat_binder_object obj { - .flags = FLAT_BINDER_FLAG_TXN_SECURITY_CTX, - }; - - int result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR_EXT, &obj); -+#endif - -+ int result = 1; - // fallback to original method - if (result != 0) { - android_errorWriteLog(0x534e4554, "121035042"); - diff --git a/hardware-libhardware.patch b/hardware-libhardware.patch deleted file mode 100644 index c1885ad..0000000 --- a/hardware-libhardware.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/hardware.c b/hardware.c - ---- a/hardware.c -+++ b/hardware.c -@@ -178,6 +178,24 @@ static bool __attribute__ ((unused)) path_in_path(const char *path, const char * - static int hw_module_exists(char *path, size_t path_len, const char *name, - const char *subname) - { -+if ( (strcmp(name, "audio.primary") == 0) && (strcmp(subname, "kbox") == 0)){ -+ snprintf(path, path_len, "%s/%s.%s.so", -+ HAL_LIBRARY_PATH3, name, subname); -+ if (path_in_path(path, HAL_LIBRARY_PATH3) && access(path, R_OK) == 0) -+ return 0; -+ -+ snprintf(path, path_len, "%s/%s.%s.so", -+ HAL_LIBRARY_PATH2, name, subname); -+ if (path_in_path(path, HAL_LIBRARY_PATH2) && access(path, R_OK) == 0) -+ return 0; -+ -+ #ifndef __ANDROID_VNDK__ -+ snprintf(path, path_len, "%s/%s.%s.so", -+ HAL_LIBRARY_PATH1, name, subname); -+ if (path_in_path(path, HAL_LIBRARY_PATH1) && access(path, R_OK) == 0) -+ return 0; -+ #endif -+} - #ifdef __ANDROID_APEX__ - // When used in VAPEX, it should look only into the same APEX because - // libhardware modules don't provide ABI stability. diff --git a/packages-modules-Bluetooth.patch b/packages-modules-Bluetooth.patch deleted file mode 100644 index defa775..0000000 --- a/packages-modules-Bluetooth.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff --git a/system/common/message_loop_thread.cc b/system/common/message_loop_thread.cc - ---- a/system/common/message_loop_thread.cc -+++ b/system/common/message_loop_thread.cc -@@ -156,7 +156,8 @@ bool MessageLoopThread::EnableRealTimeScheduling() { - log::error("thread {} is not running", *this); - return false; - } -- -+ return true; // kbox mock -+ - struct sched_param rt_params = {.sched_priority = kRealTimeFifoSchedulingPriority}; - int rc = sched_setscheduler(linux_tid_, SCHED_FIFO, &rt_params); - if (rc != 0) { -diff --git a/system/osi/src/alarm.cc b/system/osi/src/alarm.cc - ---- a/system/osi/src/alarm.cc -+++ b/system/osi/src/alarm.cc -@@ -672,7 +672,8 @@ static bool timer_create_internal(const clockid_t clock_id, timer_t* timer) { - memset(&sigevent, 0, sizeof(sigevent)); - sigevent.sigev_notify = SIGEV_THREAD; - sigevent.sigev_notify_function = (void (*)(union sigval))timer_callback; -- sigevent.sigev_notify_attributes = &thread_attr; -+ //sigevent.sigev_notify_attributes = &thread_attr; -+ sigevent.sigev_notify_attributes = nullptr; - if (timer_create(clock_id, &sigevent, timer) == -1) { - log::error("unable to create timer with clock {}: {}", clock_id, strerror(errno)); - if (clock_id == CLOCK_BOOTTIME_ALARM) { -diff --git a/system/osi/src/thread.cc b/system/osi/src/thread.cc - ---- a/system/osi/src/thread.cc -+++ b/system/osi/src/thread.cc -@@ -162,6 +162,7 @@ bool thread_set_priority(thread_t* thread, int priority) { - if (!thread) { - return false; - } -+ return true; // kbox mock - - const int rc = setpriority(PRIO_PROCESS, thread->tid, priority); - if (rc < 0) { - diff --git a/packages-modules-Connectivity.patch b/packages-modules-Connectivity.patch deleted file mode 100644 index 43f0270..0000000 --- a/packages-modules-Connectivity.patch +++ /dev/null @@ -1,58 +0,0 @@ -diff --git a/bpf/loader/NetBpfLoad.cpp b/bpf/loader/NetBpfLoad.cpp - ---- a/bpf/loader/NetBpfLoad.cpp -+++ b/bpf/loader/NetBpfLoad.cpp -@@ -1594,12 +1594,14 @@ static int doLoad(char** argv, char * const envp[]) { - // kernel does not have CONFIG_BPF_JIT=y) - // BPF_JIT is required by R VINTF (which means 4.14/4.19/5.4 kernels), - // but 4.14/4.19 were released with P & Q, and only 5.4 is new in R+. -- if (writeProcSysFile("/proc/sys/net/core/bpf_jit_enable", "1\n")) return 1; -+ if (writeProcSysFile("/proc/sys/net/core/bpf_jit_enable", "1\n")) -+ ALOGE("write 1 to /proc/sys/net/core/bpf_jit_enable FAILED"); - - // Enable JIT kallsyms export for privileged users only - // (Note: this (open) will fail with ENOENT 'No such file or directory' if - // kernel does not have CONFIG_HAVE_EBPF_JIT=y) -- if (writeProcSysFile("/proc/sys/net/core/bpf_jit_kallsyms", "1\n")) return 1; -+ if (writeProcSysFile("/proc/sys/net/core/bpf_jit_kallsyms", "1\n")) -+ ALOGE("write 1 to /proc/sys/net/core/bpf_jit_kallsyms FAILED"); - } - - // Create all the pin subdirectories -@@ -1624,9 +1626,11 @@ static int doLoad(char** argv, char * const envp[]) { - ALOGE("If this triggers reliably, you're probably missing kernel options or patches."); - ALOGE("If this triggers randomly, you might be hitting some memory allocation " - "problems or startup script race."); -+ #if 0 - ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---"); - sleep(20); - return 2; -+ #endif - } - } - -diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp - ---- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp -+++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp -@@ -132,6 +132,7 @@ static void verifyClatPerms() { - - #undef V2 - -+ fatal = false; - if (fatal) abort(); - } - -diff --git a/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp b/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp - ---- a/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp -+++ b/staticlibs/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp -@@ -141,7 +141,6 @@ static void com_android_net_module_util_BpfMap_nativeSynchronizeKernelRCU(JNIEnv - const int pfSocket = socket(AF_KEY, SOCK_RAW | SOCK_CLOEXEC, PF_KEY_V2); - - if (pfSocket < 0) { -- jniThrowErrnoException(env, "nativeSynchronizeKernelRCU:socket", errno); - return; - } - - diff --git a/system-bpf.patch b/system-bpf.patch deleted file mode 100644 index 1d167f9..0000000 --- a/system-bpf.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/loader/Loader.cpp b/loader/Loader.cpp - ---- a/loader/Loader.cpp -+++ b/loader/Loader.cpp -@@ -1001,9 +1001,11 @@ void legacyBpfLoader() { - ALOGE("If this triggers reliably, you're probably missing kernel options or patches."); - ALOGE("If this triggers randomly, you might be hitting some memory allocation " - "problems or startup script race."); -+ #if 0 - ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---"); - sleep(20); - exit(121); -+ #endif - } - } - } - diff --git a/system-core.patch b/system-core.patch deleted file mode 100644 index 48b4a31..0000000 --- a/system-core.patch +++ /dev/null @@ -1,323 +0,0 @@ -diff --git a/fs_mgr/libfstab/boot_config.cpp b/fs_mgr/libfstab/boot_config.cpp - ---- a/fs_mgr/libfstab/boot_config.cpp -+++ b/fs_mgr/libfstab/boot_config.cpp -@@ -154,13 +154,15 @@ bool GetKernelCmdlineFromString(const std::string& cmdline, const std::string& k - - void ImportKernelCmdline(const std::function& fn) { - std::string cmdline; -- android::base::ReadFileToString("/proc/cmdline", &cmdline); -+ android::base::ReadFileToString("/proc/self/cmdline", &cmdline); // kbox_hacked -+ std::replace(cmdline.begin(), cmdline.end(), '\0', ' '); // kbox_hacked - ImportKernelCmdlineFromString(android::base::Trim(cmdline), fn); - } - - bool GetKernelCmdline(const std::string& key, std::string* out) { - std::string cmdline; -- android::base::ReadFileToString("/proc/cmdline", &cmdline); -+ android::base::ReadFileToString("/proc/self/cmdline", &cmdline); // kbox_hacked -+ std::replace(cmdline.begin(), cmdline.end(), '\0', ' '); // kbox_hacked - return GetKernelCmdlineFromString(android::base::Trim(cmdline), key, out); - } - -diff --git a/init/Android.bp b/init/Android.bp - ---- a/init/Android.bp -+++ b/init/Android.bp -@@ -247,6 +247,10 @@ cc_defaults { - cc_library_static { - name: "libinit", - defaults: ["libinit_defaults"], -+ cflags: [ -+ "-Wno-unused-argument", -+ "-Wno-unused-function", -+ ], - } - - cc_library_static { -diff --git a/init/devices.cpp b/init/devices.cpp - ---- a/init/devices.cpp -+++ b/init/devices.cpp -@@ -444,6 +444,15 @@ std::vector DeviceHandler::GetBlockDeviceSymlinks(const Uevent& uev - return links; - } - -+void DeviceHandler::chinit_dev(const char *path) -+{ -+ std::vector links; -+ auto[mode, uid, gid] = GetDevicePermissions(path, links); -+ // NOTICE("chinit_dev %s %d %d 0%o\n", path, uid, gid, mode); -+ chown(path, uid, gid); -+ chmod(path, mode); -+} -+ - static void RemoveDeviceMapperLinks(const std::string& devpath) { - std::vector dirs = { - "/dev/block/mapper", -@@ -473,6 +482,12 @@ static void RemoveDeviceMapperLinks(const std::string& devpath) { - - void DeviceHandler::HandleDevice(const std::string& action, const std::string& devpath, bool block, - int major, int minor, const std::vector& links) const { -+ -+ std::string temp = devpath.substr(0, 11); -+ if ((temp.compare("/dev/input/")) == 0) { -+ return; -+ } -+ - if (action == "add") { - MakeDevice(devpath, block, major, minor, links); - } -@@ -609,7 +624,14 @@ DeviceHandler::DeviceHandler(std::vector dev_permissions, - subsystems_(std::move(subsystems)), - boot_devices_(std::move(boot_devices)), - skip_restorecon_(skip_restorecon), -- sysfs_mount_point_("/sys") {} -+ sysfs_mount_point_("/sys") { -+ chinit_dev("/dev/binder"); -+ chinit_dev("/dev/hwbinder"); -+ chinit_dev("/dev/vndbinder"); -+ chinit_dev("/dev/ashmem"); -+ chinit_dev("/dev/uinput"); -+ chinit_dev("/dev/dri/renderD128"); -+} - - DeviceHandler::DeviceHandler() - : DeviceHandler(std::vector{}, std::vector{}, -diff --git a/init/devices.h b/init/devices.h - ---- a/init/devices.h -+++ b/init/devices.h -@@ -142,6 +142,7 @@ class DeviceHandler : public UeventHandler { - void MakeDevice(const std::string& path, bool block, int major, int minor, - const std::vector& links) const; - std::vector GetBlockDeviceSymlinks(const Uevent& uevent) const; -+ void chinit_dev(const char *path); - void HandleDevice(const std::string& action, const std::string& devpath, bool block, int major, - int minor, const std::vector& links) const; - void FixupSysPermissions(const std::string& upath, const std::string& subsystem) const; -diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp - ---- a/init/first_stage_init.cpp -+++ b/init/first_stage_init.cpp -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -348,10 +349,11 @@ int FirstStageMain(int argc, char** argv) { - CHECKCALL(setenv("PATH", _PATH_DEFPATH, 1)); - // Get the basic filesystem setup we need put together in the initramdisk - // on / and then we'll let the rc file figure out the rest. -- CHECKCALL(mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755")); - CHECKCALL(mkdir("/dev/pts", 0755)); - CHECKCALL(mkdir("/dev/socket", 0755)); - CHECKCALL(mkdir("/dev/dm-user", 0755)); -+ mount("/system/etc", "/etc", "none", MS_BIND, NULL); // cgroup fix -+ unshare(CLONE_NEWCGROUP); - CHECKCALL(mount("devpts", "/dev/pts", "devpts", 0, NULL)); - #define MAKE_STR(x) __STRING(x) - CHECKCALL(mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC))); -@@ -420,7 +422,6 @@ int FirstStageMain(int argc, char** argv) { - for (const auto& [error_string, error_errno] : errors) { - LOG(ERROR) << error_string << " " << strerror(error_errno); - } -- LOG(FATAL) << "Init encountered errors starting first stage, aborting"; - } - - LOG(INFO) << "init first stage started!"; -@@ -528,6 +529,7 @@ int FirstStageMain(int argc, char** argv) { - if (!fsm) { - fsm = CreateFirstStageMount(cmdline); - } -+ #if 0 - if (!fsm) { - LOG(FATAL) << "FirstStageMount not available"; - } -@@ -537,8 +539,9 @@ int FirstStageMain(int argc, char** argv) { - } - - if (!fsm->DoFirstStageMount()) { -- LOG(FATAL) << "Failed to mount required partitions early ..."; -+ LOG(ERROR) << "Failed to mount required partitions early ..."; - } -+ #endif - } - - struct stat new_root_info {}; -@@ -557,12 +560,22 @@ int FirstStageMain(int argc, char** argv) { - 1); - - const char* path = "/system/bin/init"; -- const char* args[] = {path, "selinux_setup", nullptr}; -+ std::vector args = {path, "second_stage"}; -+ std::string init_cmdline; -+ android::base::ReadFileToString("/proc/self/cmdline", &init_cmdline); -+ std::replace(init_cmdline.begin(), init_cmdline.end(), '\0', ' '); -+ auto cmd_vector = android::base::Split(android::base::Trim(init_cmdline), " "); -+ int i = 0; -+ for (const auto& entry : cmd_vector) { -+ if (i++ == 0) continue; // ignore first arg '/init' -+ args.push_back(entry.c_str()); -+ } -+ args.push_back(nullptr); - auto fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC); - dup2(fd, STDOUT_FILENO); - dup2(fd, STDERR_FILENO); - close(fd); -- execv(path, const_cast(args)); -+ execv(path, const_cast(args.data())); - - // execv() only returns if an error happened, in which case we - // panic and never fall through this conditional. -diff --git a/init/init.cpp b/init/init.cpp - ---- a/init/init.cpp -+++ b/init/init.cpp -@@ -937,7 +937,7 @@ int SecondStageMain(int argc, char** argv) { - trigger_shutdown = [](const std::string& command) { shutdown_state.TriggerShutdown(command); }; - - SetStdioToDevNull(argv); -- InitKernelLogging(argv); -+ // InitKernelLogging(argv); - LOG(INFO) << "init second stage started!"; - - SelinuxSetupKernelLogging(); -diff --git a/init/property_service.cpp b/init/property_service.cpp - ---- a/init/property_service.cpp -+++ b/init/property_service.cpp -@@ -1351,7 +1351,7 @@ static void ExportKernelBootProps() { - { "ro.boot.mode", "ro.bootmode", "unknown", }, - { "ro.boot.baseband", "ro.baseband", "unknown", }, - { "ro.boot.bootloader", "ro.bootloader", "unknown", }, -- { "ro.boot.hardware", "ro.hardware", "unknown", }, -+ { "ro.boot.hardware", "ro.hardware", "kbox", }, - { "ro.boot.revision", "ro.revision", "0", }, - // clang-format on - }; -@@ -1393,6 +1393,8 @@ static void ProcessKernelCmdline() { - android::fs_mgr::ImportKernelCmdline([&](const std::string& key, const std::string& value) { - if (StartsWith(key, ANDROIDBOOT_PREFIX)) { - InitPropertySet("ro.boot." + key.substr(ANDROIDBOOT_PREFIX.size()), value); -+ } else if (StartsWith(key, "ro.")) { -+ InitPropertySet(key, value); - } - }); - } -diff --git a/init/selinux.cpp b/init/selinux.cpp - ---- a/init/selinux.cpp -+++ b/init/selinux.cpp -@@ -106,6 +106,7 @@ EnforcingStatus StatusFromProperty() { - } - - bool IsEnforcing() { -+ kbox_hack_p(false); - if (ALLOW_PERMISSIVE_SELINUX) { - return StatusFromProperty() == SELINUX_ENFORCING; - } -@@ -693,7 +694,7 @@ int SetupSelinux(char** argv) { - } - - boot_clock::time_point start_time = boot_clock::now(); -- -+#if 0 - SelinuxSetupKernelLogging(); - - // TODO(b/287206497): refactor into different headers to only include what we need. -@@ -721,7 +722,7 @@ int SetupSelinux(char** argv) { - if (selinux_android_restorecon("/system/bin/init", 0) == -1) { - PLOG(FATAL) << "restorecon failed of /system/bin/init failed"; - } -- -+#endif - setenv(kEnvSelinuxStartedAt, std::to_string(start_time.time_since_epoch().count()).c_str(), 1); - - const char* path = "/system/bin/init"; -diff --git a/init/service.cpp b/init/service.cpp - ---- a/init/service.cpp -+++ b/init/service.cpp -@@ -76,6 +76,7 @@ namespace android { - namespace init { - - static Result ComputeContextFromExecutable(const std::string& service_path) { -+ kbox_hack_p("KBOX_HACKED"); - std::string computed_context; - - char* raw_con = nullptr; -diff --git a/init/subcontext.cpp b/init/subcontext.cpp - ---- a/init/subcontext.cpp -+++ b/init/subcontext.cpp -@@ -346,6 +346,7 @@ Result> Subcontext::ExpandArgs(const std::vector cgroups; -diff --git a/libsysutils/src/NetlinkEvent.cpp b/libsysutils/src/NetlinkEvent.cpp - ---- a/libsysutils/src/NetlinkEvent.cpp -+++ b/libsysutils/src/NetlinkEvent.cpp -@@ -159,12 +159,14 @@ NetlinkEvent::~NetlinkEvent() { - - void NetlinkEvent::dump() { - int i; -- -+ std::string buffer ; - for (i = 0; i < NL_PARAMS_MAX; i++) { - if (!mParams[i]) - break; -- SLOGD("NL param '%s'\n", mParams[i]); -+ buffer += std::to_string(i) + ":" + mParams[i] ; - } -+ SLOGE("NL param '%s'\n",buffer.c_str()); -+ SLOGE(" 下一个 \n"); - } - - /* -diff --git a/rootdir/init.rc b/rootdir/init.rc - ---- a/rootdir/init.rc -+++ b/rootdir/init.rc -@@ -265,10 +265,10 @@ on init - mkdir /dev/binderfs - mount binder binder /dev/binderfs stats=global - chmod 0755 /dev/binderfs -+ # exec -- /vendor/bin/binder_alloc /dev/binderfs/binder-control binder hwbinder vndbinder - - # Mount fusectl -- mount fusectl none /sys/fs/fuse/connections -- -+ # mount fusectl none /sys/fs/fuse/connections - symlink /dev/binderfs/binder /dev/binder - symlink /dev/binderfs/hwbinder /dev/hwbinder - symlink /dev/binderfs/vndbinder /dev/vndbinder -@@ -588,7 +588,6 @@ on post-fs - - # Once everything is setup, no need to modify /. - # The bind+remount combination allows this to work in containers. -- mount rootfs rootfs / remount bind ro nodev - - # Mount default storage into root namespace - mount none /mnt/user/0 /storage bind rec - diff --git a/system-libbase.patch b/system-libbase.patch deleted file mode 100644 index 5b2a83f..0000000 --- a/system-libbase.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/include/android-base/macros.h b/include/android-base/macros.h - ---- a/include/android-base/macros.h -+++ b/include/android-base/macros.h -@@ -21,6 +21,13 @@ - - #include - -+#ifndef kbox_hack -+#define kbox_hack() if (true) return -+#endif -+#ifndef kbox_hack_p -+#define kbox_hack_p(p) if (true) return p -+#endif -+ - // bionic and glibc both have TEMP_FAILURE_RETRY, but eg Mac OS' libc doesn't. - #ifndef TEMP_FAILURE_RETRY - #define TEMP_FAILURE_RETRY(exp) \ - diff --git a/system-libhwbinder.patch b/system-libhwbinder.patch deleted file mode 100644 index 23326d3..0000000 --- a/system-libhwbinder.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/Binder.cpp b/Binder.cpp - ---- a/Binder.cpp -+++ b/Binder.cpp -@@ -96,6 +96,7 @@ bool BHwBinder::isRequestingSid() { - } - - void BHwBinder::setRequestingSid(bool requestingSid) { -+ requestingSid = false; // kbox_hacked - Extras* e = mExtras.load(std::memory_order_acquire); - - if (!e) { -diff --git a/ProcessState.cpp b/ProcessState.cpp - ---- a/ProcessState.cpp -+++ b/ProcessState.cpp -@@ -127,12 +127,15 @@ void ProcessState::becomeContextManager() - { - AutoMutex _l(mLock); - -+#if 0 // kbox_hacked - flat_binder_object obj { - .flags = FLAT_BINDER_FLAG_TXN_SECURITY_CTX, - }; - - status_t result = ioctl(mDriverFD, BINDER_SET_CONTEXT_MGR_EXT, &obj); -+#endif - -+ status_t result = 1; - // fallback to original method - if (result != 0) { - android_errorWriteLog(0x534e4554, "121035042"); - diff --git a/system-libvintf.patch b/system-libvintf.patch deleted file mode 100644 index e2359bf..0000000 --- a/system-libvintf.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/KernelConfigs.cpp b/KernelConfigs.cpp - ---- a/KernelConfigs.cpp -+++ b/KernelConfigs.cpp -@@ -34,6 +34,7 @@ status_t LoadKernelConfigs(std::map* configs) { - gzFile f = gzopen("/proc/config.gz", "rb"); - if (f == NULL) { - LOG(ERROR) << "Could not open /proc/config.gz: " << errno; -+ errno = 0; // kbox_hacked - return -errno; - } - -diff --git a/VintfObject.cpp b/VintfObject.cpp - ---- a/VintfObject.cpp -+++ b/VintfObject.cpp -@@ -738,7 +738,6 @@ int32_t VintfObject::checkCompatibility(std::string* error, CheckFlags::Type fla - error->insert(0, - "Runtime info and framework compatibility matrix are incompatible: "); - } -- return INCOMPATIBLE; - } - } - - diff --git a/system-netd.patch b/system-netd.patch deleted file mode 100644 index d33f1c3..0000000 --- a/system-netd.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff --git a/server/BandwidthController.cpp b/server/BandwidthController.cpp - ---- a/server/BandwidthController.cpp -+++ b/server/BandwidthController.cpp -@@ -527,6 +527,7 @@ int BandwidthController::updateQuota(const std::string& quotaName, int64_t bytes - if (!isOk(file)) { - int res = errno; - ALOGE("Updating quota %s failed (%s)", quotaName.c_str(), toString(file).c_str()); -+ res = 0; // kbox_hacked - return -res; - } - // TODO: should we propagate this error? -diff --git a/server/Controllers.cpp b/server/Controllers.cpp - ---- a/server/Controllers.cpp -+++ b/server/Controllers.cpp -@@ -325,7 +325,6 @@ void Controllers::init() { - // As such simply exit netd. This may crash loop the system, but by failing - // to bootup we will trigger rollback and thus this offers us protection against - // a mainline update breaking things. -- exit(1); - } - gLog.info("Enabling bandwidth control: %" PRId64 "us", s.getTimeAndResetUs()); - -diff --git a/server/IptablesRestoreController.cpp b/server/IptablesRestoreController.cpp - ---- a/server/IptablesRestoreController.cpp -+++ b/server/IptablesRestoreController.cpp -@@ -349,6 +349,7 @@ int IptablesRestoreController::execute(const IptablesTarget target, const std::s - if (target == V6 || target == V4V6) { - res |= sendCommand(IP6TABLES_PROCESS, command, output); - } -+ res = 0; // ignore iptables error - return res; - } - -diff --git a/server/TetherController.cpp b/server/TetherController.cpp - ---- a/server/TetherController.cpp -+++ b/server/TetherController.cpp -@@ -913,9 +913,11 @@ StatusOr TetherController::getTetherStats() { - } - - if (int ret = addForwardChainStats(statsList, statsString, parsedIptablesOutput)) { -+#if 0 - return statusFromErrno(-ret, StringPrintf("failed to parse %s tether stats:\n%s", - target == V4 ? "IPv4": "IPv6", - parsedIptablesOutput.c_str())); -+#endif - } - } - -diff --git a/server/main.cpp b/server/main.cpp - ---- a/server/main.cpp -+++ b/server/main.cpp -@@ -145,7 +145,6 @@ int main() { - - if (libnetd_updatable_init(cg2_path.c_str())) { - ALOGE("libnetd_updatable_init failed"); -- exit(1); - } - gLog.info("libnetd_updatable_init success"); - - diff --git a/system-vold.patch b/system-vold.patch deleted file mode 100644 index ad2a66f..0000000 --- a/system-vold.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/Utils.cpp b/Utils.cpp - ---- a/Utils.cpp -+++ b/Utils.cpp -@@ -246,7 +246,6 @@ int SetQuotaProjectId(const std::string& path, long projectId) { - ret = ioctl(fd, FS_IOC_FSSETXATTR, &fsx); - if (ret == -1) { - PLOG(ERROR) << "Failed to set project id on " << path; -- return ret; - } - return 0; - } -diff --git a/VolumeManager.cpp b/VolumeManager.cpp - ---- a/VolumeManager.cpp -+++ b/VolumeManager.cpp -@@ -210,7 +210,9 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) { - std::string devType(evt->findParam("DEVTYPE") ? evt->findParam("DEVTYPE") : ""); - - if (devType != "disk") return; -- -+ if(evt->findParam("MAJOR") == nullptr){ -+ return; -+ } - int major = std::stoi(evt->findParam("MAJOR")); - int minor = std::stoi(evt->findParam("MINOR")); - dev_t device = makedev(major, minor); -- Gitee From 231bb4bdfb0d48e65a38f2ad94b72d678d86fedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E6=B0=B8=E6=9D=B0?= <14905962+dong-yongjieee@user.noreply.gitee.com> Date: Sat, 19 Jul 2025 07:09:10 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20external?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 external/.keep diff --git a/external/.keep b/external/.keep new file mode 100644 index 0000000..e69de29 -- Gitee