Leinster were forced to withstand a late Ulster rally as they maintained their unbeaten start to the season in Belfast.

Two tries in the opening 21 minutes from Ryan Baird and Dan Sheehan helped Leinster into a lead they would not relinquish, although they came under pressure late on as Ulster scored 10 unanswered points to set up a tense finish.

John Andrew scored the home side's only try off a driving maul while Jimmy O’Brien was in the sin bin, and although John Cooney made it a seven-point game with seven minutes remaining, Leinster had enough in the tank to close the game out.

Johnny Sexton enjoyed a 13-minute cameo off the bench but there were concerns for fellow Ireland international Jacob Stockdale, who limped off injured at half-time.

Ulster had lost just once at home in the BKT United Rugby Championship since April 2021 but a struggling set-piece hurt them at key moments.

Minutes after conceding the first of three scrum penalties, Ulster were hit with an early sucker punch when Leinster scored off their first visit to the home 22.

Lovely hands from Garry Ringrose and Dave Kearney put Baird over in the corner, with Ross Byrne adding the extras.

Ulster responded well but went unrewarded as they were held up over the line. Cooney did get them on the board with a penalty but it felt like an unsatisfactory return.

Having lost hooker Rob Herring to injury, Ulster's efforts to up the tempo then backfired. Henshaw read a quick lineout and forced a turnover, with Ross Byrne finding touch deep inside the 22.

From there it was business as usual, Sheehan touching down at the back of a driving maul to bag his 21st try in 31 games.

A torrential downpour contributed to a plethora of handling errors during a stop-start second quarter, but Leinster did extend their lead on 38 minutes as back-to-back Ulster penalties gifted Byrne another three points.

Byrne added another penalty after the restart as Ulster frustrations continued to grow. Nick Timoney charged off the base of a scrum inside the Leinster 22, only to spill the ball in contact.

When Byrne kicked a penalty to touch for a five-metre lineout, another Sheehan special looked on the cards, but Ulster’s defence held firm this time and that was the lift Dan McFarland’s charges required.

A powerful carry by Stuart McCloskey took Ulster to within inches of the tryline, with O’Brien yellow-carded for killing the ball on the deck.

Ulster then gave Leinster a taste of their own medicine, mauling their way over the visitors’ line with Andrew touching down.

Sexton was sprung from the bench but it was his namesake who went agonisingly close to a second try. Aaron Sexton was put over in the corner by Michael Lowry, only for the TMO to spot that Charlie Ngatai had got a vital hand in to dislodge the ball before it was grounded.

Cooney did cut the gap with another penalty but Leinster hung on to avenge last season’s back-to-back losses and extend their 100% start.

Ulster: Michael Lowry; Aaron Sexton, Luke Marshall, Stuart McCloskey, Jacob Stockdale; Billy Burns, John Cooney; Andrew Warwick, Rob Herring, Tom O'Toole; Alan O'Connor (capt), Kieran Treadwell; Matty Rea, Marcus Rea, Nick Timoney

Replacements: John Andrew, Eric O'Sullivan, Marty Moore, Sam Carter, Greg Jones, Dave Shanahan, Angus Curtis, Ben Moxham

Leinster: Jimmy O'Brien; Jordan Larmour, Garry Ringrose (capt), Robbie Henshaw, Dave Kearney; Ross Byrne, Luke McGrath; Andrew Porter, Dan Sheehan, Michael Ala'alatoa; Ross Molony, Jason Jenkins; Ryan Baird, Josh van der Flier, Jack Conan

Replacements: John McKee, Ed Byrne, Vakh Abdaladze, James Ryan, Will Connors, Nick McCarthy, Johnny Sexton, Charlie Ngatai

Referee: Andrew Brace (IRFU)