[NET]: Make skb_seq_read unmap the last fragment
Having walked through the entire skbuff, skb_seq_read would leave the last fragment mapped. As a consequence, the unwary caller would leak kmaps, and proceed with preempt_count off by one. The only (kind of non-intuitive) workaround is to use skb_seq_read_abort. This patch makes sure skb_seq_read always unmaps frag_data after having cycled through the skb's paged part. Signed-off-by: Olaf Kirch <olaf.kirch@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
515e06c455
Коммит
5b5a60da28
|
@ -1706,6 +1706,11 @@ next_skb:
|
|||
st->stepped_offset += frag->size;
|
||||
}
|
||||
|
||||
if (st->frag_data) {
|
||||
kunmap_skb_frag(st->frag_data);
|
||||
st->frag_data = NULL;
|
||||
}
|
||||
|
||||
if (st->cur_skb->next) {
|
||||
st->cur_skb = st->cur_skb->next;
|
||||
st->frag_idx = 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче