O’Reilly tied it 1-all at 15:46 when his deflected shot beat goalie Petr Mrazek between the legs. Larsson scored the go-ahead goal with 3:13 remaining, his first goal in 30 games since April 6 last season against Carolina.
Detroit had earned at least one point in 13 consecutive games.
Buffalo snapped an eight-game winless streak in Detroit with its first victory there since Oct. 13, 2006.
After a scoreless first period, the Red Wings got the game’s first goal at 4:01 of the second.
In 22 career games against the Sabres, Datsyuk has nine goals and 13 assists.
Tomas Jurco had a chance to give the Red Wings a two-goal lead when he was awarded a penalty shot at 14:56 of the second, but Johnson made a glove save.
Mrazek made 28 saves while Johnson had 33.
O’Reilly has a point in eight straight games, with four goals and seven assists during that span.
The Red Wings have blown third-period leads in nine of their last 14 games.
NOTES: Red Wings defenseman Mike Green played in his 600th career game. . Sabres defenseman Rasmus Ristolainen remains the only NHL player with an average ice time over 20 minutes with no penalty minutes. . The Red Wings remain one win shy of their 800th at Joe Louis Arena.