staging: unisys: Linarize skbs

If we can't fit an skb into a frag array, linaraize it so we don't have to

Signed-off-by: Neil Horman <nhorman@redhat.com>
Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Neil Horman 2015-07-21 09:55:38 -04:00 коммит произвёл Greg Kroah-Hartman
Родитель 998ff7f85d
Коммит 513e1cbda2
1 изменённых файлов: 16 добавлений и 0 удалений

Просмотреть файл

@ -221,9 +221,25 @@ visor_copy_fragsinfo_from_skb(struct sk_buff *skb, unsigned int firstfraglen,
struct phys_info frags[])
{
unsigned int count = 0, ii, size, offset = 0, numfrags;
unsigned int total_count;
numfrags = skb_shinfo(skb)->nr_frags;
/*
* Compute the number of fragments this skb has, and if its more than
* frag array can hold, linearize the skb
*/
total_count = numfrags + (firstfraglen / PI_PAGE_SIZE);
if (firstfraglen % PI_PAGE_SIZE)
total_count++;
if (total_count > frags_max) {
if (skb_linearize(skb))
return -EINVAL;
numfrags = skb_shinfo(skb)->nr_frags;
firstfraglen = 0;
}
while (firstfraglen) {
if (count == frags_max)
return -EINVAL;