|
@@ -1466,6 +1466,11 @@ alloc_new_skb:
|
|
*/
|
|
*/
|
|
alloclen += sizeof(struct frag_hdr);
|
|
alloclen += sizeof(struct frag_hdr);
|
|
|
|
|
|
|
|
+ copy = datalen - transhdrlen - fraggap;
|
|
|
|
+ if (copy < 0) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
if (transhdrlen) {
|
|
if (transhdrlen) {
|
|
skb = sock_alloc_send_skb(sk,
|
|
skb = sock_alloc_send_skb(sk,
|
|
alloclen + hh_len,
|
|
alloclen + hh_len,
|
|
@@ -1515,13 +1520,9 @@ alloc_new_skb:
|
|
data += fraggap;
|
|
data += fraggap;
|
|
pskb_trim_unique(skb_prev, maxfraglen);
|
|
pskb_trim_unique(skb_prev, maxfraglen);
|
|
}
|
|
}
|
|
- copy = datalen - transhdrlen - fraggap;
|
|
|
|
-
|
|
|
|
- if (copy < 0) {
|
|
|
|
- err = -EINVAL;
|
|
|
|
- kfree_skb(skb);
|
|
|
|
- goto error;
|
|
|
|
- } else if (copy > 0 && getfrag(from, data + transhdrlen, offset, copy, fraggap, skb) < 0) {
|
|
|
|
|
|
+ if (copy > 0 &&
|
|
|
|
+ getfrag(from, data + transhdrlen, offset,
|
|
|
|
+ copy, fraggap, skb) < 0) {
|
|
err = -EFAULT;
|
|
err = -EFAULT;
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
goto error;
|
|
goto error;
|