diff options
Diffstat (limited to 'net/core/skmsg.c')
| -rw-r--r-- | net/core/skmsg.c | 4 | 
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/skmsg.c b/net/core/skmsg.c index 59e75ffcc1f4..188f8558d27d 100644 --- a/net/core/skmsg.c +++ b/net/core/skmsg.c @@ -461,7 +461,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg,  			if (copied == len)  				break; -		} while (!sg_is_last(sge)); +		} while ((i != msg_rx->sg.end) && !sg_is_last(sge));  		if (unlikely(peek)) {  			msg_rx = sk_psock_next_msg(psock, msg_rx); @@ -471,7 +471,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg,  		}  		msg_rx->sg.start = i; -		if (!sge->length && sg_is_last(sge)) { +		if (!sge->length && (i == msg_rx->sg.end || sg_is_last(sge))) {  			msg_rx = sk_psock_dequeue_msg(psock);  			kfree_sk_msg(msg_rx);  		}  | 
