DF-0333 / fix.diff
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) |