Kernel: Read file modes from the initrd, filtering out write permissions
This commit is contained in:
parent
a2d9ada4dc
commit
e05f3f5325
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define TAR_MAGIC "ustar"
|
||||
#define TAR_BLOCKSIZE 512
|
||||
@ -33,6 +34,7 @@ namespace InitRD
|
||||
uint64_t size;
|
||||
uint64_t size_in_blocks;
|
||||
void* addr;
|
||||
mode_t mode;
|
||||
};
|
||||
|
||||
uint64_t get_total_blocks();
|
||||
|
@ -62,6 +62,13 @@ InitRD::File InitRD::get_file(TarHeader* header)
|
||||
}
|
||||
result.addr = (void*)((uint64_t)header + TAR_BLOCKSIZE);
|
||||
result.size_in_blocks = Utilities::get_blocks_from_size(TAR_BLOCKSIZE, result.size);
|
||||
result.mode = 0;
|
||||
multiplier = 1;
|
||||
for (int i = 6; i >= 0; i--)
|
||||
{
|
||||
result.mode += (mode_t)(multiplier * (header->mode[i] - 48));
|
||||
multiplier *= 8;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -345,7 +352,7 @@ static bool initrd_register_file(InitRD::File& f, uint64_t inode)
|
||||
node.read_func = initrd_read;
|
||||
node.length = f.size;
|
||||
node.type = VFS_FILE;
|
||||
node.mode = 0555;
|
||||
node.mode = f.mode & 07555; // don't allow writing
|
||||
node.uid = node.gid = 0;
|
||||
strncpy(node.name, buffer, sizeof(node.name));
|
||||
strncpy(f.name, buffer, sizeof(f.name));
|
||||
|
Loading…
Reference in New Issue
Block a user