]> git.ipfire.org Git - thirdparty/util-linux.git/commit
libmount: Preserve empty string value in optstr parsing
authorFilipe Brandenburger <filbranden@google.com>
Wed, 10 Aug 2016 20:27:07 +0000 (13:27 -0700)
committerFilipe Brandenburger <filbranden@google.com>
Wed, 10 Aug 2016 20:59:52 +0000 (13:59 -0700)
commit727c689908c5e68c92aa1dd65e0d3bdb6d91c1e5
tree377e3b204c3878bfe6e1b76210a87a2ea87228e4
parent7cd6d50aa92a2e9b567675acc88f7206c84a4d5f
libmount: Preserve empty string value in optstr parsing

Recent mount (since the switch to libmount in v2.22) drops the '=' in
mount options that are set to an empty value.  For example, the command
line below will be affected:

  # mount -o rw,myopt='' -t tmpfs tmpfs /mnt/tmp

Fix that by preserving an empty string in the options passed to the
mount(2) syscall when they are present on the command line.

Add test cases to ensure empty string handling is working as expected
and in order to prevent regressions in the future.

Also tested manually by stracing mount commands (on a kernel which
accepts a special extra option, for testing purposes.)

Before this commit:

  # strace -e mount ./mount -t tmpfs -o rw,myopt='' tmpfs /mnt/tmp
  mount("tmpfs", "/mnt/tmp", "tmpfs", MS_MGC_VAL, "myarg") = -1 EINVAL (Invalid argument)

After this commit:

  # strace -e mount ./mount -t tmpfs -o rw,myopt='' tmpfs /mnt/tmp
  mount("tmpfs", "/mnt/tmp", "tmpfs", MS_MGC_VAL, "myopt=") = 0

All test cases pass, including newly added test cases.  Also checked
them with valgrind using:

  $ tests/run.sh --memcheck libmount/optstr

Fixes #332.

Signed-off-by: Filipe Brandenburger <filbranden@google.com>
libmount/src/optstr.c
tests/expected/libmount/optstr-append-empty-value [new file with mode: 0644]
tests/expected/libmount/optstr-deduplicate-empty [new file with mode: 0644]
tests/expected/libmount/optstr-prepend-empty-value [new file with mode: 0644]
tests/expected/libmount/optstr-remove-empty-value [new file with mode: 0644]
tests/expected/libmount/optstr-set-empty [new file with mode: 0644]
tests/expected/libmount/optstr-set-new-empty [new file with mode: 0644]
tests/expected/libmount/optstr-set-new-end-empty [new file with mode: 0644]
tests/ts/libmount/optstr