Madrid could have conceded an early penalty when Casemiro brought down Nacho Monreal. They were the better side in the first half, though, as Luka Modric had a shot blocked, Mariano Diaz headed against the bar and Marco Asensio sent his follow-up wide. Toni Kroos went close when played in by Isco, before Modric had another effort saved.
La Real took the lead, Portu's brilliant header beating Thibaut Courtois, and Alexander Isak could have doubled their advantage when he failed to get a touch on Portu's cross. Madrid pushed hard, their best chance coming when Casemiro headed wide, before substitute Vinicius scored with a deflected shot in the 89th minute.
The Madrid squad is looking healthier than it has for weeks, with Federico Valverde, Rodrygo, Marcelo and Alvaro Odriozola all fit enough to take a place on the bench, and make an impact off it. Key players such as Sergio Ramos and Karim Benzema are still missing, but at least coach Zinedine Zidane will be able to rotate now.
Isco's performance was again encouraging, and Madrid's midfield remains the side's outstanding strength. The team's attitude is impressive, too, and here they kept battling away until the equaliser eventually came. It's two points dropped in the title race, but Madrid will take solace from the manner in which they earned a draw.
The team really fell apart at half-time, looking sleepy and stunned as Real Sociedad opened the scoring through Portu and then almost added a second. The first-half dominance had been impressive, but Madrid failed to make it count and were then punished when the visitors raised their game.
Serious problems in attack remain. Mariano is not an adequate substitute for Benzema, and Hugo Duro is not the answer either. Asensio is a nice player to watch but lacks the necessary bite or killer instinct to take the next step up. Madrid's defence is reliable, and the midfield is peerless, but they won't win the league if the forward line doesn't find its shooting boots.
Manager rating out of 10
7 -- Zidane was up against an old adversary here in La Real coach Imanol Alguacil. The pair first faced each other when in charge of the two clubs' B-teams in 2014.
With 15 senior outfield players available now, Zidane left Vinicius on the bench, sticking with Isco and recalling centre-forward Mariano. Those decisions looked astute, the team responding with a fluid, dominant first-half performance. When things went wrong later, Zidane reacted quickly with a triple change, and that helped the late onslaught that saw Madrid eventually score.
Player ratings (1-10; 10 = best. Players introduced after 70 minutes get no rating)
GK Thibaut Courtois, 6 -- As has often been the case lately, a mostly quiet night. Spilled one aerial ball after half-time. Couldn't get near Portu's header.
DF Lucas Vazquez, 7 -- It's to his credit that Dani Carvajal -- absent for so much of this season -- has not been overly missed at right-back. Did well to fashion the best chance of the first half for Mariano. Provided plenty more good crosses after that, eventually creating the equaliser.
DF Raphael Varane, 6 -- Captained the team. Hit the woodwork in the first half, but had his share of the blame for La Real's resurgence after the interval.
DF Nacho, 6 -- Unflashy, and often under the radar, but offers a quiet leadership and steady presence at the back. One important clearance from Monreal's cross just after half-time.
MF Casemiro, 6 -- Got away with a clumsy challenge -- as he so often does -- on Monreal inside the first ten minutes that could, or should, have resulted in a spot kick. Headed a good second-half chance wide.
MF Toni Kroos, 8 -- Exceptional again. Now the German with most Real Madrid appearances. Could have scored in the first half after a thrilling, surprisingly dynamic burst into the box.
MF Luka Modric, 7 -- Involved in the play throughout the first half, with some gorgeous passing. Had a powerful shot well saved before half-time. Tired later and was replaced.
FW Isco, 7 -- Kept his place in the team, starting two matches in a row for the first time this season and his first league game since November. Played on the left of the front three. Did really well to set up Modric in the first half and created a chance for Kroos, too. Deserves more opportunities on this showing.
FW Marco Asensio, 5 -- One early touch showed the quality he undoubtedly possesses. Should have hit the target after ball came to him following Mariano's header. A record of two goals in 31 appearances this season is simply not good enough.
FW Mariano Diaz, 5 -- Back in the team with a point to prove after being left out in Europe. Had a close-range header deflected onto the bar when it looked easier to score midway through the first half, and shot well wide later on.
FW Rodrygo, 7 -- Played the last half hour and created one good chance, shooting wide.
MF Vinicius Junior, 7 -- A surprise demotion to the bench, although he can't argue in terms of recent form. Scored the all-important equaliser, getting a bit of luck, for his first goal since October.
FW Hugo Duro, 6 -- Replaced Mariano and had two headers off target.
MF Federico Valverde, N/R -- Made his return from injury after almost six weeks out. His back-heel started the move that led to the equaliser.