Commit beba0060 authored by Artem Bityutskiy's avatar Artem Bityutskiy

UBIFS: use snprintf instead of sprintf when printing keys

Switch to 'snprintf()' which is more secure and reliable. This is also a
preparation to the subsequent key printing fixes.
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
parent d34315da
...@@ -103,8 +103,8 @@ static const char *get_dent_type(int type) ...@@ -103,8 +103,8 @@ static const char *get_dent_type(int type)
} }
} }
static void sprintf_key(const struct ubifs_info *c, const union ubifs_key *key, static void snprintf_key(const struct ubifs_info *c, const union ubifs_key *key,
char *buffer) char *buffer, int len)
{ {
char *p = buffer; char *p = buffer;
int type = key_type(c, key); int type = key_type(c, key);
...@@ -112,44 +112,46 @@ static void sprintf_key(const struct ubifs_info *c, const union ubifs_key *key, ...@@ -112,44 +112,46 @@ static void sprintf_key(const struct ubifs_info *c, const union ubifs_key *key,
if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) { if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) {
switch (type) { switch (type) {
case UBIFS_INO_KEY: case UBIFS_INO_KEY:
sprintf(p, "(%lu, %s)", (unsigned long)key_inum(c, key), len -= snprintf(p, len, "(%lu, %s)",
(unsigned long)key_inum(c, key),
get_key_type(type)); get_key_type(type));
break; break;
case UBIFS_DENT_KEY: case UBIFS_DENT_KEY:
case UBIFS_XENT_KEY: case UBIFS_XENT_KEY:
sprintf(p, "(%lu, %s, %#08x)", len -= snprintf(p, len, "(%lu, %s, %#08x)",
(unsigned long)key_inum(c, key), (unsigned long)key_inum(c, key),
get_key_type(type), key_hash(c, key)); get_key_type(type), key_hash(c, key));
break; break;
case UBIFS_DATA_KEY: case UBIFS_DATA_KEY:
sprintf(p, "(%lu, %s, %u)", len -= snprintf(p, len, "(%lu, %s, %u)",
(unsigned long)key_inum(c, key), (unsigned long)key_inum(c, key),
get_key_type(type), key_block(c, key)); get_key_type(type), key_block(c, key));
break; break;
case UBIFS_TRUN_KEY: case UBIFS_TRUN_KEY:
sprintf(p, "(%lu, %s)", len -= snprintf(p, len, "(%lu, %s)",
(unsigned long)key_inum(c, key), (unsigned long)key_inum(c, key),
get_key_type(type)); get_key_type(type));
break; break;
default: default:
sprintf(p, "(bad key type: %#08x, %#08x)", len -= snprintf(p, len, "(bad key type: %#08x, %#08x)",
key->u32[0], key->u32[1]); key->u32[0], key->u32[1]);
} }
} else } else
sprintf(p, "bad key format %d", c->key_fmt); len -= snprintf(p, len, "bad key format %d", c->key_fmt);
ubifs_assert(len > 0);
} }
const char *dbg_key_str0(const struct ubifs_info *c, const union ubifs_key *key) const char *dbg_key_str0(const struct ubifs_info *c, const union ubifs_key *key)
{ {
/* dbg_lock must be held */ /* dbg_lock must be held */
sprintf_key(c, key, dbg_key_buf0); snprintf_key(c, key, dbg_key_buf0, sizeof(dbg_key_buf0) - 1);
return dbg_key_buf0; return dbg_key_buf0;
} }
const char *dbg_key_str1(const struct ubifs_info *c, const union ubifs_key *key) const char *dbg_key_str1(const struct ubifs_info *c, const union ubifs_key *key)
{ {
/* dbg_lock must be held */ /* dbg_lock must be held */
sprintf_key(c, key, dbg_key_buf1); snprintf_key(c, key, dbg_key_buf1, sizeof(dbg_key_buf1) - 1);
return dbg_key_buf1; return dbg_key_buf1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment