mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
socket: Do not include control messages in FIONREAD return value
Some system software expects to be able to read at least the number of bytes returned by FIONREAD. When control messages are counted in this return value, this assumption is violated. Follow Linux and OpenBSD here (as well as our own kevent(EVFILT_READ)) and only return the number of data bytes available. Reported by: avg MFC after: 2 weeks
This commit is contained in:
parent
e31cc1d526
commit
b864b67a0d
1 changed files with 3 additions and 2 deletions
|
|
@ -206,12 +206,13 @@ soo_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *active_cred,
|
|||
break;
|
||||
|
||||
case FIONREAD:
|
||||
/* Unlocked read. */
|
||||
SOCK_RECVBUF_LOCK(so);
|
||||
if (SOLISTENING(so)) {
|
||||
error = EINVAL;
|
||||
} else {
|
||||
*(int *)data = sbavail(&so->so_rcv);
|
||||
*(int *)data = sbavail(&so->so_rcv) - so->so_rcv.sb_ctl;
|
||||
}
|
||||
SOCK_RECVBUF_UNLOCK(so);
|
||||
break;
|
||||
|
||||
case FIONWRITE:
|
||||
|
|
|
|||
Loading…
Reference in a new issue