⬢ DragonFlyBSD Kernel Audit
DF-2715 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1005,6 +1005,13 @@
 	}
 
 	error = so_pru_soreceive(so, sa, auio, NULL, control, flags);
+	/*
+	 * MSG_FNONBLOCKING / MSG_FBLOCKING are kernel-internal force
+	 * flags; strip them so they never leak into the user-visible
+	 * msg_flags word.
+	 */
+	if (flags != NULL)
+		*flags &= ~(MSG_FNONBLOCKING | MSG_FBLOCKING);
 	if (error) {
 		if (auio->uio_resid != len && (error == ERESTART ||
 		    error == EINTR || error == EWOULDBLOCK))