Boolean modifier combined with Subsurf modifier creates weird shapes. How to Fix?
Boolean operations always messes with the topology of the mesh, you can go around this in some ways, but the best practice is to invest in understanding topology, and how to create the best topology for Your model. In this Example, I would make the model without the boolean modifier and do something like this:

Without subsurf



With subsurf, and edge crease on the edges to create sharp edges.



If you want to learn about topology, the anvil series by Blender Guru is quite good. He also addresses the issues with the boolean modifier and the topology (in part 2).