Larsson was a restricted free agent. The Swede had six goals and eight assists in 73 games with Buffalo last season.
The team announced the contract on Friday.
Larsson made his NHL debut with Minnesota in 2013, but was traded to Buffalo after just one game with the Wild.
Larsson, who turns 27 on July 25, has 32 goals and 47 assists in 331 career NHL games.