Skip to content

Commit b4772ef

Browse files
ebirgerdavem330
authored andcommitted
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: Eyal Birger <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 2472d76 commit b4772ef

File tree

9 files changed

+13
-14
lines changed

9 files changed

+13
-14
lines changed

include/net/sock.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,9 @@ static inline int sock_intr_errno(long timeo)
20782078
return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
20792079
}
20802080

2081+
#define sock_skb_cb_check_size(size) \
2082+
BUILD_BUG_ON((size) > FIELD_SIZEOF(struct sk_buff, cb))
2083+
20812084
void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
20822085
struct sk_buff *skb);
20832086
void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk,

net/bluetooth/af_bluetooth.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -711,10 +711,9 @@ EXPORT_SYMBOL_GPL(bt_debugfs);
711711

712712
static int __init bt_init(void)
713713
{
714-
struct sk_buff *skb;
715714
int err;
716715

717-
BUILD_BUG_ON(sizeof(struct bt_skb_cb) > sizeof(skb->cb));
716+
sock_skb_cb_check_size(sizeof(struct bt_skb_cb));
718717

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

net/can/bcm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ static void bcm_send_to_user(struct bcm_op *op, struct bcm_msg_head *head,
328328
* containing the interface index.
329329
*/
330330

331-
BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
331+
sock_skb_cb_check_size(sizeof(struct sockaddr_can));
332332
addr = (struct sockaddr_can *)skb->cb;
333333
memset(addr, 0, sizeof(*addr));
334334
addr->can_family = AF_CAN;

net/can/raw.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ struct raw_sock {
9595
*/
9696
static inline unsigned int *raw_flags(struct sk_buff *skb)
9797
{
98-
BUILD_BUG_ON(sizeof(skb->cb) <= (sizeof(struct sockaddr_can) +
99-
sizeof(unsigned int)));
98+
sock_skb_cb_check_size(sizeof(struct sockaddr_can) +
99+
sizeof(unsigned int));
100100

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

138-
BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
138+
sock_skb_cb_check_size(sizeof(struct sockaddr_can));
139139
addr = (struct sockaddr_can *)skb->cb;
140140
memset(addr, 0, sizeof(*addr));
141141
addr->can_family = AF_CAN;

net/ipv4/af_inet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1675,7 +1675,7 @@ static int __init inet_init(void)
16751675
struct list_head *r;
16761676
int rc = -EINVAL;
16771677

1678-
BUILD_BUG_ON(sizeof(struct inet_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb));
1678+
sock_skb_cb_check_size(sizeof(struct inet_skb_parm));
16791679

16801680
rc = proto_register(&tcp_prot, 1);
16811681
if (rc)

net/ipv4/tcp.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3005,12 +3005,11 @@ static void __init tcp_init_mem(void)
30053005

30063006
void __init tcp_init(void)
30073007
{
3008-
struct sk_buff *skb = NULL;
30093008
unsigned long limit;
30103009
int max_rshare, max_wshare, cnt;
30113010
unsigned int i;
30123011

3013-
BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
3012+
sock_skb_cb_check_size(sizeof(struct tcp_skb_cb));
30143013

30153014
percpu_counter_init(&tcp_sockets_allocated, 0, GFP_KERNEL);
30163015
percpu_counter_init(&tcp_orphan_count, 0, GFP_KERNEL);

net/ipv6/af_inet6.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,7 @@ static int __init inet6_init(void)
824824
struct list_head *r;
825825
int err = 0;
826826

827-
BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb));
827+
sock_skb_cb_check_size(sizeof(struct inet6_skb_parm));
828828

829829
/* Register the socket-side information for inet6_create. */
830830
for (r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r)

net/packet/af_packet.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1816,8 +1816,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
18161816
skb = nskb;
18171817
}
18181818

1819-
BUILD_BUG_ON(sizeof(*PACKET_SKB_CB(skb)) + MAX_ADDR_LEN - 8 >
1820-
sizeof(skb->cb));
1819+
sock_skb_cb_check_size(sizeof(*PACKET_SKB_CB(skb)) + MAX_ADDR_LEN - 8);
18211820

18221821
sll = &PACKET_SKB_CB(skb)->sa.ll;
18231822
sll->sll_hatype = dev->type;

net/sctp/protocol.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,8 +1322,7 @@ static __init int sctp_init(void)
13221322
int max_share;
13231323
int order;
13241324

1325-
BUILD_BUG_ON(sizeof(struct sctp_ulpevent) >
1326-
sizeof(((struct sk_buff *) 0)->cb));
1325+
sock_skb_cb_check_size(sizeof(struct sctp_ulpevent));
13271326

13281327
/* Allocate bind_bucket and chunk caches. */
13291328
status = -ENOBUFS;

0 commit comments

Comments
 (0)