The recalled Sergio Asenjo was forced into routine saves from Benzema and Ronaldo in the opening 10 minutes, but, just as frustrations began to mount inside the Bernabeu, the fans were on their feet in the 41st minute as Benzema made the breakthrough.
Ronaldo surged towards the left byline and his driven cross was parried by Asenjo, the ball falling perfectly for Benzema to nod into the unguarded goal from eight yards.
Villarreal almost conjured an immediate riposte as Keylor Navas produced an impressive stop to deny Denis Suarez, who had Cedric Bakambu unmarked to his left waiting for a tap-in.
The home side began the second period with greater urgency than they had the first and Ronaldo was furious with himself for sending a free header over from Toni Kroos’ corner.
Modric – one of five changes from the Getafe game – curled narrowly wide shortly afterwards, but Madrid doubled their lead in the 69th minute as Vazquez exchanged passes with Benzema and burst into the box before rifling a low finish beyond Asenjo at the near post for Madrid’s 100th league goal of the campaign.
Seven minutes later Modric added his name to the scoresheet, sliding in to steer a superb volley from Danilo’s right-wing cross into the bottom-right corner.