diff options
Diffstat (limited to 'net/can/raw.c')
| -rw-r--r-- | net/can/raw.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/net/can/raw.c b/net/can/raw.c index 37b47a39a3ed..139d9471ddcf 100644 --- a/net/can/raw.c +++ b/net/can/raw.c @@ -60,6 +60,8 @@ MODULE_LICENSE("Dual BSD/GPL");  MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>");  MODULE_ALIAS("can-proto-1"); +#define RAW_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_ifindex) +  #define MASK_ALL 0  /* A raw socket has a list of can_filters attached to it, each receiving @@ -394,7 +396,7 @@ static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)  	int err = 0;  	int notify_enetdown = 0; -	if (len < CAN_REQUIRED_SIZE(*addr, can_ifindex)) +	if (len < RAW_MIN_NAMELEN)  		return -EINVAL;  	if (addr->can_family != AF_CAN)  		return -EINVAL; @@ -475,11 +477,11 @@ static int raw_getname(struct socket *sock, struct sockaddr *uaddr,  	if (peer)  		return -EOPNOTSUPP; -	memset(addr, 0, sizeof(*addr)); +	memset(addr, 0, RAW_MIN_NAMELEN);  	addr->can_family  = AF_CAN;  	addr->can_ifindex = ro->ifindex; -	return sizeof(*addr); +	return RAW_MIN_NAMELEN;  }  static int raw_setsockopt(struct socket *sock, int level, int optname, @@ -739,7 +741,7 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)  	if (msg->msg_name) {  		DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name); -		if (msg->msg_namelen < CAN_REQUIRED_SIZE(*addr, can_ifindex)) +		if (msg->msg_namelen < RAW_MIN_NAMELEN)  			return -EINVAL;  		if (addr->can_family != AF_CAN) @@ -832,8 +834,8 @@ static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,  	sock_recv_ts_and_drops(msg, sk, skb);  	if (msg->msg_name) { -		__sockaddr_check_size(sizeof(struct sockaddr_can)); -		msg->msg_namelen = sizeof(struct sockaddr_can); +		__sockaddr_check_size(RAW_MIN_NAMELEN); +		msg->msg_namelen = RAW_MIN_NAMELEN;  		memcpy(msg->msg_name, skb->cb, msg->msg_namelen);  	}  | 
