Skip to content

Commit cad052e

Browse files
committed
Merge branch 'net-remove-some-skb_mac_header-assumptions'
Eric Dumazet says: ==================== net: remove some skb_mac_header assumptions Historically, we tried o maintain skb_mac_header available in most of networking paths. When reaching ndo_start_xmit() handlers, skb_mac_header() should always be skb->data. With recent additions of skb_mac_header_was_set() and DEBUG_NET_WARN_ON_ONCE() in skb_mac_header(), we can attempt to remove our reliance on skb_mac_header in TX paths. When this effort completes we will remove skb_reset_mac_header() from __dev_queue_xmit() and replace it by skb_unset_mac_header() on DEBUG_NET builds. ==================== Link: https://lore.kernel.org/r/20230321164519.1286357-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents b50fea1 + b3be948 commit cad052e

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

net/core/dev.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3735,25 +3735,25 @@ static void qdisc_pkt_len_init(struct sk_buff *skb)
37353735
* we add to pkt_len the headers size of all segments
37363736
*/
37373737
if (shinfo->gso_size && skb_transport_header_was_set(skb)) {
3738-
unsigned int hdr_len;
37393738
u16 gso_segs = shinfo->gso_segs;
3739+
unsigned int hdr_len;
37403740

37413741
/* mac layer + network layer */
3742-
hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
3742+
hdr_len = skb_transport_offset(skb);
37433743

37443744
/* + transport layer */
37453745
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
37463746
const struct tcphdr *th;
37473747
struct tcphdr _tcphdr;
37483748

3749-
th = skb_header_pointer(skb, skb_transport_offset(skb),
3749+
th = skb_header_pointer(skb, hdr_len,
37503750
sizeof(_tcphdr), &_tcphdr);
37513751
if (likely(th))
37523752
hdr_len += __tcp_hdrlen(th);
37533753
} else {
37543754
struct udphdr _udphdr;
37553755

3756-
if (skb_header_pointer(skb, skb_transport_offset(skb),
3756+
if (skb_header_pointer(skb, hdr_len,
37573757
sizeof(_udphdr), &_udphdr))
37583758
hdr_len += sizeof(struct udphdr);
37593759
}

net/sched/act_mirred.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
295295
at_nh = skb->data == skb_network_header(skb);
296296
if (at_nh != expects_nh) {
297297
mac_len = skb_at_tc_ingress(skb) ? skb->mac_len :
298-
skb_network_header(skb) - skb_mac_header(skb);
298+
skb_network_offset(skb);
299299
if (expects_nh) {
300300
/* target device/action expect data at nh */
301301
skb_pull_rcsum(skb2, mac_len);

net/sched/act_mpls.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ TC_INDIRECT_SCOPE int tcf_mpls_act(struct sk_buff *skb,
6969
skb_push_rcsum(skb, skb->mac_len);
7070
mac_len = skb->mac_len;
7171
} else {
72-
mac_len = skb_network_header(skb) - skb_mac_header(skb);
72+
mac_len = skb_network_offset(skb);
7373
}
7474

7575
ret = READ_ONCE(m->tcf_action);

net/sched/sch_cake.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,22 +1360,22 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
13601360
return cake_calc_overhead(q, len, off);
13611361

13621362
/* borrowed from qdisc_pkt_len_init() */
1363-
hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
1363+
hdr_len = skb_transport_offset(skb);
13641364

13651365
/* + transport layer */
13661366
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 |
13671367
SKB_GSO_TCPV6))) {
13681368
const struct tcphdr *th;
13691369
struct tcphdr _tcphdr;
13701370

1371-
th = skb_header_pointer(skb, skb_transport_offset(skb),
1371+
th = skb_header_pointer(skb, hdr_len,
13721372
sizeof(_tcphdr), &_tcphdr);
13731373
if (likely(th))
13741374
hdr_len += __tcp_hdrlen(th);
13751375
} else {
13761376
struct udphdr _udphdr;
13771377

1378-
if (skb_header_pointer(skb, skb_transport_offset(skb),
1378+
if (skb_header_pointer(skb, hdr_len,
13791379
sizeof(_udphdr), &_udphdr))
13801380
hdr_len += sizeof(struct udphdr);
13811381
}

0 commit comments

Comments
 (0)