In a medium saucepan over medium heat, whisk together the milk, sugar, flour and salt, and bring to a boil.
When the mixture starts to boil, continue to cook, whisking constantly for another 2-3 minutes. The mixture will thicken and resemble pudding.
Whisk in the vanilla.
Strain the mixture into a shallow container to remove any clumps. Place plastic wrap over the surface of the mixture to prevent a film from forming.
Leave to cool to room temperature or pop in the freezer for 15-20 minutes. It should be room temperature to touch, not cold.
In the bowl of a stand mixer fitted with the paddle attachment, beat the butter on medium-high speed until light and fluffy.
Add the room temperature flour mixture to the butter, a few tablespoons at a time.
Once combined, whip the frosting on high for 3-5 minutes until smooth, light and fluffy.