linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/6] ext4: sysfs: print ext4_super_block fields as little-endian
@ 2018-06-20 15:32 Arnd Bergmann
  2018-06-20 15:32 ` [PATCH 2/6] ext4: use 64-bit timestamps for mmp_time Arnd Bergmann
                   ` (5 more replies)
  0 siblings, 6 replies; 19+ messages in thread
From: Arnd Bergmann @ 2018-06-20 15:32 UTC (permalink / raw)
  To: Theodore Ts'o, Andreas Dilger, Jan Kara
  Cc: y2038, linux-ext4, Arnd Bergmann, stable, Tyson Nottingham,
	Riccardo Schirone, linux-kernel

While working on extended rand for last_error/first_error timestamps,
I noticed that the endianess is wrong, we access the little-endian
fields in struct ext4_super_block as native-endian when we print them.

This adds a special case in ext4_attr_show() and ext4_attr_store()
to byteswap the superblock fields if needed.

In older kernels, this code was part of super.c, it got moved to sysfs.c
in linux-4.4.

Cc: stable@vger.kernel.org
Fixes: 52c198c6820f ("ext4: add sysfs entry showing whether the fs contains errors")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 fs/ext4/sysfs.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index f34da0bb8f17..b970a200f20c 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -274,8 +274,12 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
 	case attr_pointer_ui:
 		if (!ptr)
 			return 0;
-		return snprintf(buf, PAGE_SIZE, "%u\n",
-				*((unsigned int *) ptr));
+		if (a->attr_ptr == ptr_ext4_super_block_offset)
+			return snprintf(buf, PAGE_SIZE, "%u\n",
+					le32_to_cpup(ptr));
+		else
+			return snprintf(buf, PAGE_SIZE, "%u\n",
+					*((unsigned int *) ptr));
 	case attr_pointer_atomic:
 		if (!ptr)
 			return 0;
@@ -308,7 +312,10 @@ static ssize_t ext4_attr_store(struct kobject *kobj,
 		ret = kstrtoul(skip_spaces(buf), 0, &t);
 		if (ret)
 			return ret;
-		*((unsigned int *) ptr) = t;
+		if (a->attr_ptr == ptr_ext4_super_block_offset)
+			*((__le32 *) ptr) = cpu_to_le32(t);
+		else
+			*((unsigned int *) ptr) = t;
 		return len;
 	case attr_inode_readahead:
 		return inode_readahead_blks_store(sbi, buf, len);
-- 
2.9.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2018-06-22  8:15 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-20 15:32 [PATCH 1/6] ext4: sysfs: print ext4_super_block fields as little-endian Arnd Bergmann
2018-06-20 15:32 ` [PATCH 2/6] ext4: use 64-bit timestamps for mmp_time Arnd Bergmann
2018-06-21 17:20   ` Andreas Dilger
2018-06-22  7:38   ` Jan Kara
2018-06-20 15:33 ` [PATCH 3/6] ext4: use ktime_get_real_seconds for i_dtime Arnd Bergmann
2018-06-21 17:27   ` Andreas Dilger
2018-06-21 20:07     ` Arnd Bergmann
2018-06-20 15:33 ` [PATCH 4/6] ext4: use timespec64 for all inode times Arnd Bergmann
2018-06-21 17:29   ` Andreas Dilger
2018-06-22  7:37   ` Jan Kara
2018-06-22  8:15     ` Arnd Bergmann
2018-06-20 15:33 ` [PATCH 5/6] jbd2: replace current_kernel_time64 with ktime equivalent Arnd Bergmann
2018-06-21 17:32   ` Andreas Dilger
2018-06-22  7:41   ` Jan Kara
2018-06-20 15:33 ` [PATCH 6/6] [RFC] ext4: super: extend timestamps to 40 bits Arnd Bergmann
2018-06-21 17:46   ` Andreas Dilger
2018-06-21 20:17     ` Arnd Bergmann
2018-06-21 17:49 ` [PATCH 1/6] ext4: sysfs: print ext4_super_block fields as little-endian Andreas Dilger
2018-06-21 20:07   ` Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).