lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200117092527.5m4i2fvo7mge7z37@pali>
Date:   Fri, 17 Jan 2020 10:25:27 +0100
From:   Pali Rohár <pali.rohar@...il.com>
To:     Namjae Jeon <namjae.jeon@...sung.com>
Cc:     linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org,
        gregkh@...uxfoundation.org, valdis.kletnieks@...edu, hch@....de,
        sj1557.seo@...sung.com, linkinjeon@...il.com, arnd@...db.de
Subject: Re: [PATCH v10 03/14] exfat: add inode operations

On Wednesday 15 January 2020 17:24:36 Namjae Jeon wrote:
> This adds the implementation of inode operations for exfat.
> 
> Signed-off-by: Namjae Jeon <namjae.jeon@...sung.com>
> Signed-off-by: Sungjong Seo <sj1557.seo@...sung.com>
> ---
>  fs/exfat/inode.c |  667 +++++++++++++++++++++
>  fs/exfat/namei.c | 1442 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 2109 insertions(+)
>  create mode 100644 fs/exfat/inode.c
>  create mode 100644 fs/exfat/namei.c
> 
> diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c
> new file mode 100644
> index 000000000000..56cf09db1920
> --- /dev/null
> +++ b/fs/exfat/inode.c
> @@ -0,0 +1,667 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
> + */
> +
> +#include <linux/init.h>
> +#include <linux/buffer_head.h>
> +#include <linux/mpage.h>
> +#include <linux/bio.h>
> +#include <linux/blkdev.h>
> +#include <linux/time.h>
> +#include <linux/writeback.h>
> +#include <linux/uio.h>
> +#include <linux/random.h>
> +#include <linux/iversion.h>
> +
> +#include "exfat_raw.h"
> +#include "exfat_fs.h"
> +
> +static int __exfat_write_inode(struct inode *inode, int sync)
> +{
> +	int ret = -EIO;
> +	unsigned long long on_disk_size;
> +	struct exfat_dentry *ep, *ep2;
> +	struct exfat_entry_set_cache *es = NULL;
> +	struct super_block *sb = inode->i_sb;
> +	struct exfat_sb_info *sbi = EXFAT_SB(sb);
> +	struct exfat_inode_info *ei = EXFAT_I(inode);
> +	bool is_dir = (ei->type == TYPE_DIR) ? true : false;
> +
> +	if (inode->i_ino == EXFAT_ROOT_INO)
> +		return 0;
> +
> +	/*
> +	 * If the indode is already unlinked, there is no need for updating it.
> +	 */
> +	if (ei->dir.dir == DIR_DELETED)
> +		return 0;
> +
> +	if (is_dir && ei->dir.dir == sbi->root_dir && ei->entry == -1)
> +		return 0;
> +
> +	exfat_set_vol_flags(sb, VOL_DIRTY);
> +
> +	/* get the directory entry of given file or directory */
> +	es = exfat_get_dentry_set(sb, &(ei->dir), ei->entry, ES_ALL_ENTRIES,
> +		&ep);
> +	if (!es)
> +		return -EIO;
> +	ep2 = ep + 1;
> +
> +	ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode));
> +
> +	/* set FILE_INFO structure using the acquired struct exfat_dentry */
> +	exfat_set_entry_time(sbi, &inode->i_ctime,
> +			&ep->dentry.file.create_time,
> +			&ep->dentry.file.create_date,
> +			&ep->dentry.file.create_tz);

And here is missing updating of create_time_ms entry too.

> +	exfat_set_entry_time(sbi, &inode->i_mtime,
> +			&ep->dentry.file.modify_time,
> +			&ep->dentry.file.modify_date,
> +			&ep->dentry.file.modify_tz);

And here modify_time_ms too.

> +	exfat_set_entry_time(sbi, &inode->i_atime,
> +			&ep->dentry.file.access_time,
> +			&ep->dentry.file.access_date,
> +			&ep->dentry.file.access_tz);
> +
> +	/* File size should be zero if there is no cluster allocated */
> +	on_disk_size = i_size_read(inode);
> +
> +	if (ei->start_clu == EXFAT_EOF_CLUSTER)
> +		on_disk_size = 0;
> +
> +	ep2->dentry.stream.valid_size = cpu_to_le64(on_disk_size);
> +	ep2->dentry.stream.size = ep2->dentry.stream.valid_size;
> +
> +	ret = exfat_update_dir_chksum_with_entry_set(sb, es, sync);
> +	kfree(es);
> +	return ret;
> +}

-- 
Pali Rohár
pali.rohar@...il.com

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ