• Ondrej Kozina's avatar
    dm crypt: reject key strings containing whitespace chars · 027c431c
    Ondrej Kozina authored
    Unfortunately key_string may theoretically contain whitespace even after
    it's processed by dm_split_args().  The reason for this is DM core
    supports escaping of almost all chars including any whitespace.
    
    If userspace passes a key to the kernel in format ":32:logon:my_prefix:my\ key"
    dm-crypt will look up key "my_prefix:my key" in kernel keyring service.
    So far everything's fine.
    
    Unfortunately if userspace later calls DM_TABLE_STATUS ioctl, it will not
    receive back expected ":32:logon:my_prefix:my\ key" but the unescaped version
    instead.  Also userpace (most notably cryptsetup) is not ready to parse
    single target argument containing (even escaped) whitespace chars and any
    whitespace is simply taken as delimiter of another argument.
    
    This effect is mitigated by the fact libdevmapper curently performs
    double escaping of '\' char.  Any user input in format "x\ x" is
    transformed into "x\\ x" before being passed to the kernel.  Nonetheless
    dm-crypt may be used without libdevmapper.  Therefore the near-term
    solution to this is to reject any key string containing whitespace.
    Signed-off-by: default avatarOndrej Kozina <okozina@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    027c431c
dm-crypt.c 54 KB