diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2021-10-13 23:43:06 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2021-10-13 23:43:48 +0000 |
commit | 04c91ac48ad13ce0d1392cedbd69c2c0223d206f (patch) | |
tree | f54e2dfde3ebc00603897ec2260ff744d2065ca6 | |
parent | a524aaf68341d9f83a0ef7dc21ad54728ddaaa1e (diff) | |
download | src-04c91ac48ad13ce0d1392cedbd69c2c0223d206f.tar.gz src-04c91ac48ad13ce0d1392cedbd69c2c0223d206f.zip |
selsocket: handle sopoll() errors correctly
Without this change, unmounting smbfs filesystems with an INVARIANTS
kernel would panic after 10e64782ed59727e8c9fe4a5c7e17f497903c8eb.
Found by: markj
Reviewed by: markj, jhb
Obtained from: CheriBSD
MFC after: 3 days
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D32492
-rw-r--r-- | sys/kern/sys_generic.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index e6b2cba27a04..41e9c556f73f 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -1794,10 +1794,10 @@ selsocket(struct socket *so, int events, struct timeval *tvp, struct thread *td) */ for (;;) { selfdalloc(td, NULL); - error = sopoll(so, events, NULL, td); - /* error here is actually the ready events. */ - if (error) - return (0); + if (sopoll(so, events, NULL, td) != 0) { + error = 0; + break; + } error = seltdwait(td, asbt, precision); if (error) break; |