fs: ext4: Change the Settings of file permissions

When a file is created in the linux and corresponding file permission
is set, if the file needs to be modified in uboot during the startup
process, the modified file permission will be reset to 755. Therefore,
when the ext4fs_write() function is called, if the file already exists,
the file permission of the new file is equal to the file permission of
the existing file.
This commit is contained in:
Jixiong Hu 2024-03-19 17:20:40 +08:00 committed by Tom Rini
parent ae8e1d5aa4
commit 278c644cfa

View File

@ -847,6 +847,7 @@ int ext4fs_write(const char *fname, const char *buffer,
{
int ret = 0;
struct ext2_inode *file_inode = NULL;
struct ext2_inode *existing_file_inode = NULL;
unsigned char *inode_buffer = NULL;
int parent_inodeno;
int inodeno;
@ -900,6 +901,15 @@ int ext4fs_write(const char *fname, const char *buffer,
/* check if the filename is already present in root */
existing_file_inodeno = ext4fs_filename_unlink(filename);
if (existing_file_inodeno != -1) {
existing_file_inode = (struct ext2_inode *)zalloc(fs->inodesz);
if (!existing_file_inode)
goto fail;
ret = ext4fs_iget(existing_file_inodeno, existing_file_inode);
if (ret) {
free(existing_file_inode);
goto fail;
}
ret = ext4fs_delete_file(existing_file_inodeno);
fs->first_pass_bbmap = 0;
fs->curr_blkno = 0;
@ -948,9 +958,15 @@ int ext4fs_write(const char *fname, const char *buffer,
sizebytes = 0;
}
} else {
file_inode->mode = cpu_to_le16(S_IFREG | S_IRWXU | S_IRGRP |
S_IROTH | S_IXGRP | S_IXOTH);
if (existing_file_inode) {
file_inode->mode = existing_file_inode->mode;
} else {
file_inode->mode = cpu_to_le16(S_IFREG | S_IRWXU | S_IRGRP |
S_IROTH | S_IXGRP | S_IXOTH);
}
}
if (existing_file_inode)
free(existing_file_inode);
/* ToDo: Update correct time */
file_inode->mtime = cpu_to_le32(timestamp);
file_inode->atime = cpu_to_le32(timestamp);