diff options
| author | Cyrill Gorcunov <gorcunov@openvz.org> | 2009-10-29 02:59:18 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-10-29 03:00:06 -0700 | 
| commit | 38bfd8f5bec496e8e0db8849e01c99a33479418a (patch) | |
| tree | 1db96f539d28c5d4fb2f062b522f91f2f2212c2a /include | |
| parent | ed3f2e40f3d438f4a1ec0a898173116cb26f106a (diff) | |
| download | olio-linux-3.10-38bfd8f5bec496e8e0db8849e01c99a33479418a.tar.xz olio-linux-3.10-38bfd8f5bec496e8e0db8849e01c99a33479418a.zip  | |
net,socket: introduce DECLARE_SOCKADDR helper to catch overflow at build time
proto_ops->getname implies copying protocol specific data
into storage unit (particulary to __kernel_sockaddr_storage).
So when we implement new protocol support we should keep such
a detail in mind (which is easy to forget about).
Lets introduce DECLARE_SOCKADDR helper which check if
storage unit is not overfowed at build time.
Eventually inet_getname is switched to use DECLARE_SOCKADDR
(to show example of usage).
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/net.h | 3 | ||||
| -rw-r--r-- | include/linux/socket.h | 3 | 
2 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/net.h b/include/linux/net.h index b42bb60fe92..4da9d571b05 100644 --- a/include/linux/net.h +++ b/include/linux/net.h @@ -199,6 +199,9 @@ struct proto_ops {  				       struct pipe_inode_info *pipe, size_t len, unsigned int flags);  }; +#define DECLARE_SOCKADDR(type, dst, src)	\ +	type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; }) +  struct net_proto_family {  	int		family;  	int		(*create)(struct net *net, struct socket *sock, int protocol); diff --git a/include/linux/socket.h b/include/linux/socket.h index 59966f12990..7b3aae2052a 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -24,6 +24,9 @@ struct __kernel_sockaddr_storage {  #include <linux/types.h>		/* pid_t			*/  #include <linux/compiler.h>		/* __user			*/ +#define __sockaddr_check_size(size)	\ +	BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage))) +  #ifdef __KERNEL__  # ifdef CONFIG_PROC_FS  struct seq_file;  |