Commit af72868b authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller

networking: make skb_pull & friends return void pointers

It seems like a historic accident that these return unsigned char *,
and in many places that means casts are required, more often than not.

Make these functions return void * and remove all the casts across
the tree, adding a (u8 *) cast only where the unsigned char pointer
was used directly, all done with the following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = {
            skb_pull,
            __skb_pull,
            skb_pull_inline,
            __pskb_pull_tail,
            __pskb_pull,
            pskb_pull
    };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = {
            skb_pull,
            __skb_pull,
            skb_pull_inline,
            __pskb_pull_tail,
            __pskb_pull,
            pskb_pull
    };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4df864c1
...@@ -557,7 +557,7 @@ static int nokia_recv_negotiation_packet(struct hci_dev *hdev, ...@@ -557,7 +557,7 @@ static int nokia_recv_negotiation_packet(struct hci_dev *hdev,
goto finish_neg; goto finish_neg;
} }
evt = (struct hci_nokia_neg_evt *)skb_pull(skb, sizeof(*hdr)); evt = skb_pull(skb, sizeof(*hdr));
if (evt->ack != NOKIA_NEG_ACK) { if (evt->ack != NOKIA_NEG_ACK) {
dev_err(dev, "Negotiation received: wrong reply"); dev_err(dev, "Negotiation received: wrong reply");
...@@ -595,7 +595,7 @@ static int nokia_recv_alive_packet(struct hci_dev *hdev, struct sk_buff *skb) ...@@ -595,7 +595,7 @@ static int nokia_recv_alive_packet(struct hci_dev *hdev, struct sk_buff *skb)
goto finish_alive; goto finish_alive;
} }
pkt = (struct hci_nokia_alive_pkt *)skb_pull(skb, sizeof(*hdr)); pkt = skb_pull(skb, sizeof(*hdr));
if (pkt->mid != NOKIA_ALIVE_RESP) { if (pkt->mid != NOKIA_ALIVE_RESP) {
dev_err(dev, "Alive received: invalid response: 0x%02x!", dev_err(dev, "Alive received: invalid response: 0x%02x!",
......
...@@ -1509,7 +1509,7 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) ...@@ -1509,7 +1509,7 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp)
* temporarily remove part of the fake header stuck on * temporarily remove part of the fake header stuck on
* earlier. * earlier.
*/ */
*skb_pull(skb, IPPP_MAX_HEADER - 4) = 1; /* indicate outbound */ *(u8 *)skb_pull(skb, IPPP_MAX_HEADER - 4) = 1; /* indicate outbound */
{ {
__be16 *p = (__be16 *)skb->data; __be16 *p = (__be16 *)skb->data;
......
...@@ -448,7 +448,7 @@ static int ppp_rx(struct sk_buff *skb) ...@@ -448,7 +448,7 @@ static int ppp_rx(struct sk_buff *skb)
/* Check HDLC header */ /* Check HDLC header */
if (skb->len < sizeof(struct hdlc_header)) if (skb->len < sizeof(struct hdlc_header))
goto rx_error; goto rx_error;
cp = (struct cp_header*)skb_pull(skb, sizeof(struct hdlc_header)); cp = skb_pull(skb, sizeof(struct hdlc_header));
if (hdr->address != HDLC_ADDR_ALLSTATIONS || if (hdr->address != HDLC_ADDR_ALLSTATIONS ||
hdr->control != HDLC_CTRL_UI) hdr->control != HDLC_CTRL_UI)
goto rx_error; goto rx_error;
......
...@@ -311,8 +311,7 @@ void nxp_nci_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb) ...@@ -311,8 +311,7 @@ void nxp_nci_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb)
if (nxp_nci_fw_check_crc(skb) != 0x00) if (nxp_nci_fw_check_crc(skb) != 0x00)
fw_info->cmd_result = -EBADMSG; fw_info->cmd_result = -EBADMSG;
else else
fw_info->cmd_result = nxp_nci_fw_read_status( fw_info->cmd_result = nxp_nci_fw_read_status(*(u8 *)skb_pull(skb, NXP_NCI_FW_HDR_LEN));
*skb_pull(skb, NXP_NCI_FW_HDR_LEN));
kfree_skb(skb); kfree_skb(skb);
} else { } else {
fw_info->cmd_result = -EIO; fw_info->cmd_result = -EIO;
......
...@@ -640,7 +640,7 @@ static inline int fnic_import_rq_eth_pkt(struct fnic *fnic, struct sk_buff *skb) ...@@ -640,7 +640,7 @@ static inline int fnic_import_rq_eth_pkt(struct fnic *fnic, struct sk_buff *skb)
eh = (struct ethhdr *)skb->data; eh = (struct ethhdr *)skb->data;
if (eh->h_proto == htons(ETH_P_8021Q)) { if (eh->h_proto == htons(ETH_P_8021Q)) {
memmove((u8 *)eh + VLAN_HLEN, eh, ETH_ALEN * 2); memmove((u8 *)eh + VLAN_HLEN, eh, ETH_ALEN * 2);
eh = (struct ethhdr *)skb_pull(skb, VLAN_HLEN); eh = skb_pull(skb, VLAN_HLEN);
skb_reset_mac_header(skb); skb_reset_mac_header(skb);
} }
if (eh->h_proto == htons(ETH_P_FIP)) { if (eh->h_proto == htons(ETH_P_FIP)) {
......
...@@ -2117,7 +2117,7 @@ static void qedf_ll2_process_skb(struct work_struct *work) ...@@ -2117,7 +2117,7 @@ static void qedf_ll2_process_skb(struct work_struct *work)
/* Undo VLAN encapsulation */ /* Undo VLAN encapsulation */
if (eh->h_proto == htons(ETH_P_8021Q)) { if (eh->h_proto == htons(ETH_P_8021Q)) {
memmove((u8 *)eh + VLAN_HLEN, eh, ETH_ALEN * 2); memmove((u8 *)eh + VLAN_HLEN, eh, ETH_ALEN * 2);
eh = (struct ethhdr *)skb_pull(skb, VLAN_HLEN); eh = skb_pull(skb, VLAN_HLEN);
skb_reset_mac_header(skb); skb_reset_mac_header(skb);
} }
......
...@@ -1931,22 +1931,22 @@ static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len) ...@@ -1931,22 +1931,22 @@ static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
return skb->data; return skb->data;
} }
unsigned char *skb_pull(struct sk_buff *skb, unsigned int len); void *skb_pull(struct sk_buff *skb, unsigned int len);
static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) static inline void *__skb_pull(struct sk_buff *skb, unsigned int len)
{ {
skb->len -= len; skb->len -= len;
BUG_ON(skb->len < skb->data_len); BUG_ON(skb->len < skb->data_len);
return skb->data += len; return skb->data += len;
} }
static inline unsigned char *skb_pull_inline(struct sk_buff *skb, unsigned int len) static inline void *skb_pull_inline(struct sk_buff *skb, unsigned int len)
{ {
return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);
} }
unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); void *__pskb_pull_tail(struct sk_buff *skb, int delta);
static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) static inline void *__pskb_pull(struct sk_buff *skb, unsigned int len)
{ {
if (len > skb_headlen(skb) && if (len > skb_headlen(skb) &&
!__pskb_pull_tail(skb, len - skb_headlen(skb))) !__pskb_pull_tail(skb, len - skb_headlen(skb)))
...@@ -1955,7 +1955,7 @@ static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) ...@@ -1955,7 +1955,7 @@ static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len)
return skb->data += len; return skb->data += len;
} }
static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len) static inline void *pskb_pull(struct sk_buff *skb, unsigned int len)
{ {
return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len); return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len);
} }
...@@ -2938,7 +2938,7 @@ static inline void skb_postpush_rcsum(struct sk_buff *skb, ...@@ -2938,7 +2938,7 @@ static inline void skb_postpush_rcsum(struct sk_buff *skb,
__skb_postpush_rcsum(skb, start, len, 0); __skb_postpush_rcsum(skb, start, len, 0);
} }
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); void *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
/** /**
* skb_push_rcsum - push skb and update receive checksum * skb_push_rcsum - push skb and update receive checksum
......
...@@ -239,7 +239,7 @@ static int a2mp_discover_rsp(struct amp_mgr *mgr, struct sk_buff *skb, ...@@ -239,7 +239,7 @@ static int a2mp_discover_rsp(struct amp_mgr *mgr, struct sk_buff *skb,
} }
len -= sizeof(*cl); len -= sizeof(*cl);
cl = (void *) skb_pull(skb, sizeof(*cl)); cl = skb_pull(skb, sizeof(*cl));
} }
/* Fall back to L2CAP init sequence */ /* Fall back to L2CAP init sequence */
...@@ -279,7 +279,7 @@ static int a2mp_change_notify(struct amp_mgr *mgr, struct sk_buff *skb, ...@@ -279,7 +279,7 @@ static int a2mp_change_notify(struct amp_mgr *mgr, struct sk_buff *skb,
while (skb->len >= sizeof(*cl)) { while (skb->len >= sizeof(*cl)) {
BT_DBG("Controller id %d type %d status %d", cl->id, cl->type, BT_DBG("Controller id %d type %d status %d", cl->id, cl->type,
cl->status); cl->status);
cl = (struct a2mp_cl *) skb_pull(skb, sizeof(*cl)); cl = skb_pull(skb, sizeof(*cl));
} }
/* TODO send A2MP_CHANGE_RSP */ /* TODO send A2MP_CHANGE_RSP */
......
...@@ -1481,7 +1481,7 @@ EXPORT_SYMBOL(skb_push); ...@@ -1481,7 +1481,7 @@ EXPORT_SYMBOL(skb_push);
* is returned. Once the data has been pulled future pushes will overwrite * is returned. Once the data has been pulled future pushes will overwrite
* the old data. * the old data.
*/ */
unsigned char *skb_pull(struct sk_buff *skb, unsigned int len) void *skb_pull(struct sk_buff *skb, unsigned int len)
{ {
return skb_pull_inline(skb, len); return skb_pull_inline(skb, len);
} }
...@@ -1616,7 +1616,7 @@ EXPORT_SYMBOL(___pskb_trim); ...@@ -1616,7 +1616,7 @@ EXPORT_SYMBOL(___pskb_trim);
* *
* It is pretty complicated. Luckily, it is called only in exceptional cases. * It is pretty complicated. Luckily, it is called only in exceptional cases.
*/ */
unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta) void *__pskb_pull_tail(struct sk_buff *skb, int delta)
{ {
/* If skb has not enough free space at tail, get new one /* If skb has not enough free space at tail, get new one
* plus 128 bytes for future expansions. If we have enough * plus 128 bytes for future expansions. If we have enough
...@@ -3065,7 +3065,7 @@ EXPORT_SYMBOL_GPL(skb_append_pagefrags); ...@@ -3065,7 +3065,7 @@ EXPORT_SYMBOL_GPL(skb_append_pagefrags);
* that the checksum difference is zero (e.g., a valid IP header) * that the checksum difference is zero (e.g., a valid IP header)
* or you are setting ip_summed to CHECKSUM_NONE. * or you are setting ip_summed to CHECKSUM_NONE.
*/ */
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len) void *skb_pull_rcsum(struct sk_buff *skb, unsigned int len)
{ {
unsigned char *data = skb->data; unsigned char *data = skb->data;
......
...@@ -669,7 +669,8 @@ static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c) ...@@ -669,7 +669,8 @@ static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c)
while ((skb = skb_dequeue(&c->mfc_un.unres.unresolved))) { while ((skb = skb_dequeue(&c->mfc_un.unres.unresolved))) {
if (ip_hdr(skb)->version == 0) { if (ip_hdr(skb)->version == 0) {
struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); struct nlmsghdr *nlh = skb_pull(skb,
sizeof(struct iphdr));
nlh->nlmsg_type = NLMSG_ERROR; nlh->nlmsg_type = NLMSG_ERROR;
nlh->nlmsg_len = nlmsg_msg_size(sizeof(struct nlmsgerr)); nlh->nlmsg_len = nlmsg_msg_size(sizeof(struct nlmsgerr));
skb_trim(skb, nlh->nlmsg_len); skb_trim(skb, nlh->nlmsg_len);
...@@ -972,7 +973,8 @@ static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt, ...@@ -972,7 +973,8 @@ static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt,
/* Play the pending entries through our router */ /* Play the pending entries through our router */
while ((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) { while ((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) {
if (ip_hdr(skb)->version == 0) { if (ip_hdr(skb)->version == 0) {
struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); struct nlmsghdr *nlh = skb_pull(skb,
sizeof(struct iphdr));
if (__ipmr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) { if (__ipmr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) {
nlh->nlmsg_len = skb_tail_pointer(skb) - nlh->nlmsg_len = skb_tail_pointer(skb) -
......
...@@ -57,8 +57,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) ...@@ -57,8 +57,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
xfrm4_beet_make_header(skb); xfrm4_beet_make_header(skb);
ph = (struct ip_beet_phdr *) ph = __skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl - hdrlen);
__skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl - hdrlen);
top_iph = ip_hdr(skb); top_iph = ip_hdr(skb);
......
...@@ -846,7 +846,8 @@ static void ip6mr_destroy_unres(struct mr6_table *mrt, struct mfc6_cache *c) ...@@ -846,7 +846,8 @@ static void ip6mr_destroy_unres(struct mr6_table *mrt, struct mfc6_cache *c)
while ((skb = skb_dequeue(&c->mfc_un.unres.unresolved)) != NULL) { while ((skb = skb_dequeue(&c->mfc_un.unres.unresolved)) != NULL) {
if (ipv6_hdr(skb)->version == 0) { if (ipv6_hdr(skb)->version == 0) {
struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); struct nlmsghdr *nlh = skb_pull(skb,
sizeof(struct ipv6hdr));
nlh->nlmsg_type = NLMSG_ERROR; nlh->nlmsg_type = NLMSG_ERROR;
nlh->nlmsg_len = nlmsg_msg_size(sizeof(struct nlmsgerr)); nlh->nlmsg_len = nlmsg_msg_size(sizeof(struct nlmsgerr));
skb_trim(skb, nlh->nlmsg_len); skb_trim(skb, nlh->nlmsg_len);
...@@ -1106,7 +1107,8 @@ static void ip6mr_cache_resolve(struct net *net, struct mr6_table *mrt, ...@@ -1106,7 +1107,8 @@ static void ip6mr_cache_resolve(struct net *net, struct mr6_table *mrt,
while ((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) { while ((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) {
if (ipv6_hdr(skb)->version == 0) { if (ipv6_hdr(skb)->version == 0) {
struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); struct nlmsghdr *nlh = skb_pull(skb,
sizeof(struct ipv6hdr));
if (__ip6mr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) { if (__ip6mr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) {
nlh->nlmsg_len = skb_tail_pointer(skb) - (u8 *)nlh; nlh->nlmsg_len = skb_tail_pointer(skb) - (u8 *)nlh;
......
...@@ -54,7 +54,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb) ...@@ -54,7 +54,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
skb->mac_header = skb->network_header + skb->mac_header = skb->network_header +
offsetof(struct ipv6hdr, nexthdr); offsetof(struct ipv6hdr, nexthdr);
skb->transport_header = skb->network_header + sizeof(*top_iph); skb->transport_header = skb->network_header + sizeof(*top_iph);
ph = (struct ip_beet_phdr *)__skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl-hdr_len); ph = __skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl - hdr_len);
xfrm6_beet_make_header(skb); xfrm6_beet_make_header(skb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment