attr: nla_get_u64() should return 0 if the attribute does not fully contain 64 bit

Manually "inline" nla_memcpy() to nla_get_u64() and change the behavior
to return always zero (0) if the attribute does not contain at least
sizeof(uint64_t) bytes. Considering endianness, reading a truncated integer
does not seem to be useful and should result in a defined behavior
instead.

Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
Thomas Haller 2014-06-25 10:11:56 +02:00
parent 940e5d5446
commit 558df52e6e

View File

@ -650,7 +650,8 @@ uint64_t nla_get_u64(struct nlattr *nla)
{
uint64_t tmp = 0;
nla_memcpy(&tmp, nla, sizeof(tmp));
if (nla && nla_len(nla) >= sizeof(tmp))
memcpy(&tmp, nla_data(nla), sizeof(tmp));
return tmp;
}