diff options
author | Sean Tranchetti <stranche@codeaurora.org> | 2019-11-20 16:51:45 -0700 |
---|---|---|
committer | Sean Tranchetti <stranche@codeaurora.org> | 2019-11-20 17:28:13 -0700 |
commit | 6f253f11dd58a548100890b1583ce3919cf442a9 (patch) | |
tree | 0913f0efe2ba0180a5e1df16183b9722d2c16bd5 /drivers/rmnet | |
parent | ceaa8bcb4fd81d260da49051c4539a5a0f683e90 (diff) | |
download | data-kernel-6f253f11dd58a548100890b1583ce3919cf442a9.tar.gz |
drivers: rmnet_perf: Check for over pulling
Much like the core driver, we must check for the return value of
rmnet_frag_pull() to ensure the descriptor is still valid before
continuing to process it.
Call Trace:
__memcpy+0x68/0x180
rmnet_perf_core_send_desc+0x48/0x58 [rmnet_perf]
rmnet_perf_opt_flush_single_flow_node+0x244/0x458 [rmnet_perf]
rmnet_perf_tcp_opt_ingress+0x228/0x270 [rmnet_perf]
rmnet_perf_opt_ingress+0x34c/0x3a0 [rmnet_perf]
rmnet_perf_core_desc_entry+0x114/0x168 [rmnet_perf]
Change-Id: I6665d7410bcdb6880af1ca20822328f81a2cc0ec
Signed-off-by: Sean Tranchetti <stranche@codeaurora.org>
Diffstat (limited to 'drivers/rmnet')
-rw-r--r-- | drivers/rmnet/perf/rmnet_perf_opt.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/rmnet/perf/rmnet_perf_opt.c b/drivers/rmnet/perf/rmnet_perf_opt.c index b411483..d6b21f7 100644 --- a/drivers/rmnet/perf/rmnet_perf_opt.c +++ b/drivers/rmnet/perf/rmnet_perf_opt.c @@ -318,10 +318,12 @@ rmnet_perf_opt_add_flow_subfrags(struct rmnet_perf_opt_flow_node *flow_node) new_frag = pkt_list[i].frag_desc; /* Pull headers if they're there */ - if (new_frag->hdr_ptr == rmnet_frag_data_ptr(new_frag)) - rmnet_frag_pull(new_frag, perf->rmnet_port, - flow_node->ip_len + - flow_node->trans_len); + if (new_frag->hdr_ptr == rmnet_frag_data_ptr(new_frag)) { + if (!rmnet_frag_pull(new_frag, perf->rmnet_port, + flow_node->ip_len + + flow_node->trans_len)) + continue; + } /* Move the fragment onto the subfrags list */ list_move_tail(&new_frag->list, &head_frag->sub_frags); |