Revert "rmnet_core: Check for contiguous QMAP headers during deaggregation"

This reverts commit df2d62bed0.

Change-Id: Icc987d5f1ba74199f420e2ee65902d8e60e4fda9
This commit is contained in:
Divya Sharma 2020-10-06 08:15:33 -07:00
commit 31bf9bae37

View file

@ -558,36 +558,20 @@ int rmnet_frag_flow_command(struct rmnet_frag_descriptor *frag_desc,
}
EXPORT_SYMBOL(rmnet_frag_flow_command);
static int rmnet_frag_deaggregate_one(struct sk_buff *skb,
static int rmnet_frag_deaggregate_one(struct skb_shared_info *shinfo,
struct rmnet_port *port,
struct list_head *list,
u32 start_frag)
{
struct skb_shared_info *shinfo = skb_shinfo(skb);
struct rmnet_frag_descriptor *frag_desc;
struct rmnet_map_header *maph, __maph;
struct rmnet_map_header *maph;
skb_frag_t *frag;
u32 i;
u32 pkt_len;
int rc;
frag = &shinfo->frags[start_frag];
/* Grab the QMAP header. Careful, as there's no guarantee that it's
* continugous!
*/
if (likely(skb_frag_size(frag) >= sizeof(*maph))) {
maph = skb_frag_address(frag);
} else {
/* The header's split across pages. We can rebuild it.
* Probably not faster or stronger than before. But certainly
* more linear.
*/
if (skb_copy_bits(skb, 0, &__maph, sizeof(&__maph)) < 0)
return -1;
maph = &__maph;
}
maph = skb_frag_address(frag);
pkt_len = ntohs(maph->pkt_len);
/* Catch empty frames */
if (!pkt_len)
@ -606,19 +590,9 @@ static int rmnet_frag_deaggregate_one(struct sk_buff *skb,
u32 hsize = 0;
u8 type;
/* Check the type. This seems like should be overkill for less
* than a single byte, doesn't it?
*/
if (likely(skb_frag_size(frag) >= sizeof(*maph) + 1)) {
type = *((u8 *)maph + sizeof(*maph));
} else {
if (skb_copy_bits(skb, sizeof(*maph), &type,
sizeof(type)) < 0)
return -1;
}
/* Type only uses the first 7 bits */
switch ((type & 0xFE) >> 1) {
type = ((struct rmnet_map_v5_coal_header *)
(maph + 1))->header_type;
switch (type) {
case RMNET_MAP_HEADER_TYPE_COALESCING:
hsize = sizeof(struct rmnet_map_v5_coal_header);
break;
@ -673,7 +647,7 @@ void rmnet_frag_deaggregate(struct sk_buff *skb, struct rmnet_port *port,
int rc;
while (i < shinfo->nr_frags) {
rc = rmnet_frag_deaggregate_one(skb, port, list, i);
rc = rmnet_frag_deaggregate_one(shinfo, port, list, i);
if (rc < 0)
return;