From 5b63183c901a2d8c052ac5be44486eb090165a19 Mon Sep 17 00:00:00 2001 From: Richard Weinberger Date: Thu, 18 Oct 2018 16:36:54 +0200 Subject: mkfs.ubifs: Make sure we catch nodes that should or should not have name Signed-off-by: Richard Weinberger Signed-off-by: David Oberhollenzer --- ubifs-utils/mkfs.ubifs/key.h | 10 ++++++++++ ubifs-utils/mkfs.ubifs/mkfs.ubifs.c | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/ubifs-utils/mkfs.ubifs/key.h b/ubifs-utils/mkfs.ubifs/key.h index c18e35e..2de530b 100644 --- a/ubifs-utils/mkfs.ubifs/key.h +++ b/ubifs-utils/mkfs.ubifs/key.h @@ -209,4 +209,14 @@ static inline int keys_cmp(const union ubifs_key *key1, return 0; } +/** + * key_type - get key type. + * @c: UBIFS file-system description object + * @key: key to get type of + */ +static inline int key_type(const union ubifs_key *key) +{ + return key->u32[1] >> UBIFS_S_KEY_BLOCK_BITS; +} + #endif /* !__UBIFS_KEY_H__ */ diff --git a/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c b/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c index b402945..8aba668 100644 --- a/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c +++ b/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c @@ -1161,6 +1161,14 @@ static int add_node(union ubifs_key *key, char *name, int name_len, void *node, { int err, lnum, offs; + if (key_type(key) == UBIFS_DENT_KEY || key_type(key) == UBIFS_XENT_KEY) { + if (!name) + return err_msg("Directory entry or xattr without name!"); + } else { + if (name) + return err_msg("Name given for non dir/xattr node!"); + } + prepare_node(node, len); err = reserve_space(len, &lnum, &offs); -- cgit v1.2.3