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] [day] [month] [year] [list]
Date:   Thu, 10 Dec 2020 15:18:09 -0700
From:   Andreas Dilger <adilger@...ger.ca>
To:     Harshad Shirwadkar <harshadshirwadkar@...il.com>
Cc:     linux-ext4@...r.kernel.org, tytso@....edu
Subject: Re: [PATCH v2 02/15] e2fsck: add kernel endian-ness conversion macros

On Dec 10, 2020, at 10:55 AM, harshadshirwadkar@...il.com wrote:
> 
> From: Harshad Shirwadkar <harshadshirwadkar@...il.com>
> 
> In order to make recovery.c identical with kernel, we need endianness
> conversion macros (such as cpu_to_be32 and friends) defined in
> e2fsprogs. This patch defines these macros and also fixes recovery.c
> to use these. These macros are also needed for fast commit recovery
> patches later in this series.
> 
> Signed-off-by: Harshad Shirwadkar <harshadshirwadkar@...il.com>'

Reviewed-by: Andreas Dilger <adilger@...ger.ca>

> ---
> e2fsck/recovery.c       | 42 ++++++++++-------------------------------
> lib/ext2fs/jfs_compat.h |  6 ++++++
> 2 files changed, 16 insertions(+), 32 deletions(-)
> 
> diff --git a/e2fsck/recovery.c b/e2fsck/recovery.c
> index 5df690ad..6c3b7bb4 100644
> --- a/e2fsck/recovery.c
> +++ b/e2fsck/recovery.c
> @@ -121,27 +121,6 @@ failed:
> 
> #endif /* __KERNEL__ */
> 
> -static inline __u32 get_be32(__be32 *p)
> -{
> -	unsigned char *cp = (unsigned char *) p;
> -	__u32 ret;
> -
> -	ret = *cp++;
> -	ret = (ret << 8) + *cp++;
> -	ret = (ret << 8) + *cp++;
> -	ret = (ret << 8) + *cp++;
> -	return ret;
> -}
> -
> -static inline __u16 get_be16(__be16 *p)
> -{
> -	unsigned char *cp = (unsigned char *) p;
> -	__u16 ret;
> -
> -	ret = *cp++;
> -	ret = (ret << 8) + *cp++;
> -	return ret;
> -}
> 
> /*
>  * Read a block from the journal
> @@ -232,10 +211,10 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
> 
> 		nr++;
> 		tagp += tag_bytes;
> -		if (!(get_be16(&tag->t_flags) & JBD2_FLAG_SAME_UUID))
> +		if (!(tag->t_flags & cpu_to_be16(JBD2_FLAG_SAME_UUID)))
> 			tagp += 16;
> 
> -		if (get_be16(&tag->t_flags) & JBD2_FLAG_LAST_TAG)
> +		if (tag->t_flags & cpu_to_be16(JBD2_FLAG_LAST_TAG))
> 			break;
> 	}
> 
> @@ -358,9 +337,9 @@ int jbd2_journal_skip_recovery(journal_t *journal)
> static inline unsigned long long read_tag_block(journal_t *journal,
> 						journal_block_tag_t *tag)
> {
> -	unsigned long long block = get_be32(&tag->t_blocknr);
> +	unsigned long long block = be32_to_cpu(tag->t_blocknr);
> 	if (jbd2_has_feature_64bit(journal))
> -		block |= (u64)get_be32(&tag->t_blocknr_high) << 32;
> +		block |= (u64)be32_to_cpu(tag->t_blocknr_high) << 32;
> 	return block;
> }
> 
> @@ -429,9 +408,9 @@ static int jbd2_block_tag_csum_verify(journal_t *j, journal_block_tag_t *tag,
> 	csum32 = jbd2_chksum(j, csum32, buf, j->j_blocksize);
> 
> 	if (jbd2_has_feature_csum3(j))
> -		return get_be32(&tag3->t_checksum) == csum32;
> -
> -	return get_be16(&tag->t_checksum) == (csum32 & 0xFFFF);
> +		return tag3->t_checksum == cpu_to_be32(csum32);
> +	else
> +		return tag->t_checksum == cpu_to_be16(csum32);
> }
> 
> static int do_one_pass(journal_t *journal,
> @@ -579,7 +558,7 @@ static int do_one_pass(journal_t *journal,
> 				unsigned long io_block;
> 
> 				tag = (journal_block_tag_t *) tagp;
> -				flags = get_be16(&tag->t_flags);
> +				flags = be16_to_cpu(tag->t_flags);
> 
> 				io_block = next_log_block++;
> 				wrap(journal, next_log_block);
> @@ -643,9 +622,8 @@ static int do_one_pass(journal_t *journal,
> 					memcpy(nbh->b_data, obh->b_data,
> 							journal->j_blocksize);
> 					if (flags & JBD2_FLAG_ESCAPE) {
> -						__be32 magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
> -						memcpy(nbh->b_data, &magic,
> -						       sizeof(magic));
> +						*((__be32 *)nbh->b_data) =
> +						cpu_to_be32(JBD2_MAGIC_NUMBER);
> 					}
> 
> 					BUFFER_TRACE(nbh, "marking dirty");
> diff --git a/lib/ext2fs/jfs_compat.h b/lib/ext2fs/jfs_compat.h
> index 2bda521d..63ebef99 100644
> --- a/lib/ext2fs/jfs_compat.h
> +++ b/lib/ext2fs/jfs_compat.h
> @@ -20,12 +20,18 @@
> #define REQ_OP_READ 0
> #define REQ_OP_WRITE 1
> 
> +#define cpu_to_le16(x)	ext2fs_cpu_to_le16(x)
> #define cpu_to_be16(x)	ext2fs_cpu_to_be16(x)
> +#define cpu_to_le32(x)	ext2fs_cpu_to_le32(x)
> #define cpu_to_be32(x)	ext2fs_cpu_to_be32(x)
> +#define cpu_to_le64(x)	ext2fs_cpu_to_le64(x)
> #define cpu_to_be64(x)	ext2fs_cpu_to_be64(x)
> 
> +#define le16_to_cpu(x)	ext2fs_le16_to_cpu(x)
> #define be16_to_cpu(x)	ext2fs_be16_to_cpu(x)
> +#define le32_to_cpu(x)	ext2fs_le32_to_cpu(x)
> #define be32_to_cpu(x)	ext2fs_be32_to_cpu(x)
> +#define le64_to_cpu(x)	ext2fs_le64_to_cpu(x)
> #define be64_to_cpu(x)	ext2fs_be64_to_cpu(x)
> 
> typedef unsigned int tid_t;
> --
> 2.29.2.576.ga3fc446d84-goog
> 


Cheers, Andreas






Download attachment "signature.asc" of type "application/pgp-signature" (874 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ