Loading cmds/dumpstate/utils.c +1 −1 Original line number Diff line number Diff line Loading @@ -495,7 +495,7 @@ const char *dump_traces() { if (!mkdir(anr_traces_dir, 0775)) { chown(anr_traces_dir, AID_SYSTEM, AID_SYSTEM); chmod(anr_traces_dir, 0775); if (selinux_android_restorecon(anr_traces_dir) == -1) { if (selinux_android_restorecon(anr_traces_dir, 0) == -1) { fprintf(stderr, "restorecon failed for %s: %s\n", anr_traces_dir, strerror(errno)); } } else if (errno != EEXIST) { Loading cmds/installd/commands.c +32 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ int install(const char *pkgname, uid_t uid, gid_t gid, const char *seinfo) return -1; } if (selinux_android_setfilecon2(pkgdir, pkgname, seinfo, uid) < 0) { if (selinux_android_setfilecon(pkgdir, pkgname, seinfo, uid) < 0) { ALOGE("cannot setfilecon dir '%s': %s\n", pkgdir, strerror(errno)); unlink(libsymlink); unlink(pkgdir); Loading Loading @@ -185,7 +185,7 @@ int delete_user_data(const char *pkgname, userid_t userid) return delete_dir_contents(pkgdir, 0, "lib"); } int make_user_data(const char *pkgname, uid_t uid, userid_t userid) int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* seinfo) { char pkgdir[PKG_PATH_MAX]; char applibdir[PKG_PATH_MAX]; Loading Loading @@ -246,7 +246,7 @@ int make_user_data(const char *pkgname, uid_t uid, userid_t userid) return -1; } if (selinux_android_setfilecon(pkgdir, pkgname, uid) < 0) { if (selinux_android_setfilecon(pkgdir, pkgname, seinfo, uid) < 0) { ALOGE("cannot setfilecon dir '%s': %s\n", pkgdir, strerror(errno)); unlink(libsymlink); unlink(pkgdir); Loading Loading @@ -1113,3 +1113,32 @@ out: return rc; } int restorecon_data() { char *data_dir = build_string2(android_data_dir.path, PRIMARY_USER_PREFIX); char *user_dir = build_string2(android_data_dir.path, SECONDARY_USER_PREFIX); unsigned int flags = SELINUX_ANDROID_RESTORECON_RECURSE | SELINUX_ANDROID_RESTORECON_DATADATA; int ret = 0; if (!data_dir || !user_dir) { return -1; } if (selinux_android_restorecon(data_dir, flags) < 0) { ALOGE("restorecon failed for %s: %s\n", data_dir, strerror(errno)); ret |= -1; } if (selinux_android_restorecon(user_dir, flags) < 0) { ALOGE("restorecon failed for %s: %s\n", user_dir, strerror(errno)); ret |= -1; } free(data_dir); free(user_dir); return ret; } cmds/installd/installd.c +14 −2 Original line number Diff line number Diff line Loading @@ -103,7 +103,8 @@ static int do_rm_user_data(char **arg, char reply[REPLY_MAX]) static int do_mk_user_data(char **arg, char reply[REPLY_MAX]) { return make_user_data(arg[0], atoi(arg[1]), atoi(arg[2])); /* pkgname, uid, userid */ return make_user_data(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3]); /* pkgname, uid, userid, seinfo */ } static int do_rm_user(char **arg, char reply[REPLY_MAX]) Loading @@ -121,6 +122,12 @@ static int do_linklib(char **arg, char reply[REPLY_MAX]) return linklib(arg[0], arg[1], atoi(arg[2])); } static int do_restorecon_data(char **arg __attribute__((unused)), char reply[REPLY_MAX] __attribute__((unused))) { return restorecon_data(); } struct cmdinfo { const char *name; unsigned numargs; Loading @@ -142,8 +149,9 @@ struct cmdinfo cmds[] = { { "rmuserdata", 2, do_rm_user_data }, { "movefiles", 0, do_movefiles }, { "linklib", 3, do_linklib }, { "mkuserdata", 3, do_mk_user_data }, { "mkuserdata", 4, do_mk_user_data }, { "rmuser", 1, do_rm_user }, { "restorecondata", 0, do_restorecon_data }, }; char write_error = 0; Loading Loading @@ -440,6 +448,10 @@ int initialize_directories() { goto fail; } if (selinux_android_restorecon(android_media_dir.path, 0)) { goto fail; } // /data/media/0 char owner_media_dir[PATH_MAX]; snprintf(owner_media_dir, PATH_MAX, "%s0", android_media_dir.path); Loading cmds/installd/installd.h +2 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ int uninstall(const char *pkgname, userid_t userid); int renamepkg(const char *oldpkgname, const char *newpkgname); int fix_uid(const char *pkgname, uid_t uid, gid_t gid); int delete_user_data(const char *pkgname, userid_t userid); int make_user_data(const char *pkgname, uid_t uid, userid_t userid); int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* seinfo); int delete_user(userid_t userid); int delete_cache(const char *pkgname, userid_t userid); int move_dex(const char *src, const char *dst); Loading @@ -221,3 +221,4 @@ int free_cache(int64_t free_size); int dexopt(const char *apk_path, uid_t uid, int is_public); int movefiles(); int linklib(const char* target, const char* source, int userId); int restorecon_data(); services/surfaceflinger/DisplayHardware/HWComposer.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -192,7 +192,8 @@ HWComposer::HWComposer( mCBContext(new cb_context), mEventHandler(handler), mDebugForceFakeVSync(false), mSwapRectOn(false) mSwapRectOn(false), mVDSEnabled(false) { for (size_t i =0 ; i<MAX_HWC_DISPLAYS ; i++) { mLists[i] = 0; Loading Loading @@ -310,6 +311,15 @@ HWComposer::HWComposer( } } // read system property for VDS solution // This property is expected to be setup once during bootup if( (property_get("persist.hwc.enable_vds", value, NULL) > 0) && ((!strncmp(value, "1", strlen("1"))) || !strncasecmp(value, "true", strlen("true")))) { //HAL virtual display is using VDS based implementation mVDSEnabled = true; } if (needVSyncThread) { // we don't have VSYNC support, we need to fake it mVSyncThread = new VSyncThread(*this); Loading Loading
cmds/dumpstate/utils.c +1 −1 Original line number Diff line number Diff line Loading @@ -495,7 +495,7 @@ const char *dump_traces() { if (!mkdir(anr_traces_dir, 0775)) { chown(anr_traces_dir, AID_SYSTEM, AID_SYSTEM); chmod(anr_traces_dir, 0775); if (selinux_android_restorecon(anr_traces_dir) == -1) { if (selinux_android_restorecon(anr_traces_dir, 0) == -1) { fprintf(stderr, "restorecon failed for %s: %s\n", anr_traces_dir, strerror(errno)); } } else if (errno != EEXIST) { Loading
cmds/installd/commands.c +32 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ int install(const char *pkgname, uid_t uid, gid_t gid, const char *seinfo) return -1; } if (selinux_android_setfilecon2(pkgdir, pkgname, seinfo, uid) < 0) { if (selinux_android_setfilecon(pkgdir, pkgname, seinfo, uid) < 0) { ALOGE("cannot setfilecon dir '%s': %s\n", pkgdir, strerror(errno)); unlink(libsymlink); unlink(pkgdir); Loading Loading @@ -185,7 +185,7 @@ int delete_user_data(const char *pkgname, userid_t userid) return delete_dir_contents(pkgdir, 0, "lib"); } int make_user_data(const char *pkgname, uid_t uid, userid_t userid) int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* seinfo) { char pkgdir[PKG_PATH_MAX]; char applibdir[PKG_PATH_MAX]; Loading Loading @@ -246,7 +246,7 @@ int make_user_data(const char *pkgname, uid_t uid, userid_t userid) return -1; } if (selinux_android_setfilecon(pkgdir, pkgname, uid) < 0) { if (selinux_android_setfilecon(pkgdir, pkgname, seinfo, uid) < 0) { ALOGE("cannot setfilecon dir '%s': %s\n", pkgdir, strerror(errno)); unlink(libsymlink); unlink(pkgdir); Loading Loading @@ -1113,3 +1113,32 @@ out: return rc; } int restorecon_data() { char *data_dir = build_string2(android_data_dir.path, PRIMARY_USER_PREFIX); char *user_dir = build_string2(android_data_dir.path, SECONDARY_USER_PREFIX); unsigned int flags = SELINUX_ANDROID_RESTORECON_RECURSE | SELINUX_ANDROID_RESTORECON_DATADATA; int ret = 0; if (!data_dir || !user_dir) { return -1; } if (selinux_android_restorecon(data_dir, flags) < 0) { ALOGE("restorecon failed for %s: %s\n", data_dir, strerror(errno)); ret |= -1; } if (selinux_android_restorecon(user_dir, flags) < 0) { ALOGE("restorecon failed for %s: %s\n", user_dir, strerror(errno)); ret |= -1; } free(data_dir); free(user_dir); return ret; }
cmds/installd/installd.c +14 −2 Original line number Diff line number Diff line Loading @@ -103,7 +103,8 @@ static int do_rm_user_data(char **arg, char reply[REPLY_MAX]) static int do_mk_user_data(char **arg, char reply[REPLY_MAX]) { return make_user_data(arg[0], atoi(arg[1]), atoi(arg[2])); /* pkgname, uid, userid */ return make_user_data(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3]); /* pkgname, uid, userid, seinfo */ } static int do_rm_user(char **arg, char reply[REPLY_MAX]) Loading @@ -121,6 +122,12 @@ static int do_linklib(char **arg, char reply[REPLY_MAX]) return linklib(arg[0], arg[1], atoi(arg[2])); } static int do_restorecon_data(char **arg __attribute__((unused)), char reply[REPLY_MAX] __attribute__((unused))) { return restorecon_data(); } struct cmdinfo { const char *name; unsigned numargs; Loading @@ -142,8 +149,9 @@ struct cmdinfo cmds[] = { { "rmuserdata", 2, do_rm_user_data }, { "movefiles", 0, do_movefiles }, { "linklib", 3, do_linklib }, { "mkuserdata", 3, do_mk_user_data }, { "mkuserdata", 4, do_mk_user_data }, { "rmuser", 1, do_rm_user }, { "restorecondata", 0, do_restorecon_data }, }; char write_error = 0; Loading Loading @@ -440,6 +448,10 @@ int initialize_directories() { goto fail; } if (selinux_android_restorecon(android_media_dir.path, 0)) { goto fail; } // /data/media/0 char owner_media_dir[PATH_MAX]; snprintf(owner_media_dir, PATH_MAX, "%s0", android_media_dir.path); Loading
cmds/installd/installd.h +2 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ int uninstall(const char *pkgname, userid_t userid); int renamepkg(const char *oldpkgname, const char *newpkgname); int fix_uid(const char *pkgname, uid_t uid, gid_t gid); int delete_user_data(const char *pkgname, userid_t userid); int make_user_data(const char *pkgname, uid_t uid, userid_t userid); int make_user_data(const char *pkgname, uid_t uid, userid_t userid, const char* seinfo); int delete_user(userid_t userid); int delete_cache(const char *pkgname, userid_t userid); int move_dex(const char *src, const char *dst); Loading @@ -221,3 +221,4 @@ int free_cache(int64_t free_size); int dexopt(const char *apk_path, uid_t uid, int is_public); int movefiles(); int linklib(const char* target, const char* source, int userId); int restorecon_data();
services/surfaceflinger/DisplayHardware/HWComposer.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -192,7 +192,8 @@ HWComposer::HWComposer( mCBContext(new cb_context), mEventHandler(handler), mDebugForceFakeVSync(false), mSwapRectOn(false) mSwapRectOn(false), mVDSEnabled(false) { for (size_t i =0 ; i<MAX_HWC_DISPLAYS ; i++) { mLists[i] = 0; Loading Loading @@ -310,6 +311,15 @@ HWComposer::HWComposer( } } // read system property for VDS solution // This property is expected to be setup once during bootup if( (property_get("persist.hwc.enable_vds", value, NULL) > 0) && ((!strncmp(value, "1", strlen("1"))) || !strncasecmp(value, "true", strlen("true")))) { //HAL virtual display is using VDS based implementation mVDSEnabled = true; } if (needVSyncThread) { // we don't have VSYNC support, we need to fake it mVSyncThread = new VSyncThread(*this); Loading