btrfs-progs v3.14 mkfs.btrfs bug: --features long-option segfaults, -O short-option OK
diff mbox

Message ID pan.2014.04.16.07.55.00@googlemail.com
State Accepted
Delegated to: David Sterba
Headers show

Commit Message

Holger Hoffstätte April 16, 2014, 7:55 a.m. UTC
On Wed, 16 Apr 2014 07:48:53 +0000, Holger Hoffstätte wrote:

> On Wed, 16 Apr 2014 06:41:44 +0000, Duncan wrote:
> 
>> Using btrfs-progs v3.14:
>> 
>> mkfs.btrfs ... --features ...
>> 
>> segfaults.
> 
> Can reproduce (also with glibc 2.19 on Gentoo ;-) and building with debug
> found:
> 
> (gdb) bt
> #0  0x00007ffff6f3aaea in strlen () from /lib64/libc.so.6
> #1  0x00007ffff6f3a82e in strdup () from /lib64/libc.so.6
> #2  0x00000000004213e8 in main (ac=2, av=0x7fffffffe308) at mkfs.c:1312
> 
> Sure enough that line is handling 'O', where '--features' is supposed to
> be handled. No idea why -O works, but debugging shows that optarg is null
> at that point, so strdup goes poof.

Well, duh! The long_options array does not declare that --features wants
an argument, so getopt does not create one.

holger>diff -u mkfs.c\~ mkfs.c
This fixes it.

-h

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

--- mkfs.c~	2014-04-16 09:41:42.000000000 +0200
+++ mkfs.c	2014-04-16 09:51:45.408854096 +0200
@@ -350,7 +350,7 @@ 
 	{ "version", 0, NULL, 'V' },
 	{ "rootdir", 1, NULL, 'r' },
 	{ "nodiscard", 0, NULL, 'K' },
-	{ "features", 0, NULL, 'O' },
+	{ "features", 1, NULL, 'O' },
 	{ NULL, 0, NULL, 0}
 };