devices: --devices/--specials/-D/--copy-devices/--write-devices
CI / lint (pull_request) Failing after 56s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / lint (pull_request) Failing after 56s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
Recreate char/block nodes via mknodat (privilege-gated, EPERM->warn+skip) and FIFOs via mkfifoat; new STATUS_SPECIAL frame + validated rdev; sockets skipped; -copy-devices copies st_size; -write-devices O_NOFOLLOW+O_NONBLOCK warn+skip. preserve_specials/copy_devices/write_devices cross the wire. PROTOCOL_VERSION 2.12.0->2.13.0. Review fixes: -m source-removal keeps recreated specials, FIFO ENXIO skip, rdev bounds at chunk_deserialize, STATUS_ERROR on receive branch, scanner_prepare_special dedup.
This commit is contained in:
@@ -25,6 +25,26 @@ static void test_file_create() {
|
||||
file_destroy(f);
|
||||
}
|
||||
|
||||
/* rdev/type validation shared by the wire path and the secure recreation site:
|
||||
* a legal char/block major/minor pair is accepted, out-of-range / negative
|
||||
* values and non-device entries carrying an rdev are rejected. */
|
||||
static void test_file_special_rdev_valid() {
|
||||
mode_t fake_char = S_IFCHR | 0600;
|
||||
mode_t fake_blk = S_IFBLK | 0600;
|
||||
mode_t fake_fifo = S_IFIFO | 0600;
|
||||
/* char/block devices: accept a legal pair, reject negative / oversized. */
|
||||
EXPECT_TRUE(file_special_rdev_valid(1, 3, fake_char));
|
||||
EXPECT_TRUE(file_special_rdev_valid(0xffff, 0x00ffffff, fake_blk));
|
||||
EXPECT_FALSE(file_special_rdev_valid(-1, 3, fake_char));
|
||||
EXPECT_FALSE(file_special_rdev_valid(1, -1, fake_char));
|
||||
EXPECT_FALSE(file_special_rdev_valid(0x10000, 3, fake_char));
|
||||
EXPECT_FALSE(file_special_rdev_valid(1, 0x1000000, fake_char));
|
||||
/* FIFOs/sockets must carry an empty rdev. */
|
||||
EXPECT_TRUE(file_special_rdev_valid(0, 0, fake_fifo));
|
||||
EXPECT_FALSE(file_special_rdev_valid(1, 0, fake_fifo));
|
||||
EXPECT_FALSE(file_special_rdev_valid(0, 0, (mode_t)(S_IFREG | 0600)));
|
||||
}
|
||||
|
||||
static void test_file_destroy_null() {
|
||||
file_destroy(NULL);
|
||||
}
|
||||
@@ -960,6 +980,7 @@ static void test_dir_entry_save_to_disk() {
|
||||
|
||||
void test_file() {
|
||||
test_file_create();
|
||||
test_file_special_rdev_valid();
|
||||
test_file_destroy_null();
|
||||
test_file_destroy_normal();
|
||||
test_file_load_data();
|
||||
|
||||
Reference in New Issue
Block a user