DragonFlyBSD Kernel Audit
DF-0333 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -2467,6 +2467,14 @@
 			bzero(&xi, sizeof xi);
 			xi.xi_len = sizeof xi;
 			bcopy(inp, &xi.xi_inp, sizeof *inp);
+			/* scrub kernel pointers to avoid KASLR leak */
+			bzero(&xi.xi_inp.inp_hash, sizeof(xi.xi_inp.inp_hash));
+			bzero(&xi.xi_inp.inp_list, sizeof(xi.xi_inp.inp_list));
+			bzero(&xi.xi_inp.inp_portlist, sizeof(xi.xi_inp.inp_portlist));
+			xi.xi_inp.inp_pcbinfo = NULL;
+			xi.xi_inp.inp_socket = NULL;
+			xi.xi_inp.inp_porthash = NULL;
+			xi.xi_inp.inp_phd = NULL;
 			if (inp->inp_socket)
 				sotoxsocket(inp->inp_socket, &xi.xi_socket);
 			if ((error = SYSCTL_OUT(req, &xi, sizeof xi)) != 0)