From 558df52e6e9712c51e5cb4b135bac059d6fa3dbd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 25 Jun 2014 10:11:56 +0200 Subject: [PATCH] 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 Signed-off-by: Thomas Haller --- lib/attr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/attr.c b/lib/attr.c index d3de399..d1f0268 100644 --- a/lib/attr.c +++ b/lib/attr.c @@ -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; }