From c31ef089dd71b2b2b43f4341835d6acfff3da5b7 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Mon, 6 Feb 2012 15:35:14 -0500 Subject: [PATCH] --- yaml --- r: 290019 b: refs/heads/master c: 59d74026fa4b5df72a268f1e9578af500154ad07 h: refs/heads/master i: 290017: 4285cbeb59983499d6aaa3e104d752143e7aab46 290015: ddb5f1d962fc1740001b2de65a8c76545ce6e35b v: v3 --- [refs] | 2 +- trunk/include/net/sch_generic.h | 9 ++++++++- trunk/net/sched/sch_choke.c | 3 +-- trunk/net/sched/sch_netem.c | 3 +-- trunk/net/sched/sch_sfb.c | 3 +-- trunk/net/sched/sch_sfq.c | 5 ++--- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 6b6503a0d688..69f2a57bdc12 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8926574c4d0055ca4c4a02d1f6b2c249d01a0621 +refs/heads/master: 59d74026fa4b5df72a268f1e9578af500154ad07 diff --git a/trunk/include/net/sch_generic.h b/trunk/include/net/sch_generic.h index f6bb08b73ca4..55ce96b53b09 100644 --- a/trunk/include/net/sch_generic.h +++ b/trunk/include/net/sch_generic.h @@ -220,9 +220,16 @@ struct tcf_proto { struct qdisc_skb_cb { unsigned int pkt_len; - long data[]; + unsigned char data[24]; }; +static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz) +{ + struct qdisc_skb_cb *qcb; + BUILD_BUG_ON(sizeof(skb->cb) < sizeof(unsigned int) + sz); + BUILD_BUG_ON(sizeof(qcb->data) < sz); +} + static inline int qdisc_qlen(const struct Qdisc *q) { return q->q.qlen; diff --git a/trunk/net/sched/sch_choke.c b/trunk/net/sched/sch_choke.c index e465064d39a3..7e267d7b9c75 100644 --- a/trunk/net/sched/sch_choke.c +++ b/trunk/net/sched/sch_choke.c @@ -148,8 +148,7 @@ struct choke_skb_cb { static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb) { - BUILD_BUG_ON(sizeof(skb->cb) < - sizeof(struct qdisc_skb_cb) + sizeof(struct choke_skb_cb)); + qdisc_cb_private_validate(skb, sizeof(struct choke_skb_cb)); return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data; } diff --git a/trunk/net/sched/sch_netem.c b/trunk/net/sched/sch_netem.c index 2776012132ea..e83d61ca78ca 100644 --- a/trunk/net/sched/sch_netem.c +++ b/trunk/net/sched/sch_netem.c @@ -130,8 +130,7 @@ struct netem_skb_cb { static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb) { - BUILD_BUG_ON(sizeof(skb->cb) < - sizeof(struct qdisc_skb_cb) + sizeof(struct netem_skb_cb)); + qdisc_cb_private_validate(skb, sizeof(struct netem_skb_cb)); return (struct netem_skb_cb *)qdisc_skb_cb(skb)->data; } diff --git a/trunk/net/sched/sch_sfb.c b/trunk/net/sched/sch_sfb.c index 96e42cae4c7a..d7eea99333e9 100644 --- a/trunk/net/sched/sch_sfb.c +++ b/trunk/net/sched/sch_sfb.c @@ -94,8 +94,7 @@ struct sfb_skb_cb { static inline struct sfb_skb_cb *sfb_skb_cb(const struct sk_buff *skb) { - BUILD_BUG_ON(sizeof(skb->cb) < - sizeof(struct qdisc_skb_cb) + sizeof(struct sfb_skb_cb)); + qdisc_cb_private_validate(skb, sizeof(struct sfb_skb_cb)); return (struct sfb_skb_cb *)qdisc_skb_cb(skb)->data; } diff --git a/trunk/net/sched/sch_sfq.c b/trunk/net/sched/sch_sfq.c index 67494aef9acf..60d47180f043 100644 --- a/trunk/net/sched/sch_sfq.c +++ b/trunk/net/sched/sch_sfq.c @@ -166,9 +166,8 @@ struct sfq_skb_cb { static inline struct sfq_skb_cb *sfq_skb_cb(const struct sk_buff *skb) { - BUILD_BUG_ON(sizeof(skb->cb) < - sizeof(struct qdisc_skb_cb) + sizeof(struct sfq_skb_cb)); - return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data; + qdisc_cb_private_validate(skb, sizeof(struct sfq_skb_cb)); + return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data; } static unsigned int sfq_hash(const struct sfq_sched_data *q,