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

Commit b4772ef8 authored by Eyal Birger's avatar Eyal Birger Committed by David S. Miller
Browse files

net: use common macro for assering skb->cb[] available size in protocol families



As part of an effort to move skb->dropcount to skb->cb[] use a common
macro in protocol families using skb->cb[] for ancillary data to
validate available room in skb->cb[].

Signed-off-by: default avatarEyal Birger <eyal.birger@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2472d761
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2078,6 +2078,9 @@ static inline int sock_intr_errno(long timeo)
	return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
}

#define sock_skb_cb_check_size(size) \
	BUILD_BUG_ON((size) > FIELD_SIZEOF(struct sk_buff, cb))

void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
			   struct sk_buff *skb);
void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk,
+1 −2
Original line number Diff line number Diff line
@@ -711,10 +711,9 @@ EXPORT_SYMBOL_GPL(bt_debugfs);

static int __init bt_init(void)
{
	struct sk_buff *skb;
	int err;

	BUILD_BUG_ON(sizeof(struct bt_skb_cb) > sizeof(skb->cb));
	sock_skb_cb_check_size(sizeof(struct bt_skb_cb));

	BT_INFO("Core ver %s", VERSION);

+1 −1
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ static void bcm_send_to_user(struct bcm_op *op, struct bcm_msg_head *head,
	 *  containing the interface index.
	 */

	BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
	sock_skb_cb_check_size(sizeof(struct sockaddr_can));
	addr = (struct sockaddr_can *)skb->cb;
	memset(addr, 0, sizeof(*addr));
	addr->can_family  = AF_CAN;
+3 −3
Original line number Diff line number Diff line
@@ -95,8 +95,8 @@ struct raw_sock {
 */
static inline unsigned int *raw_flags(struct sk_buff *skb)
{
	BUILD_BUG_ON(sizeof(skb->cb) <= (sizeof(struct sockaddr_can) +
					 sizeof(unsigned int)));
	sock_skb_cb_check_size(sizeof(struct sockaddr_can) +
			       sizeof(unsigned int));

	/* return pointer after struct sockaddr_can */
	return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
@@ -135,7 +135,7 @@ static void raw_rcv(struct sk_buff *oskb, void *data)
	 *  containing the interface index.
	 */

	BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
	sock_skb_cb_check_size(sizeof(struct sockaddr_can));
	addr = (struct sockaddr_can *)skb->cb;
	memset(addr, 0, sizeof(*addr));
	addr->can_family  = AF_CAN;
+1 −1
Original line number Diff line number Diff line
@@ -1675,7 +1675,7 @@ static int __init inet_init(void)
	struct list_head *r;
	int rc = -EINVAL;

	BUILD_BUG_ON(sizeof(struct inet_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb));
	sock_skb_cb_check_size(sizeof(struct inet_skb_parm));

	rc = proto_register(&tcp_prot, 1);
	if (rc)
Loading