public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] infiniband: avoid overflow warning
@ 2017-07-31  6:50 Arnd Bergmann
  2017-07-31  7:08 ` Moni Shoua
  2017-08-18 16:40 ` Doug Ledford
  0 siblings, 2 replies; 15+ messages in thread
From: Arnd Bergmann @ 2017-07-31  6:50 UTC (permalink / raw)
  To: Doug Ledford, Sean Hefty, Hal Rosenstock
  Cc: Arnd Bergmann, Daniel Micay, Kees Cook, Moni Shoua,
	Kalderon, Michal, Ariel Elior, David S. Miller, Bart Van Assche,
	Parav Pandit, Noa Osherovich, linux-rdma, linux-kernel

A sockaddr_in structure on the stack getting passed into rdma_ip2gid
triggers this warning, since we memcpy into a larger sockaddr_in6
structure:

In function 'memcpy',
    inlined from 'rdma_ip2gid' at include/rdma/ib_addr.h:175:3,
    inlined from 'addr_event.isra.4.constprop' at drivers/infiniband/core/roce_gid_mgmt.c:693:2,
    inlined from 'inetaddr_event' at drivers/infiniband/core/roce_gid_mgmt.c:716:9:
include/linux/string.h:305:4: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter

The warning seems appropriate here, but the code is also clearly
correct, so we really just want to shut up this instance of the
output.

The best way I found so far is to avoid the memcpy() call and instead
replace it with a struct assignment.

Fixes: 6974f0c4555e ("include/linux/string.h: add the option of fortified string.h functions")
Cc: Daniel Micay <danielmicay@gmail.com>
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/rdma/ib_addr.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h
index 7aca12188ef3..ec5008cf5d51 100644
--- a/include/rdma/ib_addr.h
+++ b/include/rdma/ib_addr.h
@@ -172,7 +172,8 @@ static inline int rdma_ip2gid(struct sockaddr *addr, union ib_gid *gid)
 				       (struct in6_addr *)gid);
 		break;
 	case AF_INET6:
-		memcpy(gid->raw, &((struct sockaddr_in6 *)addr)->sin6_addr, 16);
+		*(struct in6_addr *)&gid->raw =
+			((struct sockaddr_in6 *)addr)->sin6_addr;
 		break;
 	default:
 		return -EINVAL;
-- 
2.9.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2017-08-18 16:40 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-31  6:50 [PATCH] infiniband: avoid overflow warning Arnd Bergmann
2017-07-31  7:08 ` Moni Shoua
2017-07-31  7:30   ` Arnd Bergmann
2017-07-31 15:32     ` Bart Van Assche
2017-07-31 16:04       ` Arnd Bergmann
2017-07-31 16:17         ` Bart Van Assche
2017-07-31 19:19           ` Arnd Bergmann
2017-07-31 19:35             ` Daniel Micay
2017-07-31 20:58     ` Kees Cook
2017-07-31 21:10       ` Arnd Bergmann
2017-07-31 21:18         ` Kees Cook
2017-07-31 21:37           ` Daniel Micay
2017-07-31 21:52           ` Arnd Bergmann
2017-07-31 22:06             ` Kees Cook
2017-08-18 16:40 ` Doug Ledford

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox