Existem serviços que um kernel fornece ao usuário (como abrir sockets). Existe uma interface bem definida (API) que os programas de espaço do usuário podem interagir com o kernel.
Nesse caso, o programa de espaço do usuário está abrindo repetidamente soquetes e enviando descritores de arquivos por meio deles, fechando os soquetes. Essas ações são executadas pelo kernel. Ele manterá o descritor de arquivo em um buffer até que a outra extremidade do soquete o leia. O bug em particular é que um coletor de lixo deve eventualmente liberar o descritor de arquivo, mas isso não acontece - o fd é perdido. Os fds vazados se somam e ficam ali consumindo recursos. Matar o programa não libera os recursos porque eles não pertencem ao programa.