Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9868b5d4 authored by Kurt Van Dijck's avatar Kurt Van Dijck Committed by Marc Kleine-Budde
Browse files

can: introduce CAN_REQUIRED_SIZE macro



The size of this structure will be increased with J1939 support. To stay
binary compatible, the CAN_REQUIRED_SIZE macro is introduced for
existing CAN protocols.

Signed-off-by: default avatarKurt Van Dijck <dev.kurt@vandijck-laurijssen.be>
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Acked-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 4f746fb4
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -41,6 +41,14 @@ struct can_proto {
	struct proto *prot;
};

/* required_size
 * macro to find the minimum size of a struct
 * that includes a requested member
 */
#define CAN_REQUIRED_SIZE(struct_type, member) \
	(offsetof(typeof(struct_type), member) + \
	 sizeof(((typeof(struct_type) *)(NULL))->member))

/* function prototypes for the CAN networklayer core (af_can.c) */

extern int  can_proto_register(const struct can_proto *cp);
+2 −2
Original line number Diff line number Diff line
@@ -1294,7 +1294,7 @@ static int bcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
		/* no bound device as default => check msg_name */
		DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);

		if (msg->msg_namelen < sizeof(*addr))
		if (msg->msg_namelen < CAN_REQUIRED_SIZE(*addr, can_ifindex))
			return -EINVAL;

		if (addr->can_family != AF_CAN)
@@ -1536,7 +1536,7 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
	struct net *net = sock_net(sk);
	int ret = 0;

	if (len < sizeof(*addr))
	if (len < CAN_REQUIRED_SIZE(*addr, can_ifindex))
		return -EINVAL;

	lock_sock(sk);
+2 −2
Original line number Diff line number Diff line
@@ -396,7 +396,7 @@ static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
	int err = 0;
	int notify_enetdown = 0;

	if (len < sizeof(*addr))
	if (len < CAN_REQUIRED_SIZE(*addr, can_ifindex))
		return -EINVAL;
	if (addr->can_family != AF_CAN)
		return -EINVAL;
@@ -733,7 +733,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 < sizeof(*addr))
		if (msg->msg_namelen < CAN_REQUIRED_SIZE(*addr, can_ifindex))
			return -EINVAL;

		if (addr->can_family != AF_CAN)