Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccce03d8 authored by Jiyong Park's avatar Jiyong Park
Browse files

Make sure symlinks created by ueventd are correctly labeled

Bug: 391078491
Test: `ls -alZ /dev/block/by-name | grep "boot_[ab]"` in cuttlefish.
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 boot_a -> /dev/block/vda2
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 boot_b -> /dev/block/vda3
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 init_boot_a -> /dev/block/vda4
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 init_boot_b -> /dev/block/vda5
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 vendor_boot_a -> /dev/block/vda6
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 vendor_boot_b -> /dev/block/vda7

Previously it was
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-21 13:36 boot_a -> /dev/block/vda2
lrwxrwxrwx 1 root root u:object_r:block_device:s0             15 2025-01-21 13:36 boot_b -> /dev/block/vda3
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-21 13:36 init_boot_a -> /dev/block/vda4
lrwxrwxrwx 1 root root u:object_r:block_device:s0             15 2025-01-21 13:36 init_boot_b -> /dev/block/vda5
lrwxrwxrwx 1 root root u:object_r:boot_block_device:s0        15 2025-01-23 13:03 vendor_boot_a -> /dev/block/vda6
lrwxrwxrwx 1 root root u:object_r:block_device:s0             15 2025-01-23 13:03 vendor_boot_b -> /dev/block/vda7

Change-Id: I448514cbf44f1f86c7f3493de23ede4690c7c4ac
parent a876951f
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -599,7 +599,22 @@ void DeviceHandler::HandleDevice(const std::string& action, const std::string& d
                PLOG(ERROR) << "Failed to create directory " << Dirname(link);
            }

            if (symlink(target.c_str(), link.c_str())) {
            // Create symlink and make sure it's correctly labeled
            std::string secontext;
            // Passing 0 for mode should work.
            if (SelabelLookupFileContext(link, 0, &secontext) && !secontext.empty()) {
                setfscreatecon(secontext.c_str());
            }

            int rc = symlink(target.c_str(), link.c_str());

            if (!secontext.empty()) {
                int save_errno = errno;
                setfscreatecon(nullptr);
                errno = save_errno;
            }

            if (rc < 0) {
                if (errno != EEXIST) {
                    PLOG(ERROR) << "Failed to symlink " << devpath << " to " << link;
                } else if (std::string link_path;