With the victory, Ferrari's Sebastian Vettel took a one-point lead in the Formula One standings over Mercedes' Lewis Hamilton, who finished fifth.
Ferrari's Sebastian Vettel has won the Canadian Grand Prix after leading the race from the pole to the checkered flag — and then some.
Vettel picked up his second career victory at the Circuit Gilles Villeneuve and the first for Ferrari in Montreal since Michael Schumacher won three in a row from 2002-04.
The only hiccup was that the checkered flag was waved prematurely, while Vettel was still on his last lap.
"Tell them not to wave the checkered flag when it's not done yet," he radioed back.
With the victory, Vettel took a one-point lead in the Formula One standings over Mercedes' Lewis Hamilton, who was fifth.
Valtteri Bottas was second in his Mercedes, about six seconds back. Max Verstappen was third and the other Red Bull car, driven by Daniel Ricciardo, was fourth.
It's Vettel's 50th career win and his third of the season.
Starting cleanly and pulling away from the field, Vettel led all 70 laps at the 4.36 km track named for the Ferrari driver and Montreal native who earned his first Formula One victory on this track 40 years ago.
Vettel grabbed a Ferrari flag and waved it on his way to the podium.
"I feel very emotional," the German said. "It's just a day to remember the great Gilles Villeneuve."
The day was less positive for two-time world champion Fernando Alonso, who was celebrating his 300th Formula One race. He retired to the garage after 43 laps — the eighth time he failed to finish at the Circuit Gilles Villeneuve.
Last year, Alonso was headed for a Top 10 finish before running into engine problems in the 66th lap. He parked his car alongside the track and climbed into the stands to watch the end of the race — to the thrill of the Montreal fans.
It was also a short day for Brandon Hartley and hometown favorite Lance Stroll, who locked up heading into Turn 5 on the first lap. A year ago in Montreal, Stroll picked up the first Formula One points of his career.
Sergio Perez skidded onto the grass on the restart but managed to straighten himself out and rejoin the race in another early mishap.