linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] btrfs-progs: fix segfault when listing column OTIME on big endian host
@ 2013-07-25  9:32 Eryu Guan
  2013-07-25 11:21 ` Miao Xie
  0 siblings, 1 reply; 6+ messages in thread
From: Eryu Guan @ 2013-07-25  9:32 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Eryu Guan

The second btrfs command segfaults on big endian host(ppc64)

	btrfs subvolume snapshot /mnt/btrfs /mnt/btrfs/snap
	btrfs subvolume list -s /mnt/btrfs

And ltrace shows

	localtime(0x10029c482d0)                 = 0
	strftime( <no return ...>
	--- SIGSEGV (Segmentation fault) ---

The corresponding code

btrfs-list.c:
        case BTRFS_LIST_OTIME:
                if (subv->otime)
                        strftime(tstr, 256, "%Y-%m-%d %X",
                                 localtime(&subv->otime));
                else
                        strcpy(tstr, "-");
                printf("%s", tstr);
                break;

localtime() returned NULL then strftime() got SIGSEGV.

The reason is that ri->otime.sec is stored as little endian but
assigned to 't' without conversion.

Signed-off-by: Eryu Guan <guaneryu@gmail.com>
---
 btrfs-list.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/btrfs-list.c b/btrfs-list.c
index 4fab858..ca1bae8 100644
--- a/btrfs-list.c
+++ b/btrfs-list.c
@@ -1052,7 +1052,7 @@ static int __list_subvol_search(int fd, struct root_lookup *root_lookup)
 				flags = btrfs_root_flags(ri);
 				if(sh.len >
 				   sizeof(struct btrfs_root_item_v0)) {
-					t = ri->otime.sec;
+					t = le64_to_cpu(ri->otime.sec);
 					ogen = btrfs_root_otransid(ri);
 					memcpy(uuid, ri->uuid, BTRFS_UUID_SIZE);
 					memcpy(puuid, ri->parent_uuid, BTRFS_UUID_SIZE);
-- 
1.8.3.1


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

end of thread, other threads:[~2013-08-01 21:08 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-25  9:32 [PATCH] btrfs-progs: fix segfault when listing column OTIME on big endian host Eryu Guan
2013-07-25 11:21 ` Miao Xie
2013-07-25 14:12   ` [PATCH v2] " Eryu Guan
2013-07-25 21:25     ` Zach Brown
2013-07-26  4:34       ` Eryu Guan
2013-08-01 21:08     ` David Sterba

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).